czwartek, 12 grudnia 2013

C# 6.0 - pierwsze pogłoski

Jaka jest przyszłość C#?  Dziś wpadł mi link http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated przekazany przez kolegę. Mimo, że na oficjalnych blogach nic nie znalazłem, o tyle natrafiłem na streszczenie jednej z rozmów z BUILD 2013:  http://wesnerm.blogs.com/net_undocumented/2013/07/anders-on-c-60-at-build-2013.html.  Jest to odpowiedź na wątpliwości na temat przyszłości C#, .NET i “Roslyn”. Jak wszystko dobrze pójdzie to .NET 5 będzie hulać na “Roslyn”, a C# nabierze nowych właściwości w oparciu o doświadczenia z TypeScript, a także takie języki jak F# czy Scala.

Ale wróćmy do pierwszego linka i rzućmy okiem na prezentowane propozycje składniowe.

1. Primary Constructors

Zapis   public Point(set int x, set int y) lepiej do mnie trafia. Przypomina mi konstrukcję z TypeScript. Czemu składnia nie może być tak prosta jak w tym języku?

2. Readonly auto properties

public int X { get; } = x;

Ta składnia średnio mi się podoba. Jakoś tak nadmiarowo…

3. Static type using statements

using System.Math; ... public double A { get { return Sqrt(Round(5.142)); } }

To jest super. Od zawsze publiczna statyczna metoda wydawała się tak naprawdę metodą poza klasą.

4. Property Expressions

public double Distance => Math.Sqrt((X * X) + (Y * Y));

To też mi się bardzo podoba. Jestem na tak.

5. Method Expressions

public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);

Jakby coś pośredniego między wyrażeniem lambda a metodą z ciałem. Kojarzy się z TypeScript. Jestem na tak.

6. Params for enumerables

Do(someEnum); public void Do(params IEnumerable<Point> points) { ... }

Podzielam obawy zapisane przy tym punkcie. Składnia natomiast jest jasna.

7. Monadic null checking

var bestValue = points?.FirstOrDefault()?.X ?? -1;

Nie trzeba będzie już robić dużo if-ów i pomocniczych zmiennych. Fajna sprawa.

8. Constructor type parameter inference

var x = new MyClass(1, "X");

Znowu uproszczenie dla klas generycznych. Jestem na tak.

9. Inline declarations for out params

int.TryParse("123", out int x);

Też świetna sprawa. Zawsze mi przeszkadzały dwie linijki.

Ciekawe, czy nowy C# trafi do Windows 8.2 (Threshold) ? Nowy Windows ma mieć wersję na smartfony i tablety (połączenie Windows Phone i Windows RT) oraz wersje dla użytkowników stacjonarnych, w której aplikacje Windows Store będą mogły wyświetlać się w normalnym oknie z poziomu pulpitu. Tak więc szykują się ciekawe zmiany zarówno w C#, .NET, jak i w Windows.

Brak komentarzy: