Jaki język funkcyjny?

(* możesz oddać maksymalnie 2 głosy)
Haskell
25%
25% [13]
Scala
35%
35% [18]
Elixir
20%
20% [10]
Elm
2%
2% [1]
Clojure
8%
8% [4]
OCaml
2%
2% [1]
F#
8%
8% [4]
PureScript
0%
0% [0]
Erlang
0%
0% [0]
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
3
szafran98 napisał(a):

@Saalin: Tak, jest tak jak mówisz. Nie planuję zmieniać języka, jestem ciekawy jak się pisze funkcyjnie, a podobno można z tego wynieść wiedzę, która pomoże w pracy w TS/JS.

No troche tak.

Jak widze takie cos https://www.linkedin.com/posts/coryhouse_just-learned-about-the-groupby-feature-in-activity-6909627301089419264-QB0I to troche czuje sie zazenowany. Tak jakby dopiero co kolo odkryli w tym JSie.

Chociaz teoretycznie JSowcy o funkcjach pierwszego rzedu to powinni miec akurat ponadprzecietne pojecie bo duzo tego uzywaja.


λλλ
edytowany 2x, ostatnio: stivens
ZT
ZT
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:102
0

Jak nie planujesz pracować z tym to polecam Elixira, jest mega przyjemny i jakby rynek pracy w Polsce wyglądał inaczej, to pewnie na niego bym się przeniósł.

hauleth
A co jest nie tak z rynkiem pracy w Elixirze w PL? Powiedziałbym, że całkiem sporo znanych programistów Elixira to właśnie PL.
ZT
zarejestrowany_troll
W sumie nie wziąłem pod uwagę, że inni ludzie mogą mieć inne upodobania xD W każdym razie ja nie biorę pod uwagę pracy w SH, więc mi się ten rynek wydawał malutki i ciężko by było np zmieniać pracę co rok czy dwa.
hauleth
No można nie zmieniać pracy co rok, dwa, a jak się znajdzie lepsza oferta. A nawet wtedy masz sporo ofert, wystarczy popatrzeć na oferty full-remote, trochę ich jest.
ZT
zarejestrowany_troll
Być może, ostatnio patrzyłem na rynek z rok przed pandemią. I wtedy na moje wymagania (SH odpadają, wymagany JS odpada) było bardzo słabo. Jak się zmieniło to tylko się cieszyć ;)
hauleth
Raczej szukałeś w złym miejscu - https://elixirforum.com/c/work/110
YA
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 22 godziny
  • Postów:252
0
Aventus napisał(a):

No i to jest właśnie ten problem. Ja chcę się uczyć na rzeczywistych przykładach, np. funkcyjnie pisząc serwis webowy. Nie pisząc krótkie przykłady na kilka(naście ) linii kodu.

Zastanawiam się, czy ma to sens?

Czy w nauce programowania funkcyjnego nie jest tak, że zanim się będzie umiało coś porządnie napisać, to trzeba ten sam kod przepisywać wiele razy?

Napisze się coś większego w Haskellu, potem w nauce dojdzie się do np. monad i się zorientuje, że w 10 miejscach należało napisać własne monady a w 12 innych wykorzystać jakieś monady z biblioteki. I teraz co dalej? Nauka wymagałaby przepisania tego, co się już napisało tylko że z użyciem monad, ale z drugiej strony ukończenie projektu wymagałoby nie przepisywania niczego, tylko kontynuowania pracy na kodzie takim, jaki jest.

-- To jest pytanie, a nie twierdzenie: sam się zastanawiam nad wykorzystaniem Haskella jednoczesnie do nauki i do pisania czegoś i mam przed tym opory z powodów wymienionych wyżej

Aventus
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
1

@YetAnohterone: ja myślę że ludzie trochę nad-interpretują to co ja napisałem. Mi nie chodzi o naukę w stylu "Napisz serwis webowych w Haskell/F#/Clojure/cokolwiek a przy okazji naucz się tego języka". Chodzi mi po prostu o coś dzięki czemu uczysz się tego języka, uczysz się myślenia i programowania funkcyjnego, ale koniec końców spinasz to wszystko w jedną całość, przy okazji ucząc się dodatkowo jak sobie radzić z pewnymi wyzwaniami które pojawiają się dopiero kiedy te wszystkie wyrwane z kontekstu "klocki" użyje się w kontekście działającego systemu- np. wymienione wcześniej efekty uboczne, których na pewnym etapie uniknąć się nie da.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
1programmer
  • Rejestracja:prawie 5 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
  • Postów:497
0

