Programowanie Funkcyjne (dyskusja)...

Programowanie Funkcyjne (dyskusja)...
hurgadion
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:www
  • Postów:259
3

Hej,
rzucam kolejny temat, tak ogólnie... Generalnie trochę liznąłem programowania funkcyjnego: ML, Dr Racket, Oz, Haskell, i podoba mi się tego typu kodowanie... i myślałem, że to bardzo niszowe dopóki nie natknąłem się na Scalę... Mam parę pytań, aby ułatwić dyskusję (wymianę opinii może lepiej)...

  1. Czy macie jakieś "funkcyjne" doświadczenia ? Jeżeli tak, to jakie i co o tym sądzicie ?
  2. W jakim celu tworzy się języki programowania, które okazują się niszowe... ?
  3. Jak widzicie przyszłość tego programowania ?
  4. Co sądzicie o Scali ? (opcjonalnie, bo już gdzieniegdzie wyczytałem na ten temat)... :)

Pozdrawiam... :)

edytowany 1x, ostatnio: hurgadion
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:18 dni
4
  1. Tak, obecnie w pracy Elixir a tak hobbystycznie to trochę lispów, Haskell i programowanie funkcyjne tam gdzie można było (i.e. Rust).
  2. Z tego samego powodu, dla którego tworzy się języki, które nie okazują się niszowe: potrzebujesz rozwiązać problem i wychodzi na to, że lepiej wyjdzie napisać cały język, który to obsłuży. Przecież nikt na etapie projektowania języka nie wie czy język będzie niszowy czy nie.
  3. Programowanie funkcyjne ma dużą przyszłość, bo oferuje praktycznie za darmo rzeczy, które są przynajmniej ciężkie w innych językach, głównie chodzi tutaj o zrównoleglenie obliczeń. Jak masz język, gdzie wszystko jest czystą funkcją i nie masz mutowalnych danych, to bardzo łatwo można rozproszyć wszystkie obliczenia, bo masz pewność, że dane nie będą musiały być synchronizowane między sobą.

Zobacz pozostały 1 komentarz
hurgadion
Jak się ma Elixir do Erlanga ?? możesz parę słów ?? i o Ruście ciut... jak masz ciekawe linki do artykułów na ten temat, to chętnie poczytam, nie wiem na ten temat zbyt wiele... :) no, ale (wyczytałem ciut) wykorzystanie współbieżności Erlanga przez Ericssona to chyba jest coś ??
Tenonymous
Rust to taki lepszy C++, który na mniej rzeczy pozwala i domyślnie przenosi, zamiast kopiować.
hauleth
@Wibowit: co rozumiesz przez "kolekcje funkcyjne"? Niemutowalne? Masz im oraz rpds. Jak najbardziej da się w Ruscie pisać funkcyjnie, nie zawsze ma to sens, ale często piszesz funkcyjnie tam gdzie możesz, bo tak jest łatwiej. @hurgadion Elixir jest językiem kompilowanym do kodu pośredniego maszyny wirtualnej Erlanga, a z racji odpowiedników 1-1 w konstrukcjach wewnątrz języka wykorzystywanie bibliotek pomiędzy tymi językami jest banalnie proste.
Wibowit
Chodziło mi o structural sharing i jak widzę jest to w im, więc OK. Ale to ekstra biblioteka tak jak vavr.io dla Javy.
hauleth
@Wibowit: Rust (wg mnie rozsądnie) stara się trzymać bibliotekę standardową w miarę małą a funkcjonalności rozbudowywać poprzez biblioteki zewnętrzne.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 4 godziny
2

Czy macie jakieś "funkcyjne" doświadczenia ? Jeżeli tak, to jakie i co o tym sądzicie ?

Mam sporo doświadczenia w Scali. OOP wymieszany z FP, ale bez skrajnego FP jak w scalaz/cats. Co sądzę? Funkcyjne kolekcje, niemutowalne klasy wartościowe itp itd są mega spoko. Ułatwiają pisanie czytelnego i testowalnego kodu, którego nie trzeba mockować na każdym kroku.

