C# u novom ruhu

Microsoft je najavio skori izlazak nove verzije paketa Visual Studija 2015, koji je trenutno u fazi pred objavljivanje (CTP6 – Community Preview 6). S novim okruženjem stižu i razna poboljšanja C# prevodioca i prilagođene izmene samog jezika, koji ponosno nosi naziv C# 6.0.

Tesla (5)

Prva verzija C# kompajlera izašla je davne 2002. godine i napravila revoluciju u programerskim krugovima. Nekima se novi jezik nije svideo zato što je previše podsećao na Javu, a za neke je predstavljao pravo osveženje. Sledile su nove verzije sa izlaskom svakog novog paketa Visual Studio (2003, 2005, 2008, 2010, 2012. i 2013), a evolucija i nove mogućnosti samog jezika pratile su izlaske novih verzija popularnog programerskog okruženja. Sa verzijom 2015. dolazi nekolicina izmena i poboljšanja sintakse samog jezika.

Osnovni noviteti

U ranijim verzijama C# nije bilo moguće uvoziti statičke klase poput načina na koji se uvoze prostori imena (namespaces) ‑ trebalo je navesti puno ime klase pa tek onda pozvati statički metod, kao u listingu 1. U novoj verziji C# možemo uvesti statičku klasu i izostaviti ime klase pre poziva metode, kao u listingu 2.

Inicijalizacija svojstava klase ranije je bila moguća samo putem poziva konstruktora (listing 3). U novoj verziji C# moguće je dodeliti vrednost svojstvu u jednoj liniji, recimo:

public class Test {

public string Svojstvo

{ get; set; } = “Pera”; }

U prethodnim verzijama jezika struktura podataka mogla se inicijalizovati pozivom konstruktora i zadavanjem vrednosti na sledeći način:

Pročitajte i:  Iz prakse: Kasetofon za novo vreme

Dictionary<int, string> imena = new Dictionary

<int, string>() {

{1, “Mira” },

{2, “Pera” } };

Nov način inicijalizacije uvodi malu, ali razumljiviju promenu, pošto se ključevi u rečniku vode slično indeksima u nizovima, što oni zaista i jesu. Dictionary je struktura podataka koja čuva ključ koji se koristi da bi se došlo do vrednosti. Ključ može biti i string. Pogledajmo nov način pisanja ove vrste inicijalizacija u C# 6.0:

Dictionary<int, string> imena = new Dictionary

<int, string>() {

[1] = “Mira”,

[2] = “Pera” };

Imena svojstava

Često je potrebno, osim vrednosti koje svojstvo čuva, pristupiti nazivu samog svojstva. Na primer, ako se svojstvo klase Osoba zove Ime, a njegova vrednost je Vlada, vrednost svojstva možemo lako dobiti navođenjem imena svojstva. Ali, ako nam je potreban sam naziv svojstva – u našem slučaju Ime – nije ga tako lako dobiti. C# 6.0 uvodi novu ključnu reč nameof koja upravo daje ime svojstva, tako da mu možemo lako pristupiti:

Console.WriteLine

(“Ime svojstva je {0}”,

nameof(Osoba.Ime));

 

Još jedna zanimljiva novina jeste to da se izuzetci sada mogu obrađivati kada je neki uslov zadovoljen. Na primer, naš program obradiće izuzetak ako je vrednost promenljive 0. Uslovi mogu biti različiti, kao u listingu 4. Provera da li je neka vrednost null vrlo je česta operacija, a uobičajena praksa dosad je bila:

Pročitajte i:  Komentar: Programeri i njihova budućnost

If (osoba == null) {

Console.WriteLine

(osoba.Ime);

}

 

Sada je pomoću operatora ? moguće skratiti ovu proveru: Console.WriteLine(osoba?.Ime). Pitate se šta ako je osoba null? Odgovor je – ništa se neće izvršiti, baš kao i prilikom stare provere na vrednost null.

Pisanje tela metoda

Pre C# 6.0 metod ste pisali pomoću standardne sintakse:

public int Funkcija() {

return 7*7;

}

Sada koristeći lambda izraze telo funkcije možemo pisati na sledeći način: public int Funkcija() => 7×7; Primetite da se prilikom novog načina pisanja funkcije ne koristi ključna reč return, koja je inače obavezna kada se vrednost vraća iz funkcije.

U novoj verziji C# jezika moguće je formatirati string upotrebom kose crte, koja je bila obično rezervisana za specijalne karaktere (escape sequences), poput tabulatora \t. Sada se svi stringovi mogu formatirati pomoću slične sintakse kao u sledećem primeru:

string ime = “Vlada”;

string zanimanje =

“Programer”;

string spojeno =

“\{ime} , \{zanimanje}”;

Mala izmena koju uvodi C# 6.0 jeste struktura s konstruktorom bez parametara. Do sada strukture su mogle da sadrže samo konstruktore s parametrima koji dalje inicijalizuju strukturu. Sada je moguće inicijalizovati strukturu i bez korišćenja parametara sve dok je ispunjen uslov da su svi članovi strukture inicijalizovani na neku početnu vrednost:

Pročitajte i:  Iz prakse: Kasetofon za novo vreme

struct Osoba {

string ime;

string prezime;

public Osoba() {

ime = string.Empty;

prezime =

string.Empty; } }

I na kraju

Visual Studio 2015. najavljuje značajne funkcionalne kao i kozmetičke promene. CTP6 donosi nam uvid u mnoge novine vezane za sam programski jezik C#: poboljšan kompajler koji je sada dostupan svima preko licence otvorenog koda (open source), automatsko generisanje koda izuzetaka, optimizaciju asinhronih metoda, kao i još par kozmetičkih izmena koje povećavaju produktivnost programera i navode ga da piše razumljiviji i kompaktniji kod. Microsoft još uvek nije objavio zvaničan datum izlaska novog pakata Visual Studio, a dok čekamo, CTP6 verzija može poslužiti kao dobar trening.

Listing 1: Poziv statičke metode navođenjem imena klase

using System;

public class Primer {

public static void Main(string[] args) {

Console.WriteLine
(“Ime klase, pa poziv metoda”); }

}

Listing 2:
Poziv statičke metode bez navođenja imena klase

using System;

using System.Console;

public class Primer {

public static

void Main(string[]

args) {

WriteLine

(“Poziv bez
navođenja klase”);}}

Listing 3:
Stari način inicijalizacije svojstava

public class Test {

public string Svojstvo { get; set; }

// Inicijalizacija svojstva u konstruktoru

public Test() {

Svojstvo = “Pera”; }

}

Listing 4:

try {

int i = 5;

int j = 0;

} catch (Exception ex) if ( j == 0)

{

// Obrada izuzetka

}

Mirko Aćimović

(Objavljeno u Časopisu PC#222)

Facebook komentari:
SBB

Tagovi: , , ,