Novinky v C# 6.0 -shrnutí přednášky Michala Valáška

V tomto krátkém článku, respektive spíše shrnutí přednášky Michala Altaira Valáška z 20. ledna 2016, chci představit několik novinek v C# verze 6.0. Záznam celé přednášky můžete shlédnout na Youtube kanálu altairiscz, kde najdete i další zajímavé přednášky.

Předmětem přednášky bylo představení novinek v C# 6.0, které tu už ale nějakou chvíli máme.

V úvodu Altair doporučil doplněk Refactoring Essentials – doplněk do Visual Studia 2015, který pro refaktorování kódu využívá platformu Roslyn.

Automatic Properties

Asi nejužitečnější novinka se týká automatických vlastností (Automatic Properties), kterým nyní můžeme přiřadit defaultní hodnotu, nebo je definovat jen pro čtení (readonly).

public String Name { set; get; } = "Výchozí jméno";

Pokud úplně vynecháme set, bude vlastnost brána jako readonly. Do této doby šlo pouze definovat set jako private, ale hodnota property šla stále měnit zevnitř třídy. Dále lze používat Lambda výrazy pro readonly vlastnosti. Nejlépe to lze ukázat na příkladu (vypůjčený z přednášky):

public decimal TotalPrice => this.PricePerUnit * this.UnitCount;

Zápis s lambda výrazy lze použít také pro metody i s parametry.

using static

Konstrukce using static umožní importovat statické členy konkrétní třídy (na místo importu namespacu u běžného using). Vhodné například pokud chcete naimportovat jen některé třídy s Extension metodami z jednoho namespace. Nebo pro časté používání statických funkcí některé třídy, například Math. Using static lze také použít na výčtové typy, což umožní přístup k hodnotám výčtu bez kvalifikátoru typu.

Nové operátory pro práci s null

Pro práci s null hodnotami přibyly nové operátory.
Pokud objekt je null, vrátí null, jinak jeho člena:

Pro volání člena: objekt?.member

Pokud je kolekce null, vrátí null jinak jeho prvek:

Indexer: objekt?[index]

Inicializace kolekcí a slovníků

Nyní lze inicializovat obsah Collection a Dictionary podobně jako pole:

var ovoce = new Dictionary<string, string>{
      ["apple"] = "jablko",
      ["banana"] = "banán",
};

String interpolation

Tato funkce umožňuje do stringu přímo vkládat výrazy, které se vyhodnotí. Řetězec se uvozuje znakem dolaru ($) a výraz se uvozuje složenými závorkami. Zápis je podobný funkci String.Format a lze tam využít formátovací řetězce za dvojtečkou nebo za čárkou uvést znaky pro zarovnání. Za všechny uvedu výstižný příklad z přednášky:

$"právě je {DateTime.Now:hh:mm} hodin.";

Tento zápis má však nevýhodu, jelikož řetězec se vyhodnotí v době vytvoření řetězce, takže pro předpřipravené řetězce musíme nadále použít String.Format.

Zápis lze kombinovat také se zavináčem (@), ale vždy jen v pořadí, kdy je dolar na prvním a zavináč na druhém místě. Pokud je před řetězcem uveden zavináč, je ignorován escapovací znak zpětného lomítka.

Operátor nameof

Nameof operátor přijímá jako argument identifikátor a název jeho poslední části (vše za poslední tečkou) vrací jako string. Užitečný je obzvlášť jako ochrana před opomenutím úpravy stringů při refactoringu. Typické použití je při vyhazování ArgumentNullException, viz:

void Process(object data) {
    if (data == null) throw new ArgumentNullException(nameof(data));
}

Exception filters

Poslední novinka se týká Výjimek – Exception Filters. Bloku catch můžete klíčovám slovem when(..) přidat podmínku za jaké se výjimka zachytí, jinak je vyhozena dál. Podmínka, která byla dříve až uvnitř bloku, je už na úrovni catch bloku. V záznamu  Altair také zmiňuje zajímavé použití Caller attributes.

Jak sami vidíte, novinek není zas až tak mnoho. Nicméně mohou ušetřit čas, nebo zpřehlednit Váš kód a jistě si najdou místo pro své využití využití.

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Google photo

Komentujete pomocí vašeho Google účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s