Nasza strona używa cookies. Korzystając ze strony, wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki. Rozumiem

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 w wersji preview już dostępny

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.

Nie przegap treści Bulldogjob
Subskrybuj artykuły

Lubisz dzielić się wiedzą i chcesz zostać autorem?

Podziel się wiedzą z 160 tysiącami naszych czytelników

Dowiedz się więcej