null tip podataka i operator ?? u C# 2.0


Uvod

Pored mnogih novina koje su se dogodile u C# 2.0 u odnosu na prethodne, svakako je i null tip. Prethodne verzije C# oskudjevale su u jednostavnim rješenjima prilikom manipulisanja s null vrijednostima. To se prvenstveno odnosi na podatke koji su dolazili iz eksternog izvora podataka kao što su baze podataka ili XML. Compajler C# 2.0 uvodi nas u novi tip podataka s kojim na vrlo jednostavan način manipulišemo null vrijednostima. Kada su u pitanju reference kao tipovi podataka tu je stvar jasna jer ovi tipovi mogu imati null vrijednost.

Kada govorimo o vrijednosnim tipovima podataka null vrijednost nije po defaultu definisana. Kada npr. mapiramo kolonu iz baze podataka koja je tipa int ili bool, u našim aplikacijama moramo dodatno implementirati manipulaciju sa null vrijednosti, jer će u suprotnom naša aplikacija izbaciti izuzetak i prekinuti rad. Npr. pogledajmo sljedeći primjer:

int i=null;

Kada želimo ovaj kod da kompajliramo dobijamo grešku koja govori o tome da vrijednosni tipovi ne mogu imati vrijednost null.Verzija kompajlera C# 2.0 ovaj problem je riješila na taj način da za svaki vrijednosni tip podataka možemo formirati null vrijednost preko generičke strukture System.Nullable<T>. Ova generička struktura na jednostavan način manipuliše sa null vrijednosnim.

Definisanje vrijednosnog tipa podatka pomoću strukture System.Nullable<T>

Definisanje vrijednosnih tipova pomoću strukture System.Nullable<T> obezbjeđujemo da tip može poprimiti vrijednost null. Npr. Sljedeći primjer pokazuje definiciju int, bool, DateTime vrijednosnih tipova pomoću pomenute strukture respektivno:

image

Umjesto pisanja Nullable<T> null vrijednosni tip podataka skraćeno možemo definisati preko operatora ?. Prethodni primjer je identičan sljedećem primjeru:

image

Korištenje null vrijenosnog tipa

Struktura Nullable<T> posjeduje nekoliko pomoćnih metoda i osobina za manipulaciju sa null vrijednosti.

HasValue osobina vraća false ako varijabla posleduje null vrijednost, inače vraća true. Provjera null vrijednosti možemo implementirati i klasičnim != operatorom tj: intVrijednost !=null.

?? Operator

Operator ?? je novina u C# 2.0 i jednostavno omogućava da se u vrijeme definisanja nullable varijable provjeri da li varijabla poprima null vrijednost, te u potvrdnom slučaju daje nam mogućnost pridruživanja diefoltne vrijednosti. Npr. Pretpostavimo da metoda GetIntFromDataBase() izvlači vrijednost iz baze podataka. Ne možemo pretpostaviti da li će metoda uvijek vraćati integer, pa u klasičnom postupku tu bi ubacili jedan if kojim bi čekirali da li je vraćena vrijednost null i pohranili neku defoltnu vrijednost. Međutim operator ?? daje nam vrlo elegantno rješenje. Npr.

image

Ovo znači, ako je vraćena vrijednost iz baze podataka null vrijednost tada u varijablu vrijednost pohrani vrijednost 1.

Ovaj operator je identičan operatoru ? : u C++, s kojim zamjenjujemo naredbe if else.

Zaključak

Nullable<T> struktura daje nam mogućnosti elegantnog upravljanja s null vrijednostima posebno kada manipulišemo s eksternim izvorima podataka. Ovaj tip podataka zajedno sa operatorom ?? daje nam vrlo interesantna rješenja, a posebno elegantna rješanje dobijamo u kombinaciji sa LINQ i novim tehnologija koje dolaze sa C# 3.0, o kojima će biti riječi u skoroj budućnosti na ovom blogu.

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 30/09/2007, in .NET, C# and tagged . Bookmark the permalink. Leave a comment.

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s