C# 9.0 w wersji preview już dostępny
Wersja preview C# 9.0 została właśnie wydana. Najnowsza odsłona wydania C# 9.0 daje dostęp do kilku przydatnych nowości składniowych.

C# 9.0 jest już bliżej i coraz bardziej nabiera kształtu. Użytkownicy mogą się aktualnie cieszyć jego wydaniem preview. Twórcy obiecują, że z każdym nowym wydaniem będą zwiększać czytelność oraz prostotę tego języka. Tak więc, począwszy 1998 roku i pierwszych jego wersji, C# nieustannie się rozwijał, a użytkownicy dostawali od Microsoftu przeróżne nowości.
C# 9.0 nie jest wyjątkiem i również posiada szereg świeżych ficzerów usprawniających działanie tego języka. Sprawdźmy, co developerzy z Microsoftu mają do zaproponowania tym razem. Do dzieła!
Niemutowalne właściwości w obiektach
W C# mamy inicjalizatory obiektów, które bardzo zmniejszyły ilość kodu wymaganego do obsługi właściwości, szczególnie w obiektach typu POCO. Jest to możliwe, dzięki automatycznie implementowanym właściwościom:
public class Cat
{
public int Age { get; set; }
}
Do tej pory można było w ten sposób tworzyć tylko mutowalne właściwości, ale w C# 9.0 pojawiło się nowe słowo kluczowe, które pozwala na modyfikację wartości tylko w czasie inicjalizacji obiektu. W tym celu dla danej właściwości użyjemy init zamiast set, co pozwoli na modyfikację właściwości tylko w czasie inicjalizacji.
public class Cat
{
public int Age { get; init; }
}
Rekordy
Idąc za ciosem, w C# zrewidowano pojęcie rekordów, czyli obiektów, które składają się w całości z niemutowalnych właściwości. Rekordy deklaruje się przy pomocy słowa kluczowego data
:
public data class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
Rekordy mają reprezentować dane, czyli wartości, które opakowują. By odgrywały właśnie taką rolę, mają kilka ciekawych właściwości. Równość rekordów wyznaczana jest na podstawie wartości, które zawierają, a nie na podstawie ich tożsamości. Kod pierwotnej definicji można jeszcze skrócić, bo domyślnie każda właściwość w rekordzie jest definiowana jako publiczna, z get
oraz init
.
public data class Person { string FirstName; string LastName; }
Rekordy mają wbudowane wyrażenie with
, które pozwala na łatwe kopiowanie wartości z jednego rekordu do nowego przy jednoczesnej modyfikacji właściwości określonych przez użytkownika.
var otherPerson = person with { LastName = "Hanselman" };
Taka składania utworzy nową osobę otherPerson, o nazwisku Hanselman i skopiuje wszystkie pozostałe właściwości z person.
Krótkie programy
Najkrótszy program w C# wyglądał do tej pory mniej więcej tak jak w Javie:
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}
W C# 9.0 można napisać ten sam program jako:
using System;
Console.WriteLine("Hello World!");
To nowy sposób zadeklarowania funkcji Main()
na najwyższym poziomie, bez zagnieżdżania się i z mniejszą ilością kodu.
Typowanie na podstawie typu docelowego
W C# 9.0 można skrócić zapis wyrażenia new, o ile przypiszemy wartość wyrażenia, do zmiennej o ustalonym typie.
Point p = new (3, 5);
Ciekawe czy taki zapis spodoba się purystom ;)
Dodatkowo kompilator przestanie narzekać w przypadku wyrażeń ??
i ?
:, jeżeli uda mu się ustalić wspólny typ dla obydwu argumentów, pomimo braku oczywistej klasy bazowej między nimi.
Person person = student ?? customer; // Shared base type
int? result = b ? 0 : null; // nullable value type
Ulepszone dopasowanie do wzorca
W C# 8.0 wprowadzono składnię dopasowania do wzorca, która jest bardzo podobna do wyrażeń lambda. C# 9.0 dostarcza kolejnych ulepszeń, które pozwalają pisać jeszcze bardziej idiomatyczny kod.
W przypadku, kiedy chcemy sprawdzić tylko typ, możemy pominąć definiowanie identyfikatora dla niego, więc zamiast:
fruit switch {
Apple _ => "This is an apple",
...
};
Można napisać:
fruit switch {
Apple => "This is an apple",
...
};
Wprowadzone zostały też operatory relacyjne (<
, <=
, itd.) oraz logiczne (and
, not
). Dzięki nim kod stanie się jeszcze bardziej zwięzły:
DeliveryTruck t when t.GrossWeightClass switch
{
< 3000 => 10.00m - 2.00m,
>= 3000 and <= 5000 => 10.00m,
> 5000 => 10.00m + 5.00m,
}
Podsumowanie
Oto najważniejsze ficzery nadchodzącego wydania C# 9.0. Rzeczy jest jeszcze trochę więcej, a ich pełna lista znajduje się tutaj oraz tutaj. Na stabilne wydanie trzeba będzie pewnie jeszcze trochę poczekać, ale już teraz można poczuć przedsmak nowości, które proponuje Microsoft.