Funkcionální jazyky.

Kit

Re:Funkcionální jazyky.
« Odpověď #45 kdy: 19. 08. 2015, 09:31:22 »
Tolik zbytečných slajdů (přes 70?) o zbytečnosti getterů/setterů/properties, to je opravdu výkon, čekal bych, že se tam dozvím něco zajímavějšího než mlácení slámy. Ale co taky čekat od lidí ze světa C#, že?

Prolistování těch slajdů mi zabralo méně času, než shlédnutí průměrného hollywoodského filmu, takže toho nelituji. Vlastně mi ani nevadilo, že se to týkalo C#, protože se to dá aplikovat i na Javu či PHP. Dobře jsem se zasmál, když jsem místo ":" uviděl "=". Jen aby to nevypadalo jako Python :)

Citace
Citace
Silně mi připomíná můj vlastní metajazyk, který jsem si napsal pro Vim a který mi napsaný text (ne nepodobný C# light) on-line překládá do konkrétního programovacího jazyka.
Taky jsem o něčem takovém uvažoval, dokonce bych si rád napsal vlastní dokonalý jazyk, asi jako každý programátor :-) Ale zatím na to nedošlo.

Zkusil jsem si už hodně svých "dokonalých jazyků", než jsem přišel k závěru, že nejlepší bude ho naučit svůj editor. I když bude ten metajazyk sebeošklivější, stále budu vidět na obrazovce výsledný kód a ušetří mi to hledání spousty zbytečných syntaktických chyb. Také ho mohu kdykoli modifikovat, aniž bych tím ohrozil dříve napsané aplikace.

Citace
Pro Javu existuje Lombok, který ti psaní getterů/setterů a spousty dalších věcí ušetří (logovače, toString, líné gettery atd.).

Víš dobře, že getterům/setterům se vyhýbám. Jsou to jen berličky pro programátory, kteří neumí psát objektově. Makro pro metodu toString() mám přetíženo pro všechny mnou používané jazyky - stačí jen napsat ",S" a vygeneruje mi to kostru metody ve správné syntaxi. Na tom je vidět, kolik balastu v zápisu je. Jenže proč je tam ten balast? Aby se nám to dobře četlo. Pokud si někdo do programu narve hromadu zbytečných komentářů, tak se nemůže divit, že je stěží čitelný. I bez komentářů se program v Javě či PHP dá docela dobře číst.

V Lispu se komentáře dají rozumně psát pouze mezi funkcemi - i proto bývají užitečnější než v C-like jazycích, ve kterých ten syntaktický balast nese roli komentářů. Skutečné komentáře v C-like jazyku mají vlastně jen jednu roli: Ukazují, že zde je chyba, kterou je nutné opravit.


k

Re:Funkcionální jazyky.
« Odpověď #46 kdy: 19. 08. 2015, 09:31:52 »

Tam jsou víceméně mírné vylepšení, ve těch slajdech jsou zásadní jiné věci.

Podívej se na autora těch slajdů

Po shlédnutí slajdů jsem si jist že to nikdy neudělám.

Radek Miček

Re:Funkcionální jazyky.
« Odpověď #47 kdy: 19. 08. 2015, 09:41:51 »

Tam jsou víceméně mírné vylepšení, ve těch slajdech jsou zásadní jiné věci.

Například?

k

Re:Funkcionální jazyky.
« Odpověď #48 kdy: 19. 08. 2015, 09:47:23 »

Vy to nevidíte sám rovnou a musíte se ptát ? :o To jste mě tedy zklamal. Namátkou strany 20, 24, 28, 49

Radek Miček

Re:Funkcionální jazyky.
« Odpověď #49 kdy: 19. 08. 2015, 10:24:14 »

Vy to nevidíte sám rovnou a musíte se ptát ? :o To jste mě tedy zklamal. Namátkou strany 20, 24, 28, 49

Říkáte, že ve slajdech jsou zásadní jiné věci, ale dal jste odkaz na slajdy 20 a 24, které jsou součástí návrhu C# 7 - viz Proposal: Pattern matching and record types. Dokonce změna ze slajdu 24 (primární konstruktor) byla původně plánována pro C# 6, ale nakonec byla odebrána.


k

Re:Funkcionální jazyky.
« Odpověď #50 kdy: 19. 08. 2015, 10:55:20 »
Říkáte, že ve slajdech jsou zásadní jiné věci, ale dal jste odkaz na slajdy 20 a 24, které jsou součástí návrhu C# 7 - viz Proposal: Pattern matching and record types. Dokonce změna ze slajdu 24 (primární konstruktor) byla původně plánována pro C# 6, ale nakonec byla odebrána.

Tak to mi uniklo to uznávám. Je vidět že se jim p. konstruktory ve C# 6 nezamlouvají, jak se dalo čekat a dali to k ledu.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #51 kdy: 19. 08. 2015, 13:26:07 »
Víš dobře, že getterům/setterům se vyhýbám. Jsou to jen berličky pro programátory, kteří neumí psát objektově.

