C# 9.0 pod znakiem niemutowalności
Od jakichś kilku tygodni coraz częściej dostaję w twarz wpisami wspominającymi kolejną wersję języka C# oznaczoną numerem 9.0. Mimo, że nawet nie jest to jeszcze ostateczne wydanie, a dopiero przymiarki do niego.
Ale skoro już o nim mówią to poza zapoznaniem się z listą nowości postanowiłem też dzisiaj posłuchać odcinka podcastu Dotnet Rocks dotyczącego właśnie tej kwestii (odcinek znajdziesz o tutaj albo po prostu w aplikacji podcastowej na smartfonie). Mads Torgersen wspomina tam o tym, że C# czerpie kolejne elementy z programowania funkcyjnego. Chociażby niemutowalność obiektów czy pattern-matching.
Mi już kiedy zerknąłem na wpis z końca maja, dotyczący nowej wersji opublikowany przez Microsoft na ich blogu (znajdziesz go tutaj), rzuciło się w oczy, że od tej pory już na poziomie języka dostaniemy obsługę niemutowalności. I że w sumie nowa wersja skupia się mocno na zapewnieniu obsługi niemutowalnych obiektów i prostego ich kopiowania czy tworzenia nowych instancji ze zmienioną wartości. Bez konieczności zapewniania jej przez zabawy z prywatnym konstruktorem i metodami statycznymi (co to niemutowalność pisałem prawie 2 lata temu – tutaj).
Z niemutowalności (niezmienności) obiektów korzystamy na co dzień w pracy więc już mnie korci żeby przetestować te nowe możliwości. Z tego co widzę to po pierwsze zdecydowanie wymusza to zastanowienie się co gdzie przesyłamy, a po drugie unikamy problemów z magicznie zmieniającymi się wartościami. W każdym razie jeśli przesyłasz gdzieś dane to spróbuj to robić korzystając z obiektów, którym nie da się zmienić wartości po utworzeniu. Będzie to kolejne ciekawe doświadczenie.
Mam też nadzieję, że Entity Framework szybko zaimplementuje recordy, wokół których właśnie się to wszystko kręci. Chociaż jak się nad tym zastanawiam to na pewno nie jest rozwiązanie pasujące zawsze, więc raczej widziałbym to jako opcję albo może kolejną metodę. Coś jak metody z dopiskiem Async.
W rozmowie, o której wcześniej wspomniałem, padło też stwierdzenie, że kiedyś nowa funkcjonalność w języku musiała być za pierwszym razem przygotowana na 100%, a teraz raczej się ją wprowadza stopniowo. Z jednej strony ok, bo można reagować na rynek. Ale z drugiej strony boję się, że to będzie jeszcze bardziej wprowadzać bałagan w składni. Bo jeśli w jednej wersji wprowadzą pierwszą część jakiegoś konceptu i ludzie zaczną tego używać to potem, nawet jak wyjdzie, że można to zrobić inaczej, już nie bardzo będzie się dało to wycofać albo przebudować. I tak będą powstawać co jakiś czas protezy łatające błędy przeszłości.
Tak czy inaczej jestem ciekaw jak nowości z C# 9.0 sprawdzą się w praktyce. Bo tak jak wspomniałem są to rzeczy, które pasują do tego co robię na co dzień.
Leave a Comment