Press "Enter" to skip to content

Mylące operatory

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

  1. 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.