Szukam materiałów do nauki Haskella. Nie znalazłem na forum nic na ten temat, ale znalazłem taką książkę Haskell programming from first principles, 2000 stron. Dobra na start? Jeśli nie, to co innego polecacie?


Programować muszę, bo się uduszę
99xmarcin
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:2420
3

Jako łagodny wstęp do Haskella i intuicyjny wstęp do FP (gdzie wyjaśniamy dlaczego coś jest tak a tak) polecam: https://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/1316626229
Jedna z niewielu książek o programowaniu którą posiadam w wersji papierowej.


Holy sh*t, with every month serenityos.org gets better & better...
SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 2 godziny
  • Postów:1428
5
edytowany 1x, ostatnio: Saalin
jarekr000000
podpisuje się pod learnyouhaskell - naprawdę (na długo) nie trzeba wiele więcej.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Wrocław
4
stivens napisał(a):

Chociaz teoretycznie JSowcy o funkcjach pierwszego rzedu to powinni miec akurat ponadprzecietne pojecie bo duzo tego uzywaja.

Codzienne picie flaszki wódki nie czyni z nikogo eksperta od chemii organicznej.

several
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 5 godzin
0

Scali warto się nauczyć w jakimś stopniu, żeby móc użyć Gatlinga, świetnego frameworka do perf testów.


vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Niestety z tej ankiety wychodzi że będą w niej wygrywać głównie najpopularniejsze języki funkcyjne.

ZD
Zgodnie z gradacją: kłamstwo, ordynarne kłamstwo, statystka. Jeśli wynik by miał być "jakościowy" a nie "popularnosciowy" trzeba by przygotować zespół pytań, które będą miały szanse dać taki wynik.
stivens
W sensie, ze OCaml albo Erlang lepszy niz Haskell czy co? ;)
LukeJL
ale to też może być pewna wskazówka. Popularny, czyli więcej osób zna (zakładając, że głosowali ci, którzy faktycznie znają te języki. Ja nie głosowałem, bo w sumie żadnego nie znam na tyle, żeby polecać). Jeśli więcej osób zna (na tym forum przynajmniej), to łatwiej będzie uzyskać odpowiedź na jakiś swoje pytanie/problem itp.
several
Języki funkcyjne to nisza. Może i warto jakiś znać, ale nie każdy ma ochotę wchodzić w niszę w niszy.
vpiotr
@LukeJL: pytanie czego wskazówka. PHP też jest popularny w swojej niszy.
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
4

Języki funkcyjne to nisza.

Kiedyś prosiłem o zdefiniowanie słowa nisza bo IMHO Scala już niszowa nie jest jak się patrzy po ofertach pracy w Polsce. Z drugiej strony pewnie większość projektów Scalowych w Polsce to nie jest FP tylko Akka lub klepanie jobów Sparkowych

Niestety z tej ankiety wychodzi że będą w niej wygrywać głównie najpopularniejsze języki funkcyjne.

Scala jest sporo popularniejsza od Haskella (patrząc po ogłoszeniach o pracę) a jednak przegrała. Poza tym nie ma tu (podobno) najpopularniejszego języka funkcyjnego czyli Swifta

BTW W ankiecie oczywiście zaznaczyłem Haskella bo to czysto funkcyjny język z największą ilością materiałów. W językach hybrydowych jak Scala za łatwo można kantować. Łatwo można by Seniorem Scali i o FP nie wiedzieć nic


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
hauleth
Swift jest równie funkcyjny co Rust. Ma elementy, ale sam funkcyjny za bardzo nie jest.
MA
@KamilAdam: jakiego typu projekty robi się w Haskellu lub jaka jest jego przewaga nad takim Pythonem / js?
stivens
W Haskellu sie nie pisze :p A tak na serio to jakies banki glownie (Standard Chartered np.)
stivens
lub jaka jest jego przewaga nad takim Pythonem / js Python przeciez nie jest w zadnym stopniu funkcyjny. A nawet jesli jest to to jest ten sam poziom "funkcyjnosci" co np. C++ (jakies lambdy co najwyzej)
KamilAdam
jaka jest jego przewaga nad takim Pythonem / js?Pytasz się w czym Mercedes jest lepszy od dużego fiata? Otóż jest szybszy (co jest często mało ważne) oraz bezpieczniejszy (bo ma statyczne typowanie i niesamowicie rozbudowany system typów z np. Higher Kinded Types). Ale w tym kontekście pytania OPa najważniejsze jest to że Haskell (oraz PureScript i ELM) jest czysto funkcyjny (pure functional), gdy Python i JS są trochę funkcyjne, a trochę imperatywne
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:6 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0