W jakim celu tworzy się języki programowania, które okazują się niszowe... ?

Jak ktoś nie ma tyle hajsu co Google, Sun (przejęty przez Oracle) czy Microsoft to ciężko będzie mu wypromować swój język. Niszowe języki są zwykle tworzone przez entuzjastów bez tony hajsu. Chociaż z drugiej strony Scala cały czas pnie się w górę.

Jak widzicie przyszłość tego programowania ?

Programowanie funkcyjne wchodzi nawet małymi krokami do Javy (vide vavr.io). Podstawowe elementy programowania funkcyjnego jak funkcyjne kolekcje i niemutowalne klasy już się popularyzują. Rzeczy typu monady IO pewnie nie wydostaną się z niszy, ale to już jest takie trochę bardziej zaawansowane (a nawet powiedział bym skrajne) programowanie funkcyjne. Jak ktoś chce w to iść to i tak najpierw pasuje opanować podstawy (tzn mieć z nimi obycie), czyli kolekcje funkcyjne i niemutowalne klasy.

Co sądzicie o Scali ? (opcjonalnie, bo już gdzieniegdzie wyczytałem na ten temat)... :)

Programuję komercyjnie w Scali od 2014 roku i sobie chwalę :) Składnia prosta nie jest, ale składnia takiego C++ czy Rusta też nie jest prosta. Z tym, że zaawansowane konstrukcje składniowe Scali często wykorzystuje się do implementowania biznesowych funkcjonalności podczas gdy w C++ zaawansowana składnia służy do oszczędzania taktów i bajtów, a w Ruście jest sporo ceremonii z opanowaniem borrow checkera i jego kontroli poprawności wskaźników (co też nie pomaga implementować funkcjonalności biznesowych, a raczej w łapaniu błędów). JVM (używany przez Scalę) ma garbage collectora, który rozwiązuje z automatu wszelakie problemy ze wskaźnikami, które w Ruście czy C++ trzeba ceremonialnie ogarniać ręcznie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
hurgadion
no nieźle... :) ja generalnie jestem pod wrażeniem Scali i jego twórcy... :) podobają mi się WorkSheety w Eclipse, w Javie chyba nie ma takiej interaktywnej funkcjonalności ?? a Ty w czym ogarniasz projekty, że tak zapytam ??
Wibowit
W Scali piszę pod IntelliJem. Co do Javy to Java 9 ma wbudowanego JShella, który też daje dużą dozę interaktywności: https://en.wikipedia.org/wiki/JShell
hurgadion
dzięki za info, jeszcze jedno pytanie, Inteliij jest lepszym środowiskiem projektowym od Scalowej Eclipse ??
Wibowit
Prawdopodobnie tak, aczkolwiek dochodzi też jeszcze kwestia gustu. Mi Eclipse nie podchodzi :) więc jak dla mnie IntelliJ - Eclipse 2 : 0
hurgadion
może kiedyś odpalę, bo warto mieć porównanie :) po tym wątku mam już tyle rzeczy do odpalenia, że nie wiem od czego zacząć... ;)
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Ja o programowaniu funkcyjnym coś zacząłem słyszeć 2 lata temu, zacząłem się na serio interesować rok temu. Generalnie wraz z OOP stanowia "zabójczy duet" - stosuje typowe dla OOP mechanizmy typu klasy, polimorfizm, enkapsulacje + korzystam z elementów FP - głównie niemutowalne obiekty(w tym kolekcje) + monady. Trochę musiałem się przyzwyczaić ale moim zdaniem w miarę optymalnie łącze OOP i FP :)
A jak wspomniał @Wibowit pewne elementy FP są coraz bardziej popularne, np. w Kotlinie data classy są niemutowalne ;)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
hurgadion
dzięki... a potrafiłbyś w paru zdaniach podać różnice między Scalą, a Kotlinem ?? no i ewentualnie jak się Kotlin ma do Swifta ??
katelx
  • Rejestracja:prawie 10 lat
  • Ostatnio:4 miesiące
  • Lokalizacja:Hong Kong
