2009. július 3., péntek

Az operátorokrú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.

0 megjegyzés:

Megjegyzés küldése