Co je nového v C# 6.0

Nová verze programovacího jazyka C# je tu s námi více než rok (její představení se pojí s uvedením otevřeného kompilátoru Roslyn) a stále se vyvíjí. Nyní je však již velmi blízko k dokončení, tak nastává vhodná doba projít si zásadní novinky a vylepšení, na něž se můžeme těšit. Nová verze se zaměřuje hlavně na optimalizaci každodenních programovacích drobností a čistší kód – dává vývojářům do ruky syntaktickou cukřenku, s kterou mohou významně zredukovat množství napsaných znaků.

C# 6.0 je součástí preview nového Visual Studia 2015 (aktuálně ve verzi RC), takže můžete novinky začít hned používat.

Getter-only Auto Properties

Automaticky implementované vlastnosti nás zbavují nutnosti definovat private členy pro jednoduché "get; set;" situace. V C# 6.0 mohou být vlastnosti i read-only:

getter-only-auto-properties-1

Auto Properties Initializers

A když už máme getter automatický, bylo by hezké moct property rovnou i inicializovat. V C# 6.0 to jde intuitivně přímo v deklaraci:

initializers-for-auto-properties-1

Null-conditional Operator

Zdrojáky jsou plné neustálého kontrolování, zda objekt, k němuž přistupujeme, není náhodou null. A když už není, tak ještě hlídáme patřičnou vlastnost, případně událost. C# 6.0 hromadu tohoto kódu odstraňuje pomocí operátoru ?. (přezdívaného Elvis operator – dvě oči a vlnka).

Z tohoto kódu:

null-conditional-operator-1

Se tak stane:

null-conditional-operator-2

Případně kontrola, zda někdo odebírá event, se zjednoduší takto:

null-conditional-operator-3

Static Members

Redukce pokračuje – většinou dokážeme odhadnout, že "Green" je "Color", "Monday" je "DayOfWeek" a "Format" patří do "String", takže by bylo fajn, kdybychom nemuseli statickým členům pořád dokola vypisovat jejich třídy. V C# 6.0 se jich můžeme zbavit pomocí "using static XXX":

static-members-1

String Interpolation

Pokud jste zatím zůstavali chladní, tahle novinka vás určitě donutí alespoň souhlasně zakývat hlavou. Říká se jí String Interpolation a značně zjednodušuje formátování stringů pomocí String. Format. Obrázek mluví za vše:

string-interpolation

Použijeme $, odebereme String.Format a nahradíme krypické parametry {0} a {1} jejich smysluplnými variantami {Jmeno} a {Prijmeni} (které nám Visual Studio dokonce napoví přes IntelliSense).

Expression-bodied Methods

U ToString ještě zůstaneme, protože je typickým představitelem kategorie jednořádkových metod, které rovnou vrací výsledek nějakého výrazu. C# 6.0 si půjčuje lambda syntaxi a dovoluje nám tyto metody zredukovat následovně:

expression-bodied-methods-1

Funguje to na metody a asi nepřekvapí, že stejný postup můžeme aplikovat i na vlastnosti:

expression-bodied-members-1

C# v tomto případě chytře pochopí, že nahrazujeme jednořádkový getter a schová implementaci do pozadí.

Nameof Operator

Občas se dostaneme do situace, kdy potřebujeme předat název daného členu jako string. Hardcoding je náchylný na chyby, nehledě na to, že se obtížně refaktoruje. Nově to za nás řeší operátor nameof:

 

nameof-operator-1

Conditional Exceptions

Visual Basic je už měl, C# je dostává teď – podmíněné výjimky, kdy můžete ještě před blokem catch specifikovat, jaké okolnosti musí být splněny, abyste výjimku odchytili. Pokud splněny nebudou, výjimka bublá výš.

conditional-exceptions-1

Await v catch a finally

Aplikace postupně čím dál víc "asynchronizují" a je žádoucí občas zavolat asynchronní metodu i v blocích catch a finally. V C# 6.0 to jde:

awaitable-catch-1

Index Initializers

Místo postupné inicializace prvků kolekce je možné zápis zjednodušit a iniciovat indexované objekty takto:

index-initializers-1

Martin