Java funkcyjnie. Materiały

Java funkcyjnie. Materiały
DKN
  • Rejestracja:ponad 4 lata
  • Ostatnio:7 miesięcy
  • Postów:128
0

Jakie materiały w postaci projektow, polecacie do funkcyjnej javy?


Z każdym dniem czuje się głupszym programista.
99xmarcin
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:2420
7

Radzę się uczyć od podstaw w lepszym języku, a dopiero potem wrócić do Javy. Haskell jest dobry do nauki na początek lub Scala.

Knigi co sam przeczytałem i daję stępel jakości:

  • Programming in Haskell by Graham Hutton
  • Functional Programming in Scala

W sumie nie ma tego dużo:

  • Niemutowalność
  • Rekurencja
  • Funkcje jako wartości
  • Funkcje wyższego rzędu i kombinatory
  • Typy wyższych rzędów, typy algebraiczne
  • Pattern matching, destructuring
  • fold right, fold left, persystentne struktury danych, nieskończone strumienie danych
  • Monoidy -> ... -> Monady wraz z przykładami: Option, Either, Try
  • Notacja do (w Haskellu) lub for comprehension (w Skali)
  • Efekty i transformery (czyli jak łączyć różne monady, oraz monady z Future)
  • Funkcyjne projektowanie aplikacji np. property based tests czy ukrywanie IO za monadą
  • Lenses
  • Free Monad
  • Continuation Passing Style

+- bo piszę z głowy. W Javie wiele z tego nie jest możliwe lub nie jest wygodne więc pozbywasz się połowy tematów.


Holy sh*t, with every month serenityos.org gets better & better...
jarekr000000
Dokładnie. Najłatwiej wejść w czysty haskell. Tyle, że jest pewien problem z tym powrotem do javy potem. Niby wiesz co robić tylko po jakimś czasie zaczynasz widzieć coraz mniej sensu. I to nie w fp... tylko w javie :/
jarekr000000
W sumie nie ma tego dużo : mistrz :-)
BA
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 2 miesiące
  • Postów:24
1

W Scali polecam Functional Programming Simplified, Alvin Alexander: https://www.amazon.com/Functional-Programming-Simplified-Alvin-Alexander-ebook/dp/B076J7CJKY

Moim zdaniem jest fajnie napisana, w przeciwieństwie do Functional Programming in Scala (tej czerwonej).

Do Haskella: https://www.amazon.com/Get-Programming-Haskell-Will-Kurt/dp/1617293768

SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 godziny
  • Postów:1427
4

Zanim ktoś inny rzuci to "Category Theory for Programmers" Bartosza Milewskiego. Co prawda nie Java i nie projekty, ale programowanie funkcyjne się zgadza.

TR
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:731
0

podpinam się pod @Saalin - wykłady Milewskiego nt. Category Theory

Wstępniak całkiem dobry, przez całość niestety nie przebrnąłem z braku odpowiednich trybików w głowie - czasem miałem wrażenie, że to o czym mówi to masło maślane, ale może się komuś przyda


musica curat corpus at animam
SA
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 2 lata
  • Postów:37
0

Cala seria "functional programming in ..." jest dobra i przystepna dla poczatkujacych w moim odczuciu.

Charles_Ray
  • Rejestracja:prawie 17 lat
  • Ostatnio:25 minut
  • Postów:1873
1

Programowanie funkcyjne w Javie to trochę jak driftowanie rowerem - naczytasz się o monadach, teorii kategorii, … a potem będziesz próbował to wcisnąć w smutny Javowy kodzik…

Niemniej fajnie jest nauczyć się czegoś nowego! Mi się bardzo podobał kurs ze Scali na Courserze, dzięki niemu nauczyłem się m.in. co to flatMap i nie straszyło mnie już to np. w RxJavie. Na pewno uczy to innego myślenia, co jest na plus. Kwestia zastosowania w Javie - raczej wyjdzie pokracznie i nieczytelnie.


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
4

Kwestia zastosowania w Javie - raczej wyjdzie pokracznie i nieczytelnie.

Niestety, tak właśnie jest.

Problem taki, że imperatywna alternatywa wychodzi czytelnie, tylko rzyga błędami na produkcji. Dodajmy do tego jeszcze nutkę magii, która nie ułatwia rozwiązywania i wykrywania problemów i mamy ładne piekiełko. Ale przynajmniej dobrze płatne.

Przy okazji - jako, że OP pytał o "projekty".
Mój przykład (server ponga) z czasów kiedy jeszcze wierzyłem w funkcyjną javę ( dawno i niedawno):
https://github.com/javaFunAgain/ratpong


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 3x, ostatnio: jarekr000000
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:5 minut
  • Postów:3539
4