3
  1. co prawda obecnie pisze glownie w javie, c i pythonie ale niezaleznie od jezyka robie to funkcyjnie jesli tylko moge (tzn nie ogranicza mnie np wydajnosc albo zwyczajna wygoda), jesli moge do uzywam (mozliwie czysto) funkcyjnych jezykow, chocby do pobocznych projektow
  2. a w jakim celu robi sie nieoplacalne biznesy? :)
  3. mysle ze fanatyczna funkcyjnosc pozostanie na konferencjach i innych uniwersytetach, jesli chodzi o bardziej praktyczna to np taka scala jest dobra opcja, przynajmniej w sektorze finansowym, na ta chwile ciezko mi wymienic duzy bank ktory jej nie uzywa, w morgan stanley czy hsbc strategiczne projekty sa tworzone wlasnie w scali, na razie zeby sie zalapac wystarczy dobra java i chec uczenia sie scali ale wydaje mi sie ze przyszlosc moze zmienic ta sytuacje na korzysc scali
  4. na moj gust niepotrzebnie skomplikowana i za bardzo pozwalajaca na kodowanie po javowemu
hurgadion
myślę, że podpięcie się pod Javę, to dość dobry pomysł... umożliwia korzystanie z wielu narzędzi znanych wielu programistom, no i momencie wprowadzania jakichś nowych rozwiązań Javowych Scalowcy nie zostaną w tyle, może... :)
siloam
W Javie korzystanie ze Stream API zawsze odbija się negatywnie na szybkości działania programu, a do poważniejszych operacji trzeba pisać samemu interfejsy funkcyjne, co nie jest zbyt wygodne. Takie programy potrafią działać 20-30% wolniej niż ich imperatywne odpowiedniki. Scala jest optymalizowania pod funkcje a ich w wywołania w scalaz są już całkiem megaszybkie.
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:19 dni
1
  1. Kodzę w Scali, jarałem się Haskellem, wgryzałem się w catsy, monady, kategorie, Idrisa.
  2. Łączenie FB z OOP i resztą wydaje się lepszym połączeniem, niż dogmatyczne trzymanie się samego FP.
  3. Lubię ją, bo nie traktuje programisty jak tumana i nie ogranicza go na każdym kroku.
edytowany 1x, ostatnio: Afish
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 11 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1

