Co nas czeka w .NET Core 3.0?
Do produkcyjnego wydania .NET Core 3.0 coraz bliżej (planowo będzie to maj 2019). Ponieważ dopiero co wydana została wersja .NET Core 3.0 Preview 2 to warto przyjrzeć się na co czekamy.
Aplikacje desktopowe w .NET Core
Od wersji 3.0 dostępne będą biblioteki pozwalające pisać aplikacje z wykorzystaniem WPF i WinForms. Jest to na pewno duży krok ponieważ dzięki temu mogą one korzystać np. z logiki napisanej już w projekcie tworzonym w .NET Core. Dodatkowo takie aplikacji będą dużo lżejsze i będzie można je budować tak aby były niezależne od frameworka zainstalowanego w systemie.
Jednak od razu studzę entuzjazm części osób – te biblioteki będą działały tylko pod systemem Windows. Więc nadal nie będzie jednego narzędzia do przygotowania programów okienkowych na wszystkie trzy systemy z wykorzystaniem środowiska .NET. Celem tego przedsięwzięcia było tylko zapewnienie możliwości wspomnianych w poprzednim akapicie.
C# 8.0
Wraz z wersją 3.0 frameworka .NET Core przychodzi do nas kolejna wersja języka C# oznaczona numerem 8.0. O wszystkich nowościach przeczytacie nas stronie https://blogs.msdn.microsoft.com/dotnet/2018/11/12/building-c-8-0/. Tutaj pokażę tylko część zmian:
Nullowalne typy referencyjne
Do tej pory było tak, że jeżeli mieliśmy typ referencyjny to zawsze mogła się w nim znaleźć wartość null (a więc brak wartości). Przez to musieliśmy zawsze sprawdzać czy jakaś zmienna referencyjna została wypełniona danymi. Inaczej sprawa się miała w przypadku typów wartościowych (value types) takich jak int, double, bool. W ich przypadku musieliśmy jawnie oznaczyć, że pozwalamy na przypisanie do zmiennej tego typu wartość null.
Także od teraz będzie to wyglądało mniej więcej tak:
string x = null; // Warning string? z = null; // OK
Jeżeli użyjemy nullowalnego typu referencyjnego to przed jego użyciem będziemy musieli sprawdzić czy nie jest nullem. Inaczej kompilator uraczy nas ostrzeżeniem.
Na razie będą się jedynie pojawiać ostrzeżenia. Jednak nie zdziwiłbym się jakby w kolejnych wersjach uznali, że kompilacja powinna zwrócić błąd dla takiego przypadku.
Typ Index i Range
Wraz z C# 8.0 będzie można korzystać z nowego typu – Index. Będzie on użyteczny w przypadku wybierania elementów np. z tablicy. W tym momencie możemy to robić za pomocą liczb:
tablica[2];
O ile do podawania konkretnego indeksu typ Index niewiele wnosi to posiada inną ciekawą funkcję – możliwość podawania indeksu od końca. Robimy to poprzez znak ^:
Index a1 = 2; //2 element tablicy Index a2 = ^4; // 4 element OD KOŃCA tablicy int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9}; Console.WriteLine($"{a[a1]}, {a[a2]}"); // "3, 6"
Typ Range łączy dwie wartości typu Index i pozwala wybrać zakres elementów listy poprzez podaje indeksów od-do. Dla powyższej tablicy będzie to wyglądać w ten sposób:
var slice = a[a1...a2]; // [2, 3, 4, 5, 6]
Domyślne implementacje metod w interfejsach
W nowej wersji języka C# interfejsy zbliżą się trochę do klas abstrakcyjnych ponieważ możliwe będzie napisanie domyślnej implementacji metody w samym interfejsie. Wtedy implementując ten interfejs nie musimy implementować wszystkich jego metod jeżeli nie mamy potrzeby zmieniania domyślnego zachowania.
Posłużę się tutaj kodem ze strony Microsoftu:
interface ILogger { void Log(LogLevel level, string message); void Log(Exception ex) => Log(LogLevel.Error, ex.ToString()); // New overload } class ConsoleLogger : ILogger { public void Log(LogLevel level, string message) { ... } // Log(Exception) gets default implementation }
Pozwala to np. modyfikować interfejs w dużym systemie bez konieczności refaktorowania wszystkich klas implementujących ten interfejs. Możemy teraz dodać nową metodę i napisać jej domyślną implementację. Tak, że dotychczasowe fragmenty systemu będą działały tak jak dotychczas.
Pattern matching mocno
Wersja 8.0 języka C# to także dużo zmian i nowości we wprowadzonym w wersji 7.0 pattern matchingu. Nie będę ich tutaj opisywał. Szczegółowe opisy można znaleźć TUTAJ.
Wbudowana szybka biblioteka dla formatu JSON
Wraz z .NET Core 3.0 dostaniemy bardzo szybką (jak deklaruje Mircosoft) bibliotekę do odczytu i zapisu plików JSON. Ma być ona o kilkadziesiąt procent wydajniejsza niż dotychczasowe powszechnie używane implementacje.
Będziemy mogli skorzystać zarówno z najszybszej formy odczytu i zapisu czyli z dostępu sekwencyjnego (czytamy/zapisujemy od początku do końca, wartość po wartości) jak i z typu, który jest ponad tą formą czyli z JsonDocument. Dzięki temu mamy też możliwość dowolnego przeszukiwania plików typu JSON.
Wsparcie dla architektury ARM64
Od teraz będzie można tworzyć pod Linuxem aplikacje dla procesorów z architekturą ARM64 korzystając z frameworka .NET Core 3.0.
Wsparcie dla GPIO
Miłośnicy urządzeń IoT na pewno się ucieszą, że .NET Core dostaje w systemie Linux wsparcie do obsługi portów wejścia/wyjścia dostępnych chociażby w popularnym komputerku RaspberryPI. Do tej pory było to ograniczone jedynie do Windowsa. Tak wiec chcąc pisać w C# i korzystać ze złączy w RaspberryPi byliśmy ograniczeni jedynie do Windowsa 10 IoT, który wspierał tą architekturę. Od teraz popularny Raspbian również będzie mógł być wykorzystany jako baza dla naszych dotnetowych sprzętów.
Czekamy
To co powyżej opisałem to tylko część wszystkich nowości. Większość z nich znajdziecie np. TUTAJ i TUTAJ.
.NET Core 3.0 zadebiutuje prawdopodobnie wraz z kolejną wersją Visual Studio czyli Visual Studio 2019. Mam nadzieję, że wszystko uda się dostarczyć na czas bo lista zmian jest ciekawa.
A Wy czekacie na kolejne odsłony .NET Core’a?
Leave a Comment