@jarekr000000: prawie jestem pewien, że alternatywa funkcyjna nie rzyga błędami na produkcji tylko i wyłącznie dlatego, że jest popularna wśród ludzi, którzy ją znają i rozumieją. Kiedy Haskel trafi do mainstreamu i trafi ci się projekt napisany przez przysłowiowych Hindusów pod kierownictwem przysłowiowych niemieckich architektów to zobaczysz dziwy w kodzie i na produkcji, o których nie śniło się waszym ewangelistom.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1
wartek01 napisał(a):

Kiedy Haskel trafi do mainstreamu i trafi ci się projekt napisany przez przysłowiowych Hindusów pod kierownictwem przysłowiowych niemieckich architektów to zobaczysz dziwy w kodzie i na produkcji, o których nie śniło się waszym ewangelistom.

Musiałem docenić, bo to prawda. Ale teraz mam dylemat - czy powinienem zaprzestać tej funkcyjnej propagandy (fp) i promować pisanie imperatywne, po to aby w moim skromnym Haskellowo / Scalowym poletku nie zalęgli się seniorzy tylko z nazwy i germańscy architekci?


jeden i pół terabajta powinno wystarczyć każdemu
vpiotr
Tak
stivens
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
1

@wartek01: Dziury w logice biznesowej mozna wszedzie zrobic. Ale bledow z NPE, czy takich zwiazanych z AOP albo mutowalnoscia (i tak dalej i tak dalej), mozna uniknac zmieniajac jezyk.


λλλ
edytowany 3x, ostatnio: stivens
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:5 minut
  • Postów:3539
1

@jarekr000000: no ja jestem jednak idealistą i marzy mi się świat, w którym o dogmatach programowania (od "który paradygmat jest najlepszy" poprzez dyskusję o dobrych praktykach) dyskutuje się dopiero po ustaleniu takiej prozaicznej kwestii jak problem, jaki rozwiązujemy. Inne praktyki powinny obowiązywać przy przejmowaniu dużego molocha biznesowego, inne przy pisaniu aplikacji biznesowej od zera, inne przy pisaniu ogólnodostępnego API, a inne przy przetwarzaniu dużych ilości danych w czasie rzeczywistym.

FP samo w sobie uważam za fajne i faktycznie zbyt mało popularne - bo istnieje całkiem sporo problemów, które da się rozwiązać pisząc funkcyjnie lepiej niż pisząc np. imperatywnie. Fajnie by było, żeby ludzie mieli ten klucz z napisem "functional programming" w swojej skrzynce z narzędziami - bo jeśli ktoś nigdy z tym się nie zetknął to nigdy nie będzie wiedział, że tego można używać.

Natomiast nie lubię przedstawiania takiego jednego rozwiązania jako złotego młotka na wszystko. To doprowadzi do sytuacji w której ludzie usłyszą na konferencji "trzeba robić X bo Y tak mówił" przez co skończymy z jakąś inną formą idiotyzmu.

Zobacz pozostałe 60 komentarzy
stivens
@jarekr000000: nie ma takiej miejscowosci jak "Pcim Dolny" :P
p_agon
@jarekr000000: To moze cos zlozymy sami. Masz tu tego znak kąąąkatenacji + 1. Der Streit um die Bezeichnung 2. Mechaniker. 3. Provinzkaff lub Der Ort, wo der letzte Arsch scheißt. <psyduckFace>
stivens
@wartek01: a jakbym powiedzial JAVA w stylu "C z GC" (czyli inaczej niz np. JAVA w stylu FP) to bys sie mniej czepial? :) Bo trudno zeby jezyk dodajacy kolejnych abstrakcji (Kotlin) byl lepszy tam gdzie juz dostepnych abstrakcji jezyka sie unika i idzie w prymitywy itd.
KR
W Cassandrze to za bardzo FP nie ma. Jest mieszanka niewielkiej ilości w miarę ładnej obiektowej Javy z dużą domieszką Javy pisanej w stylu przypominającym C tj. typy proste, tablice, unikanie alokacji, surowe bufory z danymi, powtórne użycie obiektów, ręczne liczenie referencji, alokacja poza stertą itp. Wiele z tych rzeczy jest bardzo niebezpieczna i kod jest bardzo ciężki w utrzymaniu. Prawdopodobnie lepiej by to się pisało w C++ i dużo lepiej w Rust, ale tego tak łatwo nie da się już zmienić.
stivens
Javy z dużą domieszką Javy pisanej w stylu przypominającym C (...) Prawdopodobnie lepiej by to się pisało w C++ i dużo lepiej w Rust - o tym wlasnie mowilem :P
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:5 minut
  • Postów:3539
1

@stivens: błędów związanych z AOP można bardzo łatwo uniknąć - nie korzystając z bibliotek do AOP.

Co do NPE to temat na trochę szerszą dyskusję (zaczynając od tego czy null w ogóle jest potrzebny czy nie - IMO jest, pomimo tego, że zgadzam się z większością argumentów z Billion Dollar Mistake). Ale null-safety możesz mieć nie tylko w FP.

