No cóż nic dodać nic ująć. Tyle nowych wersji języka, że niedługo powstanie z tego certyfikat. C# mocno przyspieszył z wydawanie nowych wersji. Kolejna główna wersja C# 8.0 jest już gotowana i start jest planowany na 2019 rok. A teraz zapraszam na omówienie nowości w wersji C# 7.2
Spis treści
- Nowe narzędzia do pisania efektywnego kodu
- Zmiany w parametrach nazwanych
- Podkreślenie na początku wyrażenia
- Modyfikator dostępu private protected
Nowe narzędzia do pisania efektywnego kodu
Gdy ktoś mnie pyta o co chodzi w tych zmianach, zawsze najpierw uświadamiam jaka klasa problemów wiążą się z tymi zmianami. Otóż, jest pewna grupa problemów do rozwiązania i efektywnego napisania, która pracuje na typach prymitywnych. Nie korzysta z list (List<T>) ale z tablic T[]. Dlaczego? Ponieważ listy dobrze się sprawdzają w problemach wysokopoziomowych, najczęściej biznesowych. Jednak przy algorytmach niskopoziomowych narzut interfejsu IEnumerable<T> jest już zbyt duży i nie efektywny. Dlatego właśnie pracuje się bardziej wydajnie na prostszych typach.
Poniżej lista nowych narzędzi, które pozwalają bardziej efektywnie tworzyć algorytmy:
- Słowo kluczowe in. Jest to po słowach ref i out kolejny sposób przekazywania parametrów do metody. Oznacza on, że parametr jest przekazywany przez referencję ale nie jest modyfikowany przez metodę.
- Składnia ref readonly pozwala na zwrócenie zmiennej przez referencję i uniemożliwia jej modyfikacji.
- Składania readonly struct pozwala na stworzenie nie zmiennej struktury. Czyli taka struktura powinna być przekazywana do metody poprzez słowo kluczowe in.
Zmiany w parametrach nazwanych
Wersja C# 7.2 wprowadza, możliwość podawania argumentów do metody bez wymieniana ich nazwy zaraz po argumentach nazwanych, gdy kolejność argumentu(nie nazwanego) się zgadza. Czyli taki przypadek się skompiluje:
private void OptionalArguments() { // C # 7.2 TestFunc(a: 2, "b", c: new Point()); } private void TestFunc(int a, string b, Point? c = null) { }
Jak widać argument b jest podany bezpośrednio i jest po argumencie nazwanym i jego kolejność się zgadza więc kompilator może się domyślić który to jest.
Dlaczego to dobra i zła zmiana jednocześnie. Dobra, bo dla problemów niskopoziomowych, gdzie w metodach jest duża ilość parametrów takie podejście trochę ułatwi czytelność kodu. Dlaczego jest zła, bo ktoś może sobie pomyśleć, że przekazywanie do metody więcej niż 3 paramentów jest dobre i do tego język to wspiera więc to musi być dobre podejście.
Musze przyznać, że mimo, że sam nie stosuje dużej ilość parametrów w metodzie to bardzo często w aplikacjach biznesowych, spotykam się z takim podejściem. Metody po 10, 15 parametrów to jakiś koszmar. Do tego te metody i te parametry w takiej samej formie przechodzą przez 3 warstwy. Każda warstwa ma swój interfejs. I teraz pomyślcie sobie ile czasu zajmuje dodanie nowego parametru? Dużo.
Podkreślenie na początku wyrażenia
Podkreślenia w wartościach numerycznych wprowadzone w C# 7.0 umożliwiały wstawienie podkreślenia aby rozdzielić liczby na bardziej czytelne dla ludzi. Dla wartość hex i binarnych nie było można wstawić podkreślenia na początku wyrażenia (zaraz po 0b). Od teraz już można:
private void NumericLiterals() { const int Sixteen = 0b_0001_0000; const int ThirtyTwo = 0b_0010_0000; const int SixtyFour = 0b_0100_0000; const int One = 0b_0001; const int Two = 0b_0010; const int Four = 0b_0100; }
Modyfikator dostępu private protected
Ostatnia zmiana to nowy modyfikator dostępu. Możemy od teraz zrobić tak, że widoczność elementów private protected będzie ograniczała się do klasy bazowej i do klasy dziedziczącej w tej samej bibliotece.
public class A1 : B1 { public A1() { base.Test(); } } public class B1 { private protected void Test() { } }
Podusmowanie
Kilka drobnych zmian i sporo nowych narzędzi pozwalających pisać wydajny i czytelny kod.
fajny post (jak i cały blog), przy okazji, na początku pojawiła się literówka – alrogyrtmy
Dzięki. Dzięki. Poprawiłem. A jak u Ciebie wrażenia z nowej wersji C# 7.0?
Jestem w kwestii programowanie w C# absolutnie początkującym, więc raczej się nie wypowiem (przez jakiś czas – raczej długi), póki co się uczę i czytam blogi