ad 1. Ło panie.... (zacząłem gdzieś w 98 od SML, ale długo myślałem, że to tylko for fun. Z tym, że w miedzyczasie opanowałem programowanie bieda-funkcyjne w C++ i w Javie - nawet przed przesławnymi lambdami).
ad 2. Nie wiem - spytaj Goslinga. Pamiętam, jak Java była niszowa i wszyscy z niej się śmialiśmy.
ad 3. Jestem zryty - rozdzielam programowanie na Funkcyjne i Dysfunkcyjne - przyszłości dla tego drugiego w poważnym biznesie nie widze (jakieś skrypciki, może)
ad 4. Przyszłość Scali jest niepewna - Ci którzy chcą nieco lepszej Javy z nieco lepszym wsparciem dla FP - mają kotlina. Ci którzy chcą ostrego FP - mają Haskella (i jest odpływ głownych kontrybutorów do Haskella - np. https://medium.com/@fommil/scala-3-considered-as-a-new-programming-language-a335ff67e075) . Zobaczymy co się stanie po wejściu Scala 3 / Dotty.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
hurgadion
a według Ciebie Kotlin jest lepszy od Scali ??
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 4 godziny
0

ad 4. Przyszłość Scali jest niepewna - Ci którzy chcą nieco lepszej Javy z nieco lepszym wsparciem dla FP - mają kotlina. Ci którzy chcą ostrego FP - mają Haskella (i jest odpływ głownych kontrybutorów do Haskella - np. https://medium.com/@fommil/sc[...]ramming-language-a335ff67e075) . Zobaczymy co się stanie po wejściu Scala 3 / Dotty.

Do Haskella odpływają ludzie ze scalaz, a więc biblioteki, która odstrasza początkujących Scalowców. Stąd nie jest oczywiste czy ten powolny odpływ jest zjawiskiem negatywnym czy też nie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
jarekr000000
No cóż, wolałbym żeby podejście ScalaZ wygrało - Sacrifice Half of the community. Niestety, Haskell też nie jest idealny.
Wibowit
a skąd wiadomo, że połowa? trzeba by zrobić ankietę ile % Scalowców używa monady IO w dużej skali w projektach komercyjnych. na mój gust scalazetowych (czy tam catsowych) entuzjastów jest znacznie mniej niż połowa, więc poświęcilibyśmy znacznie więcej niż połowę społeczności.
hurgadion
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:www
  • Postów:259
1

Jeżeli kogoś interesują zagadnienia związane z programowaniem funkcyjnym to proponuję trzy kursy (kiedyś był jeden): Programming Languages A, B, C (coursera). Są to kursy z podstaw trzech języków: ML, Dr Racket, Ruby (wkrótce ruszają). Jest to jeden z fajniejszych kursów jakie robiłem, kiedyś tam, i zamierzam powtórzyć. Chyba jest możliwość zrobienia kursów za free, o ile ktoś nie potrzebuje certyfikatu. Niektóre zadanka nie są banalne, i trzeba trochę pogłówkować. Tym, że są to języki niszowe ja bym się bardzo nie przejmował, są nawiązania nawet do bardziej popularnych języków jak Java, Scala, itp. Kursy są dla średnio ogarniętych ;)

edytowany 1x, ostatnio: hurgadion
siloam
Racket jakoś mnie odrzuca. Nigdy nie mogłem się przyzwyczaić do notacji paznokciowej, a kod różnych lispów wydaje się mi bardziej rozwlekły niż imperatywny.
hurgadion
wolę chyba Haskella, Oz jest też w miarę, ale porobili jakieś dziwactwa :) najlepciejsza i tak jest chyba Scala, bo masz możliwość wyboru :)
Pipes
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:459
1

Czy macie jakieś "funkcyjne" doświadczenia ? Jeżeli tak, to jakie i co o tym sądzicie ?

Uczyłem się na własną rękę Elixira, a przy tym trochę Erlanga. Po paru miesiącach okazało się w ówczesnej pracy, że będzie projekt w Elixirze, więc zgłosiłem się do niego na ochotnika. Odpowiadałem za backend przez nieco ponad rok, a potem projekt został ubity, bo nie przynosił zakładanych zysków. Dla mnie założenia projektu były hmm wątpliwe, chciałem w nim być dla języka, a zdobyłem znacznie więcej :)

W jakim celu tworzy się języki programowania, które okazują się niszowe... ?

Niekiedy takie języki są lepsze do konkretnych zastosowań. Zdarza się też, że ich twórcy chcą mieć swój język - rozwiązania, których brakowało im w języku X, a są w Y, ale nie lubią w Y tego czy owego.

Jak widzicie przyszłość tego programowania ?

Kopiuj
<yoda>Mglista przyszłość tego chłopca jest.</yoda>

Co sądzicie o Scali ? (opcjonalnie, bo już gdzieniegdzie wyczytałem na ten temat)... :)

Scala to pomost między programowaniem funkcyjnym a obiektowym. Sprawdzałem sobie czytając "Siedem języków..." i ogólnie wrażenia mam dość pozytywne, jeżeli ktoś już miał jakąkolwiek styczność z Javą, bo wtedy widać różnicę :) Generalnie połączenie tych dwóch paradygmatów jest czymś naturalnym i jest wzajemnie korzystne (wujek Bob myśli tak samo :) ) i to jest na plus Scali. Minusy? Wydaje się być dość wolna i ogólnie jakaś taka kobyła wielka, ale to może moje mylne pierwsze i n-te wrażenie.

