Ostatnio bardziej martwi mnie sposób pisania kodu. Po przeczytaniu kilku książek o wzorach projektowych (i jestem pewien, że ich nadgorliwa realizacja) zmieniłem sposób myślenia w stronę opisania tego, co się zmienia. Zazwyczaj zauważam, że piszę mniej interfejsów i bardziej zorientowany na metody kod, w którym uwielbiam umieszczać życie w starych klasach z predykatami, czynnościami i innymi zadaniami delegowanymi. Wydaje mi się, że często zmieniają się działania, więc je podsumowuję. Nawet często, choć nie zawsze, rozkładam interfejsy na jedną metodę, a następnie wolę użyć delegata do zadania zamiast zmuszania kodu klienta do utworzenia nowej klasy.
Więc chyba to mnie uderzyło. Czy zamiast tego powinienem programować funkcjonalnie?
Edycja: Mogę mieć błędne pojęcie o programowaniu funkcjonalnym.
Obecnie moim wybranym językiem jest C # i pochodzę z języka C ++. Pracuję jako programista gier, ale obecnie jestem bezrobotny.
Mam wielką pasję do architektury. Moje zalety to czysty, elastyczny, wielokrotnego użytku i łatwy w utrzymaniu kod. Nie wiem, czy zostałem otruty tymi sposobami, czy to na lepsze. Czy mam gorączkę refaktoryzacyjną, czy powinienem przejść dalej? Rozumiem, że może to być pytanie o „użyj odpowiedniego narzędzia do pracy” , ale chciałbym usłyszeć twoje przemyślenia.
Czy powinienem wybrać funkcjonalny język? Jednym z moich czynników strachu jest opuszczenie wygody Visual Studio.
Odpowiedzi:
TAK
Uczenie się nowych rzeczy powinno być zabawą. A nauka nowego sposobu programowania powinna uczynić cię lepszym programistą. Sprawdź jeden z Haskell lub Erlang, oba są funkcjonalne, ale bardzo się różnią. Jeśli wybierzesz Haskell, znajdź kilka wykładów „Simona Paytona Jonesa” na youtube lub podcastach. Facet jest świetnym mówcą.
źródło
Święty * * * *. Nie ma srebrnej kuli. Schodzić. Odpręż się, weź głęboki oddech.
To, że masz narzędzie w przyborniku, nie oznacza, że musisz go używać. Skoncentruj się na zadaniu, tj. Napisaniu działającego programu i dokonaj refaktoryzacji, gdy kod będzie brzydko pachniał. Nie zamykaj i nie streszczaj każdego najmniejszego szczegółu tylko dlatego, że może się to zmienić pewnego dnia w przyszłości. IMO naprawdę lepiej jest zacząć od razu, KISS i YAGNI i reagować na zmieniające się wymagania, kiedy się zmieniają .
Nie sądzę, aby ktokolwiek tutaj mógł powiedzieć, czy język funkcjonalny jest lepiej dostosowany do twoich potrzeb. Ponieważ nie powiedziałeś nam, nad czym pracujesz.
źródło
Możesz podnieść F # . Jest to język funkcjonalny .NET, który pozwoli ci korzystać z Visual Studio i ponownie wykorzystać dużą wiedzę .NET. Zespoły oczywiście integrują się ze złożeniami C # bezproblemowo (co pozwala łatwo łączyć C #, C ++ / CLI i F # w jednym projekcie). Obsługa F # pochodzi z VS Pro lub lepszej, ale nie jestem pewien, czy jest ona domyślnie włączona.
źródło
IMO, warto wypróbować funkcjonalny język. Nawet jeśli nigdy nie użyjesz go bezpośrednio w wydanym produkcie, nauczenie się go prawie na pewno pomoże uzyskać nieco inne spojrzenie na programowanie. Nawet jeśli nadal będziesz wykonywać całe „prawdziwe” kodowanie w języku C #, jest całkiem spora szansa, że pomoże ci to poprawić kod, który piszesz w języku C #.
Jak wspomnieli inni, oczywistym wyborem dla osób przyzwyczajonych do Visual Studio jest F #, który jest w zasadzie pochodną Ocaml / Caml / ML. IMO, to był dobry wybór ze strony Microsoft do wprowadzenia ludzi do programowania funkcjonalnego - jest to pełnoprawny język funkcjonalny, ale nie ma prawie tak obcej składni jak niektórzy (np. Podczas gdy języki oparte na Lisp mają prawdziwe zalety, początkujący prawie zawsze mają trudności z czytaniem).
źródło
Tak, powinieneś.
Jeśli wybierzesz czysty, taki jak Haskell, nauczysz się nie tylko nowego języka, ale także nowego sposobu myślenia. Może ci to również pomóc w późniejszej pracy proceuralnej / OO.
F #, z drugiej strony, nie jest czysty, więc możesz łatwo ominąć to, co jest ważne w programowaniu funkcjonalnym. Możesz powiedzieć, że tak powiem, kontynuować pisanie programów proceduralnych, które mutują tutaj zmienną, wywoływać tam pewne efekty uboczne, tylko w składni F #.
źródło
Jeśli już używasz c #, nie potrzebujesz nowego języka - dzięki połączeniu metod rozszerzenia, lambdas i ogólnych typów Func / Action dość łatwo jest napisać kod funkcjonalny w C # - w ten sposób możesz użyć stylu funkcjonalnego w algorytmy, w których ma to sens, bez konieczności zmiany całej aplikacji.
źródło