Zobacz pozostałe 2 komentarze
stivens
to jest wlasnie dziura w logice biznesowej
stivens
a wymuszenie obslugi jest krokiem naprzod
KR
Kompilator wymusza obsłużenie tego None blisko źródła jego wystąpienia. Null nie jest takie złe tylko dlatego że można zapomnieć je obsłużyć, ale bardziej dlatego że potrafi przeniknąć niezauważone przez kilka warstw i wyleźć w jakimś dziwnym miejscu i potem czasem trudno dojść skąd się wzięło.
stivens
@Krolik: None mozna pchac do gory bez problemu ale nie mozna tego zrobic cichaczem (trzeba w typie zaznaczyc)
stivens
Chociaz dobra. To co napisales wciaz ma sens bo otypowanie sygnatury funkcji w option to tez forma obslugi.
99xmarcin
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:2420
3

Ja to widzę tak, duże firmy pokroju Google prowadzą różnego rodzaju badania, nie wiem co by im szkodziło zrobić takie że N zespołów pisze w podejściu funkcyjnym, N w obiektowym, N w imperatywnym, a N jest grupą kontrolną - pracują jak zazwyczaj. Zespoły należałoby wcześniej przeszkolić w danym podejściu. Po roku można zmierzyć ilość bugów, problemów, szybkość dostarczania - zwłaszcza że przy skali Google można tym zespołom dać dokładnie te same systemy do napisania i potem load-balancować ruch po równo do nich wszystkich. Dałoby to przybliżony obraz który paradygmat jest lepszy.