Budeš řvát jak opařená kočka až jednou, za mnoho let zjistíš, že opravdově objektově je to právě s těmi gettery.

Kit

Re:Funkcionální jazyky.
« Odpověď #52 kdy: 19. 08. 2015, 14:22:54 »
Víš dobře, že getterům/setterům se vyhýbám. Jsou to jen berličky pro programátory, kteří neumí psát objektově.

Budeš řvát jak opařená kočka až jednou, za mnoho let zjistíš, že opravdově objektově je to právě s těmi gettery.

Co je na getterech, setterech a public atributech tak opravdu objektového?

Re:Funkcionální jazyky.
« Odpověď #53 kdy: 19. 08. 2015, 14:48:59 »
Co je na getterech, setterech a public atributech tak opravdu objektového?

To je porad dokola - je to moznost, jak zapouzdrit. Casto to neni dobry navrh ale samo o sobe to nic proti OOP neni.

Kit

Re:Funkcionální jazyky.
« Odpověď #54 kdy: 19. 08. 2015, 14:53:43 »
Co je na getterech, setterech a public atributech tak opravdu objektového?

To je porad dokola - je to moznost, jak zapouzdrit. Casto to neni dobry navrh ale samo o sobe to nic proti OOP neni.

To je pořád dokola - nic z toho se nechová objektově. Copak se ptám psa, jak mám za něho štěkat? To je getter.

Kid

Re:Funkcionální jazyky.
« Odpověď #55 kdy: 19. 08. 2015, 14:59:26 »
Co je na getterech, setterech a public atributech tak opravdu objektového?

Getter a setter jsou běžné metody objektu. Zakázat možnost z venku měnit členské proměnné přímo a donutit místo toho volat nějakou metodu je hlavní způsob jak udržet objekt v konzistentním stavu.
Jiná možnost je neustále při každé změně vyrábět novou instanci a řešit to v konstruktoru, to ale není vůbec praktické.

To je pořád dokola - nic z toho se nechová objektově. Copak se ptám psa, jak mám za něho štěkat? To je getter.

Psa se ptáš kolik má blech a zda má obojek nebo nemá. Štěkat zvládne sám.

BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:Funkcionální jazyky.
« Odpověď #56 kdy: 19. 08. 2015, 15:00:01 »
Co je na getterech, setterech a public atributech tak opravdu objektového?

To je porad dokola - je to moznost, jak zapouzdrit. Casto to neni dobry navrh ale samo o sobe to nic proti OOP neni.

To je pořád dokola - nic z toho se nechová objektově. Copak se ptám psa, jak mám za něho štěkat? To je getter.

To je kravina. Getter je když se ptáš psa, jakou má barvu chlupů. Nebo jestli je mu zima. Nebo jestli má hlad. Prostě cokoliv, co ten pes z principu ví lépe než okolí. Schopnost štěkat není (nemusí být) getter.

perceptron

Re:Funkcionální jazyky.
« Odpověď #57 kdy: 19. 08. 2015, 15:09:18 »
uz je to tady, uz se to roztaci. jako kazdou stredu, jako kazdy patek.

http://i.imgur.com/LqAU25T.png

Kit, uz ste vymysleli priklady na vasu ohromnu architekturu? vase predosle priklady boli total fail.


perceptron

Re:Funkcionální jazyky.
« Odpověď #58 kdy: 19. 08. 2015, 15:09:59 »
debata sa opakuje, obrazky sa musia tiez

Kit

Re:Funkcionální jazyky.
« Odpověď #59 kdy: 19. 08. 2015, 15:10:52 »
Getter a setter jsou běžné metody objektu. Zakázat možnost z venku měnit členské proměnné přímo a donutit místo toho volat nějakou metodu je hlavní způsob jak udržet objekt v konzistentním stavu.
Jiná možnost je neustále při každé změně vyrábět novou instanci a řešit to v konstruktoru, to ale není vůbec praktické.

Problémem getterů a setterů je, že nejsou polymorfní. Pokud budu mít ve třídě Article metodu setTitle(), tak taková metoda se mi vůbec nehodí ve třídě Person či Store. Nemohu tedy použít stejné rozhraní.

Citace
To je pořád dokola - nic z toho se nechová objektově. Copak se ptám psa, jak mám za něho štěkat? To je getter.

Psa se ptáš kolik má blech a zda má obojek nebo nemá. Štěkat zvládne sám.

Hmm. A co mi ten pes odpoví na otázku, kolik má blech, když neumí mluvit? Proč bych se ho měl ptát, zda má obojek? To mi přece k ničemu není. Prostě ho připnu na vodítko. Pokud nemá obojek, vyhodí výjimku.

Nechme toho, bavíme se tu o funkcionálních jazycích.