jak nauka FP? Ja powoli zbliżam się do tego że chyba pora nauczyć się co to GADT XD


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
loza_prowizoryczna
Offtop: A gdzie tutaj Swift?
KamilAdam
A po co mi swift?
loza_prowizoryczna
Nevermind, widzę że to nie twój wątek tylko jakiegoś ograniczonego funkcyjnie usera.
1programmer
  • Rejestracja:prawie 5 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
  • Postów:497
2

@KamilAdam: trochę Elixira się uczyłem, ale po przeanalizowaniu jego przypadków użycia i dodając jego dynamiczne typowanie, zrezygnowałem.
Elma oraz Scali kiedyś liznąłem i uznałem, że jedynym sensownym wyborem dla mnie będzie język czysto funkcyjny, więc raczej logicznym wyborem jest Haskell.

Jednak na tym nie skończyłem. Następnie całe to poszukiwanie i sprawdzanie języków wyszło poza języki stawiające na FP. Zaświeciła mi się lampka w głowie, że przecież używam Maca i zacząłem się przyglądać Swiftowi, który w moim mniemaniu wygląda na całkiem przyjemny język, ale jednak ograniczony do ekosystemu Appla. Postanowiłem, że sprawdzę wychwalanego tu na forum i w wielu miejscach w sieci — Rusta. No i Rust zdecydowanie mi się spodobał, więc wyszedłem poza ramy założonego tematu.

Cały ten temat, to było poszukiwanie języka i jego ekosystemu, które to pozwolą mi poszerzyć horyzonty, dadzą inne spojrzenie na programowanie jeszcze niezbyt doświadczonemu programiście, czyli mi XD
Z każdej takiej dyskusji dużo bardziej doświadczonych userów staram się coś wyciągnąć, więc jak zawsze biję pokłony za merytoryczne odpowiedzi.

Na obecną chwilę interesuje mnie Rust, potem na pewno rzetelnie sprawdzę Swifta, a języki czysto funkcyjne tj. Haskell, to na ten moment pieśń przyszłości, ale na pewno nie wywieszam białej flagi.


Programować muszę, bo się uduszę
OR
Tekst z generatora?
1programmer
@Orfee: Chcesz powiedzieć, że piszę jak bot? XD
OR
@szafran98: Tak. Zbyt poukładana wypowiedź. Niemożliwe że napisał to człowiek.
1programmer
@Orfee: Ogólnie nie udzielam się na forach ani ogólnie zbytnio w internecie, ale okazało się, że programowanie bardzo mnie interesuje, to postanowiłem zostać użytkownikiem 4p i zawsze staram się utrzymać wysoki poziom wypowiedzi. Ogólnie często pisanie postów zajmuje mi nieprzeciętną ilość czasu, bo nie chcę się ośmieszyć nieznajomością tematu. Dodatkowo uważam, że mimo wszystko słowa zostawiają pole do sporej interpretacji, więc staram się ich używać zgodnie z semantyką. Ani jeden mój post nie pochodzi z generatora, więc ciekawe jest, że spotykam się z taką opinią XD
1programmer
@Orfee: Jest też opcja, że mam coś z głową albo faktycznie polski oddział Microsoftu wypuścił mnie tutaj te trzy lata temu, a Wy dostarczacie mi nieprzeciętną ilość danych treningowych XD
LT
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:11
0

Jak funkcyjne to raczej wypada przynajmniej liznąć Common Lisp, jak już bardzo się nie chce lizać CS to przynajmniej Scheme.

RP
  • Rejestracja:ponad rok
  • Ostatnio:ponad rok
  • Postów:3
0

W sumie to i język C++ jest funkcyjny.
https://helion.pl/ksiazki/programowanie-funkcyjne-w-jezyku-c-tworzenie-lepszych-aplikacji-ivan-cukic,profun.htm#format/d
Wprowadzają nowe funkcje jak auto age { 23 }; które są nieprzydatne i szybciej jest wpisać znak równości = niż {}. Dlaczego nie usuną tego że trzeba wprowadzać na górze deklarację do funkcji gdy funkcja jest poniżej głównej funkcji main. W nowoczesnych językach możesz napisać funkcję gdzie chcesz. Dodali tyle nieprzydatnych rzeczy do tego C++, a to co potrzebne pominęli.

Polska była kiedyś potęgą w opracowywaniu własnych języków programowania.
https://gadzetomania.pl/niesamowity-zapomniany-jezyk-programowania-stworzyli-go-polacy-wyprzedzajac-epoke-o-40-lat,6705392508401793a

edytowany 3x, ostatnio: Rprogrammer
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)