Új kedvenc: ?? operátor

A .NET Framework 2.0 megjelenésével elérhetővé váltak az ún. nullable típusok, azaz olyan érték típusok, amelyek null értékűek is lehetnek. Ilyen például a Nullable<Int32> vagy Nullable<bool> típus, mely utóbbi három értéket is felvehet, lehet true, false vagy null. Ennek megfelelően nem szerepelhet logikai kifejezésekben, azaz például nem állhat if, for vagy while feltételében. Természetesen lehet bool típusra kasztolni, de előtte nem szabad megfeledkezni a HasValue metódus hívásáról, hiszen null-t nem lehet logikai értékre kasztolni.

A legszebb az egészben, hogy a C#-ban megjelentek nyelvi elemek a nullable típusokhoz kapcsolódóan, így Nullable<bool> helyett elég ennyit írnunk: bool?, a többit a fordító elintézi.

Ez a lehetőség sok helyen egyszerűsítheti az alkalmazásunk logikáját, de bizony itt-ott bonyolíthatja is a kódot, hiszen nem szabad elfelejtkeznünk a null érték ellenőrzéséről. Itt jön a képbe a ?? operátor, amiről az MSDN a következőt írja:

The ?? operator returns the left-hand operand if it is not null, or else it returns the right operand.

Hohó, de hisz erre nagyon gyakran van szükség! Gondoljuk csak végig, egy webalkalmazásban hányszor írunk olyan kódot, amelyben ellenőrizzük, hogy a Session, a Cache, a ViewState, a QueryString vagy valamelyik más szótár típusú gyűjtemény egyik eleme tartalmaz-e értéket vagy sem! Biztosan írtunk már valami hasonlót (akár az as operátor használatával):

    object name = this.Session[ "nev" ];

    if( name != null )
    {
        this.lblResult.Text = name.ToString();
    }
    else
    {
        this.lblResult.Text = "Nincs adat!";
    }

A ?? operátor segítségével mindez ennyire rövidül le:

    this.lblResult.Text = (string) ( this.Session[ "nev" ] ?? "Nincs adat" );

Vagy akinek így jobban tetszik:

    this.lblResult.Text = ( this.Session[ "nev" ] ?? "Nincs adat" ).ToString();

Egy másik példa integerrel:

    int age = (int) ( this.Session[ "kor" ] ?? 0 );

Hát nem csodálatos?! Szerintem sokkal tisztábban látszik, hogy csak a null érték kezelését akarjuk megoldani. Persze először nehéz megszokni, hogy hogy is kell mindezt olvasni, de ahogy túltettük magunkat a ?: operátoron, úgy egyszer majd ezen sem fogunk fennakadni…

 

Technorati tags: , ,

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s