W mojej opinii język ma spory wpływ na produktywność zwłaszcza gdy porównujemy C z Kotlinem.
Biblioteka standardowa (a zwłaszcza jej jakość oraz dokumentacja, StackOverflow) ma bardzo duży wpływ na produktywność.
Popularność, zwłaszcza ilość rozwiązanych problemów ma średni wpływ na produktywność (np. jak coś zapiąć w Maven'ie).
IDE, dbg, profilery oraz otoczka package/deploy ma niewielki wpływ na produktywność ale może podnieść komfort pracy (refactoringi).

Haskell vs Java: Haskell poza byciem super językiem przegrywa na wszystkich frontach, także przewiduje że dobry zespół haskellowców poległby w starciu ze światem rzeczywistym gdzie trzeba się wpiąć w AD, generować PDFy oraz zip'y z CSVkami, wpychać dane do MongoDB i rozpoznawać barcode'y.


Holy sh*t, with every month serenityos.org gets better & better...
Zobacz pozostałe 3 komentarze
99xmarcin
VB to '95 a co było wcześniej w czasach dosu, wszystkie biznesowe apki to C, C++ lub Pascal... A no i Smalltalk w sytuacji podobnej jak dzisaj Haskell
vpiotr
W czasach dosu to ofc TP
KR
Takie badania byłyby obarczone bardzo dużym błędem bo produktywność jest bardziej zależna od ludzi niż od technologii. Musiałbyś mieć po kilka zespołów niezależnie robiących w tej samej technologii żeby określić czy różnice są istotne statystycznie. Wystarczy że w zespole trafi się przypadkiem taki jeden kolega jak u nas, który pisze zero dokumentacji i wstawia while(true) i wychodzi breakiem i produktywność całego zespołu spada dwukrotnie i na to raczej nowoczesny język mało pomoże (taki typ nawet w Rust pewnie miałby unwrap w każdej linii).
99xmarcin
@Krolik: przy odpowiednio dużym N tego typu różnice powinny się zniwelować, zakładając rozkład normalny umiejętności programistycznych. Inaczej żadne badania psychologiczne dotyczące zespołów nie miały by sensu. A co do kolegi, wprowadźcie obowiązkowe code review i problem powinien się sam rozwiązać (no chyba że to architekt tak pisze)
KR
CR jest obowiązkowe, ale własnie recenzowanie kodu kolegi jest dość frustrujące. Ten while(true) to i tak pikuś, ale kolega robi bardzo niebezpieczne rzeczy czasem np. zwraca w publicznym API referencje do prywatnego bufora, który może być nadpisany kolejnym wywołaniem metody.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
2
0xmarcin napisał(a):

Haskell vs Java: Haskell poza byciem super językiem przegrywa na wszystkich frontach, także przewiduje że dobry zespół haskellowców poległby w starciu ze światem rzeczywistym gdzie trzeba się wpiąć w AD, generować PDFy oraz zip'y z CSVkami, wpychać dane do MongoDB i rozpoznawać barcode'y.

To ostatnie to biblioteki. I ma to faktycznie duży wpływ. Obecne w haskellu znajdziesz biblioteki do wszystkiego (https://hackage.haskell.org/package/HPDF).
Niestety bardzo często są to biblioteki słabej jakości - brakuje dokumentacji, ficzerów i często mają źle zrobiony build (przez to się robi dependency hell).

To jest główny szok kulturowy po przejściu z Javy (tu akurat Kotlin, Scala i inne jvm mają tą przewagę, że nadal biblioteki javowe działają).

Tym niemniej, tu Haskell był wymieniony w kontekście uczenia się fp - to nadal IMO najprostsza droga.
Produkcyjny haskell i problemy to inna historia (u mnie działa :-), ale nie jest tak, że wszystko jest piękne - nawet sam język ma baaaardzo słabe punkty).

duże firmy pokroju Google prowadzą różnego rodzaju badania, nie wiem co by im szkodziło zrobić takie że N zespołów pisze w podejściu funkcyjnym, N w obiektowym, N w imperatywnym, a N jest grupą kontrolną - pracują jak zazwyczaj.

Moim zdaniem jest za duża wariancja - N musiałoby być potężne. Jak założymy, że mają robić projekty "kontrolne" to koszt się robi kosmiczny.
Ileś razy widziałem zespoły, które zatrzymały się na dewelopmencie z powodu kompletnie małego wypadku, technicznego lub nawet organizacyjnego.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
99xmarcin
Google ma obecnie 140k pracowników + kontraktorzy, jakby 200 osób (N około 10) brało udział w badaniu które w przyszłości może przynieść znacznie więcej zysku to IMHO opłaca się...
jarekr000000
N = 10 dla takiego problemu brzmi niestety zabawnie :/ - pomijając problem, że trudno izolować zespoły pracujące dłużej nad tym samym problemem - spotkają się na stackoverflow.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Większość książek o funkcyjnej Javie to tak naprawdę książki o Javie 8 - czyli o streamach i lambdach.
Wyjątkiem jest https://www.manning.com/books/functional-programming-in-java
w której autor tworzy własny DSL na potrzeby FP. Trochę poszerza horyzonty, ale jak wspomniano wyżej podejrzewam że na produkcji komunikaty błędów będą przy takim DSL nie do ogarnięcia.
Jakąś nadzieję budzi to: https://leanpub.com/functional-java-with-vavr
ale jeszcze nie czytałem.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
0
vpiotr napisał(a):

w której autor tworzy własny DSL na potrzeby FP. Trochę poszerza horyzonty, ale jak wspomniano wyżej podejrzewam że na produkcji komunikaty błędów będą przy takim DSL nie do ogarnięcia.

Trochę mit.

  1. ludzie potrafią ogarnąć czasem stack trace ze springa z hibernatem - gdzie masz kilkaset linijek (o ile nie utnie) i żadna z nich z twojego kodu (lubię ten przypadek),
  2. wszelkie reactory, rxjavy itp - podorabiały się dobrego supportu do diagnostyki i debugu. Problem jest naprawialny, ale oczywiście w naiwnie zrobionej bibliotece - na potrzeby akademickie - jakieś tam problemy będą.

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
vpiotr
Oczywiście że naprawialny. Tylko komu się chce?
jarekr000000
@vpiotr: widocznie gościom z rxjavy czy reactora.
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:5 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
vpiotr napisał(a):

Większość książek o funkcyjnej Javie to tak naprawdę książki o Javie 8 - czyli o streamach i lambdach.

Wyjątkiem jest https://www.manning.com/books/functional-programming-in-java
w której autor tworzy własny DSL na potrzeby FP. Trochę poszerza horyzonty, ale jak wspomniano wyżej podejrzewam że na produkcji komunikaty błędów będą przy takim DSL nie do ogarnięcia.
Jakąś nadzieję budzi to: https://leanpub.com/functional-java-with-vavr
ale jeszcze nie czytałem.

Ten magiczny DSL to trochę pokręcona wariacja na temat vavra (czy javaslang jak to się chyba wtedy nazywało) jedyne co było tam strasznie magicznego to tool do robienia rekurencji na stercie zamiast na stosie :D ale powinno udać się zrobić sensowne logowanie dla czegoś takiego. To jednak tylko lista wywołań lambd zapisana na stercie
Bardziej bym się przejmował czy produkcyjny GC wytrzyma te wszystkie haskellowe kombinacje które proponował w tej książce :P


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
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4706
1
KamilAdam napisał(a):

Bardziej bym się przejmował czy produkcyjny GC wytrzyma te wszystkie haskellowe kombinacje które proponował w tej książce :P

Ja mam trochę takiego kodu ostro zakręconego - funkcyjny do zarypania kotlin + reactor i np. mielenie tysięcy PDFów lub jakichś koszmarnych XMLi. Działa ok, choć były momenty kiedy walczyłem żeby zmieścić się w RAM na serwerze.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
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)