Akadémia alcsoport

Keresés

Az operátorokrúl Nyíl

Megesik, hogy egy referencia típusú változó egy referencia típusú tulajdonságára vagyunk kíváncsiak. Aki ezután a mondat után hajlandó tovább olvasni, annak elmondom, hogy ez esetben lehet, hogy a tulajdonság null, de az is megeshet, hogy maga a változónk az. Azt az esetet "le kell védeni" egy jó if-fel, különben jön a csúf nullreference (illetve nem biztos, hogy jön, attól függ, jellemzően pl. lokálban sose nem jön, esküszök, produkciós környezetben meg feszt).
Így néz ez ki (így talán érthetőbb is, mint leírva):

public static void SomeMethod(Car car)
{
    // A car objektum Color tulajdonságára
    // vagyunk kíváncsiak - a car lehet null is
    string carColor = null;
    if (car != null)
        carColor = car.Color;
    ...
}

Na, ezt írhatjuk pl. a C# ? : conditional operátora segítségével így, elegánsan:

public static void SomeMethod(Car car)
{
    string carColor = car == null ? null : car.Color;
    ...
}

Ha pedig mindenképp szeretnénk a carColor változónknak értéket adni, megtoldhatjuk még az egészet a ?? - aka. null-coalescing - operátorral, így (ha a zárójeleket lehagyjuk, akkor is működik, csak valami olyat kapunk, ami a népi bölcselet szerint nem rossz, csak másra jó):

public static void SomeMethod(Car car)
{
    string carColor = (car == null ? null : car.Color) ?? "Ismeretlen";
    ...
}

Ez, ugye, egyfelől remek, tömörebb a kód, elegánsabb, a gyíkek szeretik az ilyet, boldogok tőle. Érdemes azonban gondolni kevésbé gyík embertárainkra is, akik esetleg a szívükhöz kapnak, ha meglátnak egy ilyet.
Vagy magunkra, amikor nekünk kell ezt debugolni.
Ahogy épp a szívünkhöz kapunk.

Nem célszerű tehát túlzásba sem vinni az tömörgetést - könnyen a kód olvashatóságának rovására mehet, pedig a cél pont ennek a javítása lenne. Okosan kell használni, és mindenki boldog lesz.


Egyébként, ha már olvashatóság, ezt ismerik? Próbálják vele megviccelni barátaikat. Ha sikerül, gondolkozzanak el az életükön.

A teljes bejegyzést itt olvashatod: http://feedproxy.google.com/~r/OtPercDotnet/~3/vtAkYH2U7Oc/null-coalescing-and-conditional.html


Elküldve 2009. 07. 03. 12:06 by öt perc dotnet
Lementve:
Megtekintve: 190 alkalommal