Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Natrafiłem na taki jak poniżej obrazek...
Generalnie to z lewej, czyli chyba "legacy code", jest zrozumiałe i przejrzyste. Niestety to z prawej jest dla mnie dość skomplikowane. To są chyba wyrażenia lambda? Poleca ktoś jakieś materiały na poziomie intermediate które będą zawierać te zaawansowane pojęcia?
Kolejny pytanie, trochę bardziej heurystyczne. Jak bardzo jest wymagana znajomość pisania kodu tak jak po prawej w praktyce? Czy jeśli ktoś uczy się/umie programować tak jak po lewej. To znaczy, że dla niego rynek pracy prędzej czy później się zamknie?
Natrafiłem na taki jak poniżej obrazek...
Generalnie to z lewej, czyli chyba "legacy code", jest zrozumiałe i przejrzyste. Niestety to z prawej jest dla mnie dość skomplikowane. To są chyba wyrażenia lambda? Poleca ktoś jakieś materiały na poziomie intermediate które będą zawierać te zaawansowane pojęcia?
Lol.
Tak się kończy rzeźbienie jednego paradygmatu. Poczytaj o funkcyjnym na początek zanim weźmiesz się za całą resztę.
Kolejny pytanie, trochę bardziej heurystyczne. Jak bardzo jest wymagana znajomość pisania kodu tak jak po prawej w praktyce? Czy jeśli ktoś uczy się/umie programować tak jak po lewej. To znaczy, że dla niego rynek pracy prędzej czy później się zamknie?
Nie zamknie. Ale nie idąc z nowszymi wersjami języka trochę się skurczy. Poza tym to co po lewej nadal będzie obsługiwane. Najwyżej koledzy wytkną Cię palcami, że robisz coś w 20 linijkach zamiast w 6.
PS. Ucz się programowania, a nie składni. Ja nie piszę w C# od ponad 4 lat, a doskonale rozumiem obydwa zapisy.
Dokładnie, jak wyżej i @WeiXiao, nie przejmuj sie tak bardzo, sa ważniejsze rzeczy w programowaniu, design, clean code, etc... Jak tak bardzo jesteś dociekliwy, to przeczytaj w dokumentacji. Acha, fajna namespace XD :-)
Ogólnie: aby zrozumieć switch expressions poszukaj pod hasłem "pattern matching". Jak wspomniał @purrll - to taki ficzer zaciągnięty z języków funkcyjnych.
Kolejny pytanie, trochę bardziej heurystyczne. Jak bardzo jest wymagana znajomość pisania kodu tak jak po prawej w praktyce? Czy jeśli ktoś uczy się/umie programować tak jak po lewej.
Jeśli trafisz do ogarniętej firmy gdzie używają Resharpera (polecam się z tym zapoznać jak już nauczysz się podstaw, możesz sobie triala zainstalować na miesiąc) to on ci prawdopodobnie sam podpowie że kod który napisałeś może zostać skrócony.
Nie jestem z świata C# ale jeśli chcesz załapać terminy wywodzące się z programowania funkcyjnego to wiele dobrego słyszałem o F#. Warto też zauważyć, że języki mainstreamowe coraz częściej zapożyczają koncepty z języków funkcyjnych więc czego byś się nie nauczył to nie będzie zmarnowany czas.
To są chyba wyrażenia lambda? Poleca ktoś jakieś materiały na poziomie intermediate które będą zawierać te zaawansowane pojęcia?
Lambdy są dostępne w C# dwa razy dłużej niż @WeiXiao żyje, konkretnie od 2007 roku. Nie wydają mi się zaawansowane, a na pewno są prostsze niż mechanizmy, których trzeba było używać przed nimi.
Kolejny pytanie, trochę bardziej heurystyczne. Jak bardzo jest wymagana znajomość pisania kodu tak jak po prawej w praktyce? Czy jeśli ktoś uczy się/umie programować tak jak po lewej. To znaczy, że dla niego rynek pracy prędzej czy później się zamknie?
Jeśli ktoś nie śledzi zmian w języku, to znaczy, że się nie rozwija, więc najprawdopodobniej zmniejsza swoje szanse na zatrudnienie. Znać trzeba wszystkie sposoby zapisu, bo w pracy trafia się na kod powstały w różnych czasach według różnych standardów, i trzeba go umieć czytać ze zrozumieniem.
O ile Switch Expression często jest przydatny tak w tym przypadku według mnie został niepotrzebnie użyty i zaciemnia kod. Operator trójargumentowy ?: w zupełności by wystarczył.
Tu masz połączenie kilku featerów na raz - ogarniaj je jeden po drugim. Pierwszy z nich jest akurat wycelowany w początkujących i ma zmniejszyć próg wejścia żeby zamiast:
Nie wiem czy to w ogóle wejdzie bo o ile wiem to jest jeszcze na etapie propozycji, ale nie wszystkie nowe ficzery przy okazji skracania składni komplikują kod. Najważniejsze żebyś umiał taki kod czytać, w produkowaniu takiego kodu jak wyżej już ktoś wspomniał mogą pomóc codefixy i resharpery. Plusem dla kogoś kto siedzi w C# od kilkunastu lat jest to że te sugar syntaxy były wprowadzane wolno i stopniowo - do tego samemu widziało się ich sens i jak mogą skrócić kod więc czekało się z niecierpliwością na kolejną wersję języka. Nauczenie się tego wszystkiego na raz może być faktycznie przytłaczające więc polecam po kolei dojść do najnowszej wersji języka analizując jakie były zmiany wprowadzane po drodze. Przy okazji pomoże Ci to w poprawianiu znalezionego starego kodu na necie i nie będziesz miał wątpliwości czy
event += new SthDelegate(Metoda) to to samo co event += Metoda (niedawno ktoś tu na forum próbował przekonać że nie)
Już prędzej [CIACH!] nauczy się frontendu niż w najbliższym czasie C# 9/8 będzie czymś standardowym na rynku.
c# to nie java - wersja języka nie jest sztywno powiązana z wersją runtime'a - jeśli tylko masz VS 2019 i włączone aktualizacje to nikogo nie musisz prosić o pozwolenie na użycie nowych składni języka - w przeciwieństwie do javy niekoniecznie zawsze wymaga to zmiany konfiguracji builda, instalowania nowszych wersji jre i dziesiątek pozwoleń. nowe wersje języka "wchodzą na rynek" dość szybko
@obscurity: Nie wiem czy to w ogóle wejdzie bo o ile wiem to jest jeszcze na etapie propozycji, z tego co widzę, to przeszło jakiś czas temu - In C# 9.0 you can just choose to write your main program at the top level instead:https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
c# to nie java - wersja języka nie jest sztywno powiązana z wersją runtime'a - jeśli tylko masz VS 2019 i włączone aktualizacje to nikogo nie musisz prosić o pozwolenie na użycie nowych składni języka - w przeciwieństwie do javy niekoniecznie zawsze wymaga to zmiany konfiguracji builda, instalowania nowszych wersji jre i dziesiątek pozwoleń. nowe wersje języka "wchodzą na rynek" dość szybko
od kiedy? roku? 2? od czasów Roslyn? bo na pewno w .NET w okolicach 4.5 tak nie było :P
właśnie tak było prawie aż do końca standardowego .NET Frameworka z nielicznymi wyjątkami (na przykład async, ValueTuple), dopiero w .NET Core zaczęli wprowadzać breaking changes i skracać wsparcie releasa do miesiąca
Pocieszę Cię że mało kto ogarnia to wszystko na raz. Przykładowo można taki kod:
Kopiuj
var obj =newOb();
obj.Prop =5;
skrócić do
Kopiuj
var obj =newOb{ Prop =5};
i o Object Initializer Syntax wie pewnie z 99% programistów tego języka
Że można skrócić
Kopiuj
var list =newList();
list.Add(5);
do
Kopiuj
var list =newList{5};
(Collection Initializers) wiedzą też prawie wszyscy (choć poznałem wielu którzy usilnie wciskają tam jeszcze dodatkowe nawiasy). To że samemu można zadeklarować metodę .Add w obiekcie który nie jest listą i przyjąć więcej niż jeden parametr wie już może połowa.
A to że można połączyć te dwa i dodawać do kolekcji przy tworzeniu obiektu i to nawet tych które są read-only:
Kopiuj
var sqlCommand =newSQLCommand();
sqlCommand.Parameters.Add("abc","value1");
sqlCommand.Parameters.Add("def","value2");
=>
Kopiuj
var sqlCommand =newSQLCommand{
Parameters ={// znak równości wbrew pozorom nie stworzy nowej listy tylko wywoła .Add na istniejącym obiekcie{"abc","value1"},{"def","value2"}}};
wie może jakieś 5%, nawet twórcy resharpera zdają się nie wiedzieć bo takiej podpowiedzi nie ma.
sprawdziłem z ciekawości i kod if (p is {Test: "abc", Age: 4 }) produkuje dokładnie ten sam IL co if (p != null) { var test = p.Test; if (test != null && test == "abc" && p.Age == 4). To tak w kwestii kompatybilności wstecznej. Nie wiem po co sprawdza czy test jest null przed porównaniem ze stringiem (tryb release, włączona optymalizacja)
Usunąć wpis?
Tej operacji nie będzie można cofnąć.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.