Читать книгу Programowanie funkcyjne w języku C#. Jak pisać lepszy kod - Enrico Buonanno - Страница 17
1.2 W jakim stopniu język C# jest funkcyjny?
ОглавлениеFunkcje są w języku C# istotnie elementami pierwszoklasowymi, co widać na poprzednich listingach. C# obsługuje je od swoich najwcześniejszych wersji za pomocą typu Delegate. Późniejsze wprowadzenie wyrażeń lambda bardzo poprawiło składnię – w kolejnym punkcie omawiamy te własności języka.
Jest tu nieco dziwactw i ograniczeń jak przy wnioskowaniu typów. Omawiamy to w rozdziale 8. Ale generalnie obsługa funkcji jako wartości pierwszoklasowych jest dość dobra.
Jeśli chodzi o obsługę modelu programowania, który unika aktualizacji w miejscu, podstawowym wymaganiem w tym obszarze jest posiadanie przez język modułu odśmiecania pamięci. Ponieważ tworzymy zmodyfikowane wersje, zamiast aktualizacji istniejących wartości w miejscu, chcemy, aby stare były w miarę potrzeby usuwane z pamięci. I to wymaganie język C# spełnia.
W idealnym przypadku język powinien także zniechęcać do aktualizacji w miejscu. Jest to istotny mankament C#: wszystko domyślnie jest mutowalne i programista musi włożyć sporo wysiłku, aby uzyskać niemutowalność. Aby zapobiec zmianom, pola i zmienne muszą być jawnie oznaczone jako readonly. (Porównajmy to z F#, gdzie zmienne są domyślnie niemutowalne i muszą zostać jawnie oznaczone jako mutable, aby dopuścić zmiany).
A co z typami? Na tej platformie istnieje kilka niemutowalnych typów, jak string i DateTime, ale obsługa niemutowalnych typów definiowanych przez użytkownika jest w języku C# słabo obsługiwana (choć, jak zobaczymy, w wersji C# 6 nastąpiła poprawa i ma się to polepszyć w kolejnych wersjach). Wreszcie kolekcje są mutowalne, ale dostępna jest potężna biblioteka kolekcji niemutowalnych.
Podsumowując, C# bardzo dobrze wspiera niektóre podstawowe techniki funkcyjne, lecz nie wszystkie. W swej ewolucji poprawił i będzie dalej poprawiać obsługę technik funkcyjnych. W tej książce dowiadujemy się, które własności można wykorzystać i jak obejść występujące braki.
Teraz opiszemy niektóre własności języka w poprzednich, obecnych i przyszłych wersjach C#, które odnoszą się do FP.