понедељак, 07. децембар 2015.

Enumeracije u C# programskom jeziku



Enumerations – enumeracije ili kako ih još zovu nabrajanje služi da vam pruži funkcionalnost garantovanih fiksnih vrednosti i kada se koriste kao indikatori. Enumeracije su jednostavno definisani celobrojni tipovi konstanti. Smatraju se vrednosnim tipovima jer sadrže vlastite vrednosti, koji se ipak ne mogu nasleđivati. Enumeracije olakšavaju održavanje vašeg koda tako što garantuju da su promenjive dobile definisane legitimne vrednosti. Upotrebom enumeracija dobija se jasniji kod jer vrednostima celobrojnih tipova možete da ih referencirate korišćenjem opisnih imena umesto celobrojnih brojeva. Zahvaljujući Intellisense-u u Visual Studio-u; enumeracijama se dobija i kod lakši za kucanje. Kodiranje uvek sa jedne strane treba da se kraće kodira ali da ne postane previše nečitko, dok sa druge strane postoji i potreba da da kod bude što čitljiviji jer na velikim projektima vi će te posle nekog vremena preći na drugi projekat dok će vaš kod ostati nekom drugom za održavanje.

 

( Šaljivi prikaz enumeracije crtežom )


Kako i u kom obliku praviti kompromis po tom pitanju ostaje prvo na kompaniji i njenim pravilima, zatim timu programera koji se uvek trude da imaju slično kodiranje koje ne odstupa previše od programera u timu; pa tek onda možete pratiti svoje navike i stil u kodiranju. Razlog tome su što C# programski jezik omogućava više mogućnosti kako jednu te istu funkcionalnost možete isprogramirati. Čak i kad počnete da učite programiranje, najviše vas usporava dilema kako je najbolje nešto isprogramirati. I pored toga što enumeracije čine pre svega čitljivost; treba ih uvek koristiti kad imate potrebu za bilo kakvim nabrajanjem. Nemojte mešati enumeracije sa enumeratorom, koji služi za enumerisanje kolekcija upotrebom interfejsa System.Collections.IEnumerable. Sintaksa za enumeraciju je:

enum ime_enumeracije
{
          lista_nabrajanja

};


Lista nabrajanja se u vitičastim zagradama { } odvaja zarezom i ukoliko ne dodelite nikakvu vrednost podrazumeva se da elementi u enumeraciji imaju početnu vrednost 0 i da je posle svaki uvećan za 1.

Kako se koristi enumeracija u kodu?



Pretpostavite da u vašem projektu često treba da koristite nazive meseci. Vi za njih treba da deklarišete čak 12 promenjivih i ne samo to; već i kako da prelazite sva nabrajanja kroz petlju umesto da za svaki mesec pišete posebno izlaz vrednosti na konzolu. U takvim slučajevima enumeracije su pravo rešenje koje vam itekako olakšava kodiranje i čitljivost vašeg koda. Pogledajte kako na jednostavan način možete da ispišete na konzoli mesece na engleskom, srpskom i hrvatskom jeziku.

using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// enumeration default values start from 0 ... make them to start from 1

enum MonthsEnglish { January = 1, February, March, April, May, June,
                     July, August, September, October, November, December }

enum MonthSerbian { Januar = 1, Februar, Mart, April, Maj, Jun,
                    Jul, Avgust, Septembar, Oktobar, Novembar, Decembar }

enum MonthsCroation { Sijecanj = 1, Veljaca, Ozujak, Travanj, Svibanj, Lipanj,
                      Srpanj, Kolovoz, Rujan, Listopad, Studeni, Prosinac }

namespace Enumerations
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("{0}\tENGLISH\tSERBIAN\tCROATIAN{0}", Environment.NewLine);

            MonthsEnglish engMonths = MonthsEnglish.January;
            MonthSerbian srpMonths = MonthSerbian.Januar;
            MonthsCroation hrvMonths = MonthsCroation.Sijecanj;

            for (int i = 0; i < 12; i++)
            {
                WriteLine($"{(byte)(i + 1)}\t{engMonths}, {srpMonths}, {hrvMonths}");

                if (i < 11)
                {
                    engMonths++;
                    srpMonths++;
                    hrvMonths++;
                }
            }

            ReadKey();

        }
    }
}

U navedenom kodu dodavanjem prvom elementu u enumeracijama broj 1, defaultna vrednost svih elemenata je pomerena za 1, tako da listu enumeracije meseci imamo predstavljenu od 1 do 12. U ovom primeru nije bilo potrebe za tim, to je urađeno čisto demonstrativno; ali imajte u vidu da je praksa da se meseci uvek tretiraju brojevima od 1 do 12, kao i dani u nedelji od 1 do 7. C# programski jezik dozvoljava da imate iste defaultne vrednosti u listi nabrajanja iako to baš ne izgleda logično, ali je moguće. Ali ono što nije moguće, ne možete imati u listi enumeracije iste nazive. Npr. ne možete imati dva januara u listi enumeracije. Takođe u navedenom kodu programa obratite pažnju da umesto literala \n koristimo definisani string koji predstavlja novu liniju.

Environment.NewLine

Kao što se sve češće u kodu radi čitljivosti koristi prazan string:

string x = String.Empty;

umesto

string x = "";

tako je čitljivije koristiti i

Environment.NewLine

Kad vi ukucate literal \n u Windows operativnom sistemu on se kompajlira kao \r\n gde \r predstavlja i literal koji postavlja kursor na početak reda, što nije slučaj sa kompiliranjem u Unix sistemima. Zatim on menja i line feed, line break, carriage return, CRLF i kraj linije. Kad pokrenete navedeni program, rezultat će biti očigledan:

         ENGLISH SERBIAN CROATIAN

1        January, Januar, Sijecanj
2        February, Februar, Veljaca
3        March, Mart, Ozujak
4        April, April, Travanj
5        May, Maj, Svibanj
6        June, Jun, Lipanj
7        July, Jul, Srpanj
8        August, Avgust, Kolovoz
9        September, Septembar, Rujan
10      October, Oktobar, Listopad
11      November, Novembar, Studeni
12      December, Decembar, Prosinac


Kako to sve izgleda možete videti i na video-u:





( C# 6.0 Tutorial - Fundamentals - 21. Enumerations )