edytowany 1x, ostatnio: Pipes
hurgadion
chyba to ta :) znalazłem .pdf angielskiej wersji, może komuś się przyda: https://geneticmail.com/scott/library/text/seven-languages-in-seven-weeks_p1_0.pdf
Pipes
Tak, to ta. Jest też książka "Another seven languages..." i ogólnie seria 7 czegoś w 7 tygodni się mocno rozwija :)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
  1. uczyłem się Lispa (lata 90)
    Potem długo pracowałem w Pascalu.
    Po dwudziestu latach okazało się że część rzeczy w tym Pascalu robiłem funkcyjnie (podobnie jak @katelx), tyle że nieświadomie - po prostu czyste funkcje wydawały mi się przyjemniejsze w interpretacji.
    Od TP 6.0 (1990) z tego co pamiętam weszły typy proceduralne, czyli takie dzisiejsze lambdy - w linku pokazane jak można było je definiować wewnątrz funkcji.
    Ze strukturami funkcyjnymi miałem mało do czynienia.

  2. żeby uczyć jakichś koncepcji (Logo), robić wyspecjalizowane czynności (SQL, Prolog, Fortran), spełniać konkretne wymagania (COBOL, Ada, Rust).

  3. taka sama jak OOP (soft w 100% w jednym paradygmacie będzie rzadki).
    Większość języków będzie miała opisane funkcyjne możliwości, te które będą się nadal rozwijały będą miały dodawane możliwości funkcyjne.
    Języki ściśle wymagające FP pozostaną niszowe.

  4. na razie nic nie sądzę. Może powinienem się zainteresować, ale mam inne rzeczy na głowie.

WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 9 godzin
  • Postów:3169
1
  1. Tak. XSLT -> dzieki temu wiem jak na pewno programowanie funkcyjne nie powinno wygladac.
  2. Dla zabawy/funu/cwiczenia/sprawdzenia sie/rozwiazania konkretnego problemu czy grupy problemow
  3. Przejmie kawalek tortu, czesc nowych projektow bedzie tak robiona, ale lwia czesc softu bedzie robiona jak teraz, czyli z grubsza obiektowo. Raczej bedzie powolna ewolucja niz rewolucja.
  4. Wydaje sie fajna ale dopiero sie wgryzam w temat w wolnym czasie.
1

Mam doświadczenia z książek "Little Schemer" i "How to Design Programs". Wiele osób chyba myśli, że programowanie funkcyjne da im wolność i nie będą już musieli używać tych paskudnych obiektów i klas tylko łatwych do zrozumienia funkcji. Oczywiście można programować w taki najbardziej naiwny sposób w stylu (fold(map(filter x))) tylko czym to się różni od pradawnego programowania proceduralnego z funkcjami. Te dwie książki, o których pisałem są przeznaczone dla początkujących ale żeby je zrozumieć trzeba poświęcić dużo czasu. Przekazywanie rekurencyjne funkcji która kolekcjonuje wartości, reprezentacja obiektów za pomocą lambd, jakieś nieoczywiste abstrakcje Y-combinatory. To wszystko nadaje się na uczelnie/ do zabawy a nie do problemów prawdziwego życia. Programiści mają programować a nie uczyć się matematycznych teorii, rachunku lambda czy czego tam jeszcze.

vpiotr
Zdradź sekret, jak się zdobywa doświadczenie z książek?
DQ
  • Rejestracja:prawie 10 lat
  • Ostatnio:6 miesięcy
  • Postów:141
0
Srebrny Wąż napisał(a):

