Ú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: , ,
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s