-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Funkcionální programování - notebook #38
Comments
Ahoj! Já si při čtení stále kladl zásadní otázku: Pro koho ten text píšeš? Vyřešíš-li tuhle otázku, přijde další: Jak jako čtenář poznám, že text je pro mně, t.j. že mu budu rozumět a zároveň mi něco nového dá? |
Ahoj, V podstatě jsem chtěl demonstrovat principy FP na jednoduchých příkladech. Co se týče znalostí, matematika je spíš středoškolská, nějaké základy algoritmizace jsem u programátorů předpokládal a Python alespoň na mírně pokročilé úrovni. Ještě jednou díky za čas. Zkusím se nad tím zamyslet. Budu jen rád za nějakou zpětnou vazbu. |
Ahoj. :-) Přijde mi, že je potřeba si nejprve stanovit cílovku, jak už psal @encukou, a podle toho text přizpůsobit. Osobně, jestli jde o ukázání FP Pythonistům, držel bych se Pythonových konvencí a snažil se maximálně najít různé real-life ukázky, jak se řeší s OOP a jak je lze vyřešit elegantněji s FP technikami dostupnými v Pythonu. Pokud jde o ukázání FP obecně, nejsem si jist, zda je Python správnou volbou. Ale na to bude mít každý jiný názor a já jsem ovlivněn tím, že mám rád Haskell. Minimálně bych byl rád, aby se nepřekládaly zavedené pojmy. Například ryzí mi docvaklo hned, ale objekty první třídy mi trvalo déle, cože to vlastně je. :-) Mimochodem mohu doporučit jednu ukázku, která lze použít vhodně v běžném Pythonu a použil jsem před pár dny. Využít více deklarativní styl. Například řekněme, že máme list nějakých instancí a pro každý typ je třeba zavolat nějakou funkci ke zpracování. Někdo by mohl napsat takto: def process(item):
if item.type == 'a':
process_a(item)
elif item.type == 'b':
process_b(item)
... Kdežto například v Haskellu by šlo napsat hezky deklarativně: process item@(Item 'a' _) = ...
process item@(Item 'b' _) = ...
... Tedy bez nutnosti psát pomocnou metodu s dlouhou podmínkou. V Pythonu se lze deklarativnímu přístupu přiblížit třeba takto: ITEM_TYPE_TO_PROCESS_FUNCTION = {
'a': process_a,
'b': process_b,
}
def process(item):
ITEM_TYPE_TO_PROCESS_FUNCTION[item.type](item) Samozřejmě to lze, v případě že známe dobře možné typy, udělat plně dynamické. Ale to je pak na posouzení, zda to za to stojí, neb v Pythonu se bude případný bug ladit blbě. Haskell naopak zařve, pokud nevyřešíme všechny možnosti. |
Určitě děkuji za další připomínku. Moc si toho vážím. Pokud jde o cílovou skupinu, pak v podstatě mi šlo o osvětu. :) Lidé neví, co si pod pojmem funkcionálním představit a na rootu jsem viděl dokonce komentář, ve kterém si kdosi zjevně pletl funkcionální s procedurálním a nenašel se nikdo, kdo by ho opravil :) Co se týče překládání, tam bude se mnou těžké pořízení, protože se usilovně snažím vyhýbat se programátorské angločeštině. Považuji to za část osvěty používat svůj rodný jazyk. Nicméně, většinu pojmů jsem nepřekládal já, ale použil jsem české výrazy z akademického prostředí, které jsem našel na netu, takže by mělo jít (alespoň doufám) o korektní překlady. Já osobně bych nikdy nepřeložil closures jako uzávěry, ale zřejmě jde o uznávaný překlad. Takže z mojí strany nejde o lidovou tvořivost. Ale i tak je to někdy na facku :) Pokud byste znali správnější či užívanější termín technicus, klidně mne opravte. Haskell je sice FP jazyk, ale na druhou stranu vysvětlovat Haskellistům, co je to funkcionální programování bych považoval ze své strany za drzost. :) Co se týče příkladů, jde mi spíš o filosofii FP než další návod, jak naprogramovat bojovníka v aréně funkcionálně :) Budu jen rád za další připomínky. Když vás něco napadne, klidně to hoďte do issue. Na pythoní switch jsem pravděpodobně buď zapomněl anebo jsem tím nechtěl komplikovat zápis funkce. Ale samozřejmě souhlasím, že v oblasti ADT nebo pattern matchingu (kristepane, jak je to česky!) Python zrovna neexceluje. Ale aspoň se konečně objevily enumerátory, když už nic. Všiml jsem si totiž, že elegantní řešení nováčky nebo ty, co programují v jiném jazyce, spolehlivě matou. Proto úmyslně používám triviální příklady - a i tak si nejsem jistý, na kolik budou pro všechny srozumitelné. Ještě jednou díky. |
Myslím, že použité české názvy jsou v pohodě. Spíš obecně nemám rád překládání, neb pak je těžší přejít do anglického (či českého) textu. Aspoň pro mne. :-) K tomu Haskellu – nemyslel jsem to tak, aby se FP vysvětlovalo Haskellistům, ale tak, že z osobní zkušenosti mi nepřijde těžké jako nováček číst kód Haskellu a pochopit koncepty. Naopak to je po rychlém vysvětlení jednoduché, těžké mi přišlo začít přemýšlet funkcionálně, místo objektově, a správně to použít. Každopádně je super, že se někdo snaží dělat osvětu. FP je skvělé a na některé typy úloh mnohem vhodnější, tudíž by nemělo chybět v dovednostech programátorů. Sám chci o FP psát, ale není čas. Snad se ti osvěta povede a nebudu tak často narážet na objekty, kde nemají co hledat. :-) |
Ahoj, Pokud bys chtěl jakkoliv přispět (nebo kdokoliv), není problém. Jak se ten notebook rozrůstá, začínám uvažovat, že bych časem použil vhodnější formu, buď v markdownu nebo rst, rozdělenou do kapitol. Takže by neměl být problém upravit nebo přidat nějaký kratší nebo delší text do repozitáře. |
BTW znáte http://www.meetup.com/Lambda-Meetup-Group/ ? Ti, přijde mi, se 2016-08-24 12:48 GMT+02:00 hanpari notifications@github.com:
|
Co se týče formy, tak ideálně to dotlačit do takové formy, která by šla 2016-08-24 13:48 GMT+02:00 Honza Javorek mail@honzajavorek.cz:
|
Jo, rst a Sphinx mi přijde jako dobrý nápad. |
naucse bude nakonec v HTML. ReST nebo Jupyter Notebook tam půjdou dát taky. |
Děkuji všem za podněty. Vytvořil jsem repozitář tady: Tohle issue uzavírám a rád bych poprosil všechny, aby případné náměty, připomínky směřovali tam. Ještě jednou díky. |
jak psal @honzajavorek o skupine venujici se funkcionalnimu programovani, organizuje to @danskarda - myslim, ze by bylo dobre s nimi spojit sily. priznavam se, ze jsem na text zatim moc nekoukal, ale rozhodne souhlasim s ujasnenim si ciloveho publika. plus prvni veta "Přiznejme si, že funkcionální programování je svinstvo" me mozna trosku zaskocila ;)). |
:) Myslím, že jsem nechtěl začínat jako každá druhá funkcionální propaganda. Jak je FP skvělé a kdesi cosi... Všiml jsem si, že to stejně nezabírá. :) Jinak samozřejmě díky za čas. Doufám, že ten šok rozdýcháš :) Co se týče té skupiny - všiml jsem si, že k ní patří i K. Čížek. (Mimochodem, doporučuji jeho blog funkcionalne.cz). Netroufám si posoudit, do jaké míry by pro ně mohl být zajímavý projekt o pythoním FP, když jejich hlavní doménou, alespoň co jsem si všiml, jsou Scala a Clojure. Oprava Hm, Python chybí. |
To zní jako výzva pro tebe ;) |
Ahoj všichni,
jak už jsem psal Honzovi, svého času jsem začal psát notebook o FP, který je tady:
https://github.com/hanpari/veledatacz/blob/master/funkcionalne.ipynb
Nevím, zda za to stojí, ale pokud by to někdo chtěl posoudit, zda na té věci dál pracovat (ve smyslu, že by byla užitečná pro komunitu), budu jen rád.
Upozorňuji, že notebook je v syrovém a nedodělaném stavu. :)
The text was updated successfully, but these errors were encountered: