Ve dnech 2. – 4. dubna proběhla každoroční Microsoft konference Build 2014, která přinesla mnoho zajímavých novinek. Jednou z nich je také preview další verze jazyka C#, označována 6.0.
Zatím každá nová verze jazyka přinesla alespoň jeden nový rys, který změnil způsob, jakým vyjadřujeme naše úmysly pomocí kódu. Rychlá rekapitulace:
- C# 2 – generika
- C# 3 – LINQ
- C# 4 – dynamic
- C# 5 – async/await
- C# 6 – ???
Co to bude v následující verzi zatím není známo, nicméně už teď je k dispozici hrstka cukru! Mám samozřejmě na mysli syntaktický cukr, neboli
“Označení pro takovou část syntaxe programovacího jazyka, jejíž jediným účelem je usnadnit programátorovi zápis nějakých základních obratů. Nejedná se tedy o klíčovou součást jazyka; nemá vliv na to, jaké programy v něm lze napsat nebo jak budou rychlé, nemá vliv ani na architektonický návrh programu.”
jak napovídá wikipedie. Konec obcházení okolo, zde jsou novinky!
Initializers and auto-properties
Konec inicializace auto-properties v konstruktoru nebo pomocí někdy jinak zbytečných privátních členů.
public class Customer
{
public string First { get; set; } = "Jane";
public string Last { get; set; } = "Doe";
}
Primary constructors
Slouží většina Vašich tříd pouze jako úložiště hodnot? Nebo obsahuje konstruktor pouze inicializace proměnných jako v následující ukázce?
public class Customer
{
private string first;
private string last;
public string First { get { return first; } }
public string Last { get { return last; } }
public Customer(string first, string last)
{
this.first = first;
this.last = last;
}
}
Teď lze zapsat konstruktor přímo jakou součást definice třídy a s využitím první zmíněné novinky je inicializace členů velmi stručná.
public class Customer(string first, string last)
{
public string First { get; } = first;
public string Last { get; } = last;
}
Using static
Je Vám to povědomé? To proto, že VB.NET už to dávno umí. Tak teď i C#.
using System.Console;
using System.Math;
class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}
Mě osobně se tohle moc nelíbí. Dovedu si představit situace, kde to využiji, ale mnohem více mi vadí, že není na první pohled jasné, jestli volám metodu, která je součástí dané třídy, nebo je to statická metoda odjinud.
Declaration expressions
Co na to jen říct, než super! Líbí se mi vytvářet proměnné až v místě, kde je opravdu potřebuji.
if (int.TryParse(s, out int i)) { … }
GetCoordinates(out var x, out var y);
Console.WriteLine("Result: {0}", (int x = GetValue()) * x);
if ((string s = o as string) != null) { … s … }
Jako jedinou stinnou stránku bych viděl to, že vytváření out parametrů bude tak snadné, že se budou používat mnohem více. Ne na darmo jsou metody navržené primárně tak, aby vraceli pouze jedinou hodnotu a pokud jich zpět chceme náhodou více, tak už to stojí trochu úsilí. Stejně jako s používáním typu Tuple je vhodné zamyslet se nad tím, kdy je lepší vytvořit typ, které více návratových hodnot zapouzdří.
Exception filters
Hurá! VB.NET je má, F# je má a konečně i C# se dočkal.
try { … }
catch (MyException e) if (myfilter(e))
{
…
}
Indexed members and element initializers
var numbers = new Dictionary<int, string>
{
[7] = "seven",
[9] = "nine",
[13] = "thirteen"
};
var customer = new JsonData
{
$first = "Anders", // => ["first"] = "Anders"
$last = "Hejlsberg" // => ["last"] = "Hejlsberg"
};
string first = customer.$first; // => customer["first"]
Sourhn
Dále je možné používat await v catch a finally blocích, což je vhodné zejména pokud při zachycení výjimky chcete volat potencionálně déle běžící operace a nakonec, inicializátory kolekcí, které v podstatě volají na kolekci metodu Add nyní mohou volat i extension metodu pojmenovanou Add.
Všechny ukázky jsou součástí dokumentu Upcoming Features in CSharp, který lze stáhnout v rámci Roslyn End User Preview přes http://roslyn.codeplex.com/ Je pravděpodobné, že Vás napadne spousta otázek k použití nových konstruktů a většina jich je popsána právě v tomto dokumentu.
Věřím, že si v těchto novinkách najdete něco, co byste rádi používali už teď a zároveň něco, s čím vůbec nesouhlasíte. Všechny tyto názory jsou teď pro C# design team důležitější víc než kdy jindy, protože poprvé máme my vývojáři šanci ovlivnit, co nakonec v jazyku nakonec bude a jakou to bude mít podobu. Proto si “REUP” nainstalujte, vyzkoušejte nové vlastnosti jazyka a řekněte Microsoftu, co si o tom myslíte (po stažení REUP se Vám v účtu na webu Microsoftu objeví tlačítka pro reportování bugů a odesílání feedbacků). Pokud se Vám žádná z nových vlastností nelíbí, nezoufejte. Spousta věcí ještě není naimplementovaných a současné mohou být upraveny na základě feedbacku komunity. Na výše uvedeném webu také můžete v sekci Documentation>CSharp Language Design Notes sledovat vývoj nových vlastností, jak budou přibývat a lze se i podívat, jakým vývojem prošli ty již implementované.