Odavno je jasno da programski jezici moraju da se menjaju i prilagođavaju njihovoj upotrebi ali više nego često promene su bile male, kozmetičke i nisu donosile one male, neophodne, sitne promene koje olakšavaju svakodnevan rad.

Sa druge strane su programeri, njihovi navike, principi programiranja ili bar pokušaji pisanja dovoljno razumljivog programskog koda koji će neko (pre svega oni sami) morati da pročita u nekom budućem trenutku.

I kao uvek u sukobu dve suprotnosti uvek pobedi ona inertnija, ljudska, bar je tako bilo u mom slučaju sve do verzije C# 6.0.

Uvek me je mrzelo da razmišljam o novoj sintaksi i copy-paste je bilo rešenje za sve ali je verzija 6.0 značajno promenila tu moju paradigmu.

Kako se to dogodilo prikazaću vam kroz sledeće primere

Auto-Property Initializers

Ne mogu ni sam da se setim koliko puta sam dobio grešku da nisam inicijalizirao pod-objekat u nekoj objektnoj hijerarhiji.

A tek dovijanja da se kroz konstruktore inicijaliziraju pod-objekti, pa gomila koda koja ne radi ništa drugo već se samo bavi internim promenjivima, get i set metodama…

Sve je to novi C# 6.0 potpuno promenio, jer ako vam treba inicijalizacija pod-objekata sve što treba da uradite je:

    public class BusinessTrip : Document

    {

        public string TypeCode { get; set; }

        public int Number { get; set; }

        public int IDEmployee { get; set; }

        public int IDManager { get; set; }

        public int IDProposedBy { get; set; }

        public string EmployeePosition { get; set; }

        public string Description { get; set; }

        public BusinessTripDestinations Destinations { get; set; }

        public BusinessTripAdvancePayments AdvancePayments { get; set; }

        public BusinessTripExpenses GenericExpenses { get; set; } = new BusinessTripExpenses();

    }

Pored pojednostavljenja koda, značajno se menja i logika kako se onda ovi objekti upotrebljavaju. Sada imate mogućnost da ako upotrebljavate auto-property inicijalizatore još i da postignete obaveznost pojavljivanja objekata u objektnoj hijerarhiji na deklarativnom nivo-u a tamo gde oni nisu potrebni uvek ih možete naknadno instancirati.

Null-Conditional Operator

U skladu sa prethodnom novosti (ako već niste instacirali objekat na vreme) u C# 6.0 su i uslovni null operatori. Pređimo odmah na primer, umesto

if (item.Assignments!=null) { if (item.Assignments.Count > 0)

dovoljno je napisati:

if (item.Assignments?.Count > 0)

Ovim se okončava decenijsko maltretiranje programera koji moraju da objašnjavaju komapjleru više nego evidentnu stvar a to je da ne rade nešto ako promenjiva nema vrednost, tačnije ako je njena vrednost NULL

Naravno sledeći pokušaj:

int i = item.Assignments?.Count;

neće raditi i dalje, jer nije ni normalno da radi u slu;aju kada Assignemnets ne postoje ali zato je tu i dalje stari pouzdani:

int? i = item.Assignments?.Count;

Await u catch bloku

Na kraju da dodam još da je sada u catch bloku moguće koristiti await što ranije nije bilo moguće.

Zaključak

Ostaje par novih, neko će možda reći i značajnih mogućnosti, koje ovde nisu prikazane ali to je samo zato što ih ja redovno ne koristim i moram priznati da sam već i zaboravio na njih. Stigle su godine a i C# 7.0 je na vratima, pa stoga ja javno obećavam da ću post dopunjavati svakim novim trikom koji ovaj stari pas nauči

p

U ovom članku

  • Programeri i programski jezici
  • C# 6.0 i promena paradigme
  • Primeri
  • Ima toga još…