Mam doświadczenia z książek "Little Schemer" i "How to Design Programs". Wiele osób chyba myśli, że programowanie funkcyjne da im wolność i nie będą już musieli używać tych paskudnych obiektów i klas tylko łatwych do zrozumienia funkcji. Oczywiście można programować w taki najbardziej naiwny sposób w stylu (fold(map(filter x))) tylko czym to się różni od pradawnego programowania proceduralnego z funkcjami. Te dwie książki, o których pisałem są przeznaczone dla początkujących ale żeby je zrozumieć trzeba poświęcić dużo czasu. Przekazywanie rekurencyjne funkcji która kolekcjonuje wartości, reprezentacja obiektów za pomocą lambd, jakieś nieoczywiste abstrakcje Y-combinatory. To wszystko nadaje się na uczelnie/ do zabawy a nie do problemów prawdziwego życia. Programiści mają programować a nie uczyć się matematycznych teorii, rachunku lambda czy czego tam jeszcze.

Czyli tak de facto nie masz żadnego doświadczenia komercyjnego związanego z programowaniem funkcyjnym, a jednocześnie bezpośrednio uderzasz w cały paradygmat mówiąc, że nadaje się jedynie na uczelnie/do zabawy. Ma sens, weźmy na przykład takiego Netflix'a - jak powszechnie wiadomo, mała firemka skierowana głównie na marnowanie swoich zasobów poprzez wprowadzanie języków korzystających z paradygmatu, który do niczego się nie nadaje.

Wyprowadzając Cię z błędu, wiele osób nie myśli, że programowanie funkcyjne da im wolność i nie będą musieli używać obiektów i klas. Przykładowo taka Scala łączy oba paradygmaty i na rynku trzyma się całkiem dobrze, a wręcz ostatnimi czasy umacnia. Jedne problemy da się łatwiej rozwiązać w jednym paradygmacie, inne w drugim, nie ma na to reguły i złotego środka. Wiadomo za to, że nie bez powodu niektóre koncepty z programowania funkcyjnego przenikają do języków czysto obiektowych, na przykład Javy.

Lambdy są już dostępne w większości mainstreamowych językach, nie musisz stosować żadnych "nieoczywistych abstrakcji Y-combinatory", nie musisz znać żadnej matematycznej teorii czy "czego tam jeszcze". Można wykorzystywać Monady, Funktory czy inne Monoidy nie mając żadnych podstaw matematycznych. Inną kwestią jest to, że nie bez powodu mówi się, że programy napisane czysto funkcyjnie są łatwiejsze do utrzymania i rozwoju, oczywiście ten aspekt ma związek z tym, że duża część powstającego kodu obiektowego jest po prostu słaba jakościowo.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 4 godziny
1

Paradygmat funkcyjny można rozwinąć w absurdalnym kierunku, ale jednocześnie to samo można zrobić z paradygmatem obiektowym, np: https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition

Jaki jest sens wygrzebywania najbardziej absurdalnych przykładów dla danego paradygmatu i skreślania go na ich podstawie?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

vpiotr - Normalnie. Czytam książkę, rozwiązuję zadania przedstawionymi metodami i doświadczam różnicy między podejściem funkcyjnym a niefunkcyjnym. Myślę, że to lepsze niż branie przykładu z osób którym tylko się wydaje, że piszą funkcyjnie....

vpiotr
"Doświadczam" - w tym znaczeniu którego użyłeś słowo to stosuje się zwykle gdy bierze się jakieś psychotropy, grzybki lub przechodzi na wyższy poziom świadomości (bliżej Boga). Często stosujesz to słowo w programowaniu? Pytam poważnie, bo znam jednego byłego programistę a obecnie duszpasterza.
0
  1. Użyłem słowa doświadczenie bo tak było sformułowane pytanie "czy macie jakieś funkcyjne doświadczenia..."
  2. Tak czasami myślę jak by to było być księdzem.
  3. Nie biorę narkotyków.
vpiotr
Spoko, po prostu zwykle nikt nie określa "doświadczeniem" pracę z książkami.
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)