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