Tego posta miało nie być. W bardziej zwięzłej formie miałam napisać (i napisałam) zwykły komentarz na blogu. Niestety nie dało rady z tym komentarzem u niego, w takim razie opiszę tutaj.
Owo zamieszanie wywołało we mnie zdanie:
Dwuargumentowy operator ?: [w c++] działa bardzo podobnie jak operator ?? w języku C#, ma jednak ograniczenia, które nie zawsze pozwalają na jego elastyczne zastosowanie.
Moim zdaniem jedynym podobieństwem jest to, że oba na poziomie kompilatora są rozwijane do jakiegoś ifa. 🙂
Wcześniej jednak napisał:
Operator ?: przyjmuje trzy argumenty, pierwszy z nich to wyrażenie, które ma zwracać wartość logiczną, na podstawie której wybierana jest jedna z dwóch pozostałych argumentów. Jeżeli wartość pierwszego wyrażenia będzie oznaczała true, wtedy zostanie zwrócony pierwszy argument, w przeciwnym przypadku drugi.
Czyli… Okazuje się, że operator ?: w c++ działa… jak operator ?: w c#:) Jakże miało by być inaczej.
a?b:c
można wszak zapisać jako
if (a) return b; else return c;
zaś
a??b
można zapisać jako
if (a!= null) return a; else return b;
Jak się ma jeden operator do drugiego? Ano tak
int? value = null; var x = value.HasValue ? value.Value : default(int?);
można zapisać inaczej jako
int? value = null; var x = value ?? default(int?);
Jedyne co, jest ograniczeniem, to że w przypadku operatora ?? musi być coś, co może przyjąć nulla, zaś przy ?: wyrażenie przed wykrzyknikiem musi zwrócić boola (nie da się w locie skonwertować z inta na boola, jak może to mieć miejsce w c++ z racji silnej typowalności)
I to by było na tyle. Pozdrawiam raphaala i zachęcam do odwiedzenia http://rph-blog.pl/
//edit Ok, mój błąd, przeoczyłam o tej dwuargumentowości;P
One Comment
Mylące operatory – Zagubiona wśród własnych myśli – Piatkosia’s blog
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl
Comments are closed.