Zauważyłem tutaj posty pokazujące użycie funkcji delegates \ lambda do rozwiązania dziury w środku pomysłu bez dużej ilości powtórzeń: http://www.markhneedham.com/blog/2009/04/04/functional-c -the-hole-in-the-middle-pattern /
Problemem wydaje się być to, że młodsi programiści i inni niekoniecznie rozumieją, czym jest pojęcie funkcji wskaźnik wskaźnik \ delegate \ lambda, co utrudnia odczyt (i być może debugowanie) kodu.
Czy powinniśmy unikać lub poważnie ograniczyć korzystanie z tego narzędzia do pisania oprogramowania biznesowego, zwłaszcza w małych zespołach lub sklepach z programistami?
Czy też dopuszczalne jest używanie go z odpowiednimi komentarzami i oczekiwanie, że kiedy już mnie nie będzie, następny programista zrozumie lub pozna funkcje lambda?
Array
klas po skomplikowane ORM. Cóż, nikt nie narzeka.Odpowiedzi:
Szczerze mówiąc, to ich problem. Do tego masz pewność, że mają szkolenie. Nie możesz nie używać dobrej techniki tylko dlatego, że niektórzy ludzie mogą jej nie zrozumieć. Jeśli potrzebują pomocy, mogą poprosić autora. Co ważniejsze, funkcje lambda stają się niezwykle popularnymi funkcjami językowymi.
Czy nie powinniśmy korzystać z dziedziczenia, ponieważ niektórzy go nie rozumieją? Do diabła, niektórzy ludzie nie chcą wierzyć w naukę, zarazki lub jakiekolwiek inne śmieszne rzeczy. Musisz być w stanie przejść dalej i nie dopuścić do tego, aby inni nie byli w stanie dotrzymać Ci kroku, powstrzymując Cię przed napisaniem najlepszego kodu, jaki możesz. Funkcje Lambda są świetną funkcją i bardzo pomagają w pisaniu kodu, i powinieneś wziąć całą pomoc, jaką możesz uzyskać.
Deweloper powinien wiedzieć, jak używać języka, w którym jest młodszy, czy nie. Jeśli tego nie zrobią, zwolnij ich i znajdź kogoś, kto to zrobi, lub wyszkol ich, aby to zrobili.
źródło
Tak, użyj ich.
Jestem młodszym programistą i znam / rozumiem lambdas (i inne pojęcia, o których wspominałeś). Nic nie mogłem przewidzieć, aby powstrzymać młodszego programistę od nauki wszystkich tych koncepcji w bardzo krótkim czasie. Juniorzy mogą nie mieć takiego samego doświadczenia / wiedzy, jeśli chodzi o wiele problemów związanych z tworzeniem oprogramowania, jednak pojęcia takie jak lambda mogą być równie łatwo zrozumiałe dla każdego, kto ma podstawową wiedzę na temat programowania i połączenia internetowego. Wydaje się również dziwne, że wybrałeś lambdas jako przykład, biorąc pod uwagę, że używasz C #, prawdopodobnie nie masz nawet tyle przewagi w nauce lambdas niż młodszych programistów (zostały wprowadzone dopiero w 2008 roku, jeśli ja pamiętaj poprawnie).
Krótko mówiąc, nie ma potrzeby ogłuszania kodu dla nas neofitów. Będzie nam dobrze i wolimy pracować nad najlepszym możliwym wdrożeniem, jakie możesz wymyślić. :)
źródło
Jeśli są rozsądnym rozwiązaniem twojego problemu, powinieneś ich użyć.
Nie ograniczaj się sztucznie - istnieje większe prawdopodobieństwo, że kod będzie niskiej jakości, trudny do utrzymania.
Jeśli kod jest dobrze napisany z odpowiednimi komentarzami, to ci, którzy go śledzą, powinni móc się od ciebie uczyć .
źródło
Umieść link do dokumentacji msdn w komentarzach na górze bloku, który z niej korzysta, a następnie kontynuuj. Nie powinieneś bać się korzystać z nowej / złożonej technologii, która jest częścią pracy programisty, aby dowiedzieć się rzeczy, których nie znają.
źródło
Następnie muszą się ich nauczyć. Kropka.
Poświęć im kilka minut, aby im to wyjaśnić. To nie jest trudne.
źródło
Powinieneś użyć odpowiedniego narzędzia do pracy. Jeśli istnieje prostszy i bardziej przejrzysty sposób rozwiązania problemu, skorzystaj z niego. Jeśli chcesz wejść w coś, co Twoim zdaniem może być zaawansowanym tematem dla przyszłych opiekunów, zaznacz to wyraźnie i dołącz wskaźnik do dokumentacji wyjaśniającej tę technikę.
Należy zauważyć, że są to trzy różne rzeczy.
źródło
Dwa możliwe scenariusze:
a) Twoi koledzy (lub większość z nich) mają odpowiednie umiejętności. Muszą nauczyć się lambdas, są częścią języka, a czasem są dokładnie odpowiednim narzędziem do pracy. Jeśli więc są naprawdę najlepszym narzędziem, z pewnością je wykorzystaj. Po prostu unikaj ich używania, ponieważ dopiero się o nich dowiedziałeś i wszyscy są podekscytowani i myślą, że to srebrna kula.
b) Wy, koledzy (lub większość z nich), jesteście niekompetentni. Nie ma możliwości, by kiedykolwiek w pełni zrozumieli lambdy, zamknięcia, wskaźniki funkcji lub inne podobne meta-kodowanie. Prawdopodobnie już starają się zrozumieć wskaźniki, referencje i rekurencję. W tej sytuacji najlepsze, co możesz zrobić, to ugryźć kulę, użyć niezdarnego, pełnego, pozbawionego lambda roztworu i wyczyścić CV, ponieważ powinieneś szukać pracy.
źródło
W tym przypadku spójność może bardzo pomóc. Jeśli używasz go konsekwentnie w tym samym stylu itp., Czytelnicy muszą się go nauczyć tylko raz, a następnie rozpoznają go wszędzie.
Ponadto, przynajmniej na początku, może być pomocne. Na przykład te dwa są równoważne:
... ale w pierwszym przypadku jest oczywiste, jeśli znasz składnię lambda, co robimy. Nawet jeśli nie znasz składni lambda, to oczywiste, że widzisz coś nowego i musisz to sprawdzić. W drugim przypadku wygląda to tak, jakbyś przekazał zmienną.
Wiem, że ReSharper popycha cię do zmiany na drugą sprawę, ale zastanawiam się, czy to zawsze dobry pomysł. W drugim przypadku musisz wiedzieć, że
doSomething
potrzebaAction
.źródło
doSomething
wymaga toAction
”. A jak jest, że każda różni się od konieczności wiedzieć, żefunctionWithNameThatDoesNotSpecifyItsArgumentTypes
zajmujeObjectOfSomeType
? W rzeczywistości w językach, w których funkcje są prawdziwymi obiektami pierwszej klasy, nie jest inaczej.Często trudno mi zrozumieć niektóre pojęcia, ponieważ są one opisane jedynie w sposób abstrakcyjny, a nie spotykane w praktycznych sytuacjach. Więc osobiście jestem za spotkaniem z takimi konstrukcjami.
Główny scenariusz, który mogę wymyślić, aby tego uniknąć, to taki, że programowanie nie jest głównym zadaniem drugiej osoby. Na przykład administrator systemu lub bioinformatyk, który większość czasu spędza na rzeczywistych eksperymentach („szczur laboratoryjny”).
źródło
Być może tutaj nazywamy DoAction, ponieważ jego ciało jest zbyt długie, aby zmieścić się w samej lambda. W takim przypadku użycie metody rozszerzenia ForEach () do List nie daje nam wiele korzyści w porównaniu ze zwykłą pętlą foreach, choć, jak sądzę, pozwala zaoszczędzić kilka linii kodu. Ale w tym konkretnym przypadku użycie ForEach () mogło nas uśpić do zrobienia czegoś, co w rzeczywistości wymaga więcej kodu i powoduje dodatkowe przeładowanie stosu, niż to konieczne; Przekazany argument wcale nie musi być lambda
Powinieneś po prostu wywołać DoAction w ten sposób:
W ogóle nie ma Lambdy. Kluczem jest zapamiętanie, co tak naprawdę przekazujesz, gdy tworzysz wyrażenie lambda: coś w rodzaju skrótu do definiowania instancji delegowanej. Tak, ma również zalety, takie jak zamknięcie, ale nie należy tracić witryny z tego, czego oczekuje wywołanie metody. W tym przypadku oczekuje adresu do metody pasującej do podpisu Action. DoAction jest już taką metodą, więc tworzenie lambda jest po prostu dodawaniem całkowicie niepotrzebnego wywołania metody.
źródło
IMHO, pisząc na jakimkolwiek poziomie technicznym wyższym niż poziom techniczny zespołu, jest błędny. Jeśli członkowie Twojego zespołu nie są zbyt zadowoleni z wyrażeń i funkcji lambda i nie mają czasu na naukę tego (powinni poświęcić czas na bazę danych dostrajania wydajności, więcej pracować nad interfejsem użytkownika, tworzyć komponenty itp.), To zdecydowanie sugeruj, aby ich nie używać . Jeśli jednak chcą się uczyć i mają czas wolny lub już wiedzą, to dlaczego nie?
Myślę, że jest to względna kwestia, którą należy oceniać według zespołu i poziomu technicznego zespołu. Dotyczy to nie tylko funkcji lambda. Tak jest w przypadku wiedzy technicznej. Na przykład, ilekroć zespół wie o wzorcu repozytorium, ma wiedzę specjalistyczną, aby go wdrożyć i utrzymywać, niech to zrobi. Ale jeśli nie, po prostu znajdź inny sposób. Jeśli wiedzą o OO JavaScript, pozwól nam stworzyć bardziej skalowalny kod w JavaScript. Ale jeśli nie, po prostu wróć do proceduralnego JavaScript.
źródło