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.

Advertisements

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for Visual Studio and Development Technologies. Likes .NET, Math,Data Science, Evolutionary Algorithms, Machine Learning, 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