Omezená dědičnost (je něco lepšího než OOP?)

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #345 kdy: 15. 09. 2015, 09:35:32 »
To je podstata problému. Na vině je funkcionální notace a na ní naroubovaná imperativní notace jako if, while a podobně. Pokud někdo objeví notaci, která bude vypadat přirozeně, FP se rozšíří.
Tomuhle nerozumím, jaké "naroubované if, while"?! Co je na existující notaci špatného? A co je na ní "nepřirozeného"? Například zápis funkcí jako samostatných entit pomocí pattern matchingu mi teda přijde tisíckrát srozumitelnější než různě vnořené ify a smyčky...

Naděje vkládané do FP, ale mohou být liché, protože se v této technologii nerealizují a hlavně neudržují rozsáhlé reálné projekty běžící desítky let. Každý program do 100 řádků vypadá elegantně a je krásný. Horší je to, když už má těch řádků více. Vyjadřovací schopnosti programovacích jazyků nejsou na úrovni textu prózy, ale na úropvni čtení básní, proto i struktura textu je důležitá. A FP jazyky ji mají přímo katastrofální.
Tak to třeba pro Erlang není vůbec pravda.


v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #346 kdy: 15. 09. 2015, 09:36:37 »
... A FP jazyky ji mají přímo katastrofální.

citation needed

Stačí se podívat na pár desítek řádků FP kódu. K čemu citace, k tomu stačí vlastní úsudek.

viděl jsem jich desetitisíce a nesouhlasím s vámi, zkuste nevydávat dojmy za fakta

v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #347 kdy: 15. 09. 2015, 09:38:44 »
Vyjadřovací schopnosti programovacích jazyků nejsou na úrovni textu prózy, ale na úropvni čtení básní, proto i struktura textu je důležitá. A FP jazyky ji mají přímo katastrofální.

Zrovna napr. takovy Haskell dost lidi povazuje za prekrasny jazyk - lze strucne a vystizne zapsat slozite myslenky. Samozrejme pokud si nekdo pod hezkym kodem programu predstavuje co nejvice nevyznamoveho balastu (Java/Python), pak je IMO neco spatne.

na druhou stranu, !#$%&*+./<=>?@ je v haskellu validní identifikátor operátoru

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #348 kdy: 15. 09. 2015, 09:45:11 »
Vyjadřovací schopnosti programovacích jazyků nejsou na úrovni textu prózy, ale na úropvni čtení básní, proto i struktura textu je důležitá. A FP jazyky ji mají přímo katastrofální.

Zrovna napr. takovy Haskell dost lidi povazuje za prekrasny jazyk - lze strucne a vystizne zapsat slozite myslenky. Samozrejme pokud si nekdo pod hezkym kodem programu predstavuje co nejvice nevyznamoveho balastu (Java/Python), pak je IMO neco spatne.

na druhou stranu, !#$%&*+./<=>?@ je v haskellu validní identifikátor operátoru

A hkjfsdlhgskdjlh3weu5r983w je validni jmeno skoro vsude ;)

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #349 kdy: 15. 09. 2015, 09:47:37 »
na druhou stranu, !#$%&*+./<=>?@ je v haskellu validní identifikátor operátoru
A cmfghenrtveqtklwmebwfdmgyfwvbelbnvuhmwdfrlyntwgmfrdyfvjhwr je validní jméno snad ve všech existujících jazycích. Má smysl nějak omezovat kreativitu u operátorů, když u jmen to nikoho ani nenapadne? Vždyť to neomezili ani v Javě :) Napadá tě nějaký příčetný způsob, jak by se dala omezit nechtěná kreativita u libovolných identifikátorů?


v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #350 kdy: 15. 09. 2015, 09:53:08 »
na druhou stranu, !#$%&*+./<=>?@ je v haskellu validní identifikátor operátoru
A cmfghenrtveqtklwmebwfdmgyfwvbelbnvuhmwdfrlyntwgmfrdyfvjhwr je validní jméno snad ve všech existujících jazycích. Má smysl nějak omezovat kreativitu u operátorů, když u jmen to nikoho ani nenapadne? Vždyť to neomezili ani v Javě :) Napadá tě nějaký příčetný způsob, jak by se dala omezit nechtěná kreativita u libovolných identifikátorů?

tohle je samozřejmě validní námitka, můžu jenom dodat, že alfanumerické identifikátory neprovokují kreativitu tak jako přílišná volnost u operátorů, je to vidět na všelijakých EDSL (sám se taky občas neudržím)

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #351 kdy: 15. 09. 2015, 09:53:59 »
Vyjadřovací schopnosti programovacích jazyků nejsou na úrovni textu prózy, ale na úropvni čtení básní, proto i struktura textu je důležitá. A FP jazyky ji mají přímo katastrofální.

Zrovna napr. takovy Haskell dost lidi povazuje za prekrasny jazyk - lze strucne a vystizne zapsat slozite myslenky. Samozrejme pokud si nekdo pod hezkym kodem programu predstavuje co nejvice nevyznamoveho balastu (Java/Python), pak je IMO neco spatne.

Složité myšlenky se špatně udržují, proto se do reálné praxe nehodí. I reálné algoritmy v živé přírodě, které vznikly díky evoluci, nejsou ve své podstatě složité a jsou složeny z interakce jednoduchých elementů. A nejen tam. Například úplný soubor logických funkcí tvoří Shefferova funkce. No až v Haskellu nebude if a nebo while, tedy imperativní prvky, pak možná bude čitelný a elegantní :-) Zaměnit if a : y za y = if a : c moc elegantní není. Z hlediska čitelnosti programu je to katastrofa, protože se vám tam vynořuje to c, a musíte hledat, o co vlastně jde. Jistě u programu o 10 řádcích to problém není, problém to už je, když těch řádků jsou tisíce. Navíc, abyste někdy v budoucnosti mohl modifikovat to c, musíte dojít až k jeho zdroji, a zpětně prohledávat řetězy transformací imutable objektů, protože to c máte samozřejmě použito ve více místech programu a změnit ho potřebujete jen v jednom místě. Přidání modifikačního dekorátoru v místě použití situaci neřeší. Jen systém znepřehledňuje.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #352 kdy: 15. 09. 2015, 10:06:21 »
To je podstata problému. Na vině je funkcionální notace a na ní naroubovaná imperativní notace jako if, while a podobně. Pokud někdo objeví notaci, která bude vypadat přirozeně, FP se rozšíří.
Tomuhle nerozumím, jaké "naroubované if, while"?! Co je na existující notaci špatného? A co je na ní "nepřirozeného"? Například zápis funkcí jako samostatných entit pomocí pattern matchingu mi teda přijde tisíckrát srozumitelnější než různě vnořené ify a smyčky...

Naděje vkládané do FP, ale mohou být liché, protože se v této technologii nerealizují a hlavně neudržují rozsáhlé reálné projekty běžící desítky let. Každý program do 100 řádků vypadá elegantně a je krásný. Horší je to, když už má těch řádků více. Vyjadřovací schopnosti programovacích jazyků nejsou na úrovni textu prózy, ale na úropvni čtení básní, proto i struktura textu je důležitá. A FP jazyky ji mají přímo katastrofální.
Tak to třeba pro Erlang není vůbec pravda.

if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.

v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #353 kdy: 15. 09. 2015, 10:10:54 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.

citation needed

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #354 kdy: 15. 09. 2015, 10:12:58 »
Koukam, ze Ivan ma vzdy politicky co? Jasno, soudruzi.

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #355 kdy: 15. 09. 2015, 10:14:25 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While se ve FP taky moc nevyskytuje, leda tak něco, co ho hodně vzdáleně připomíná. Funkcionální if (funkce podobná operátoru ?:) není nic roubovaného, ale naprosto plnohodnotný prvek FP.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #356 kdy: 15. 09. 2015, 10:15:48 »
Složité myšlenky se špatně udržují, proto se do reálné praxe nehodí.
Takze misto napr. flatMap a foreach na jeden radek davate prednost ciste imperativnimu pristupu - ukecany cyklus na nekolik radku? Vzdyt to nic neprinasi, jen delsi kod. Nevim, prijde mi, ze slozite myslenky se lepe transformuji na jednoduche ve FP - mam nekolik funkci ktere postupne vstup zpracuji. V imperativnim programovani to casto skonci velkou metodou s nekolika vnorenymi cykly.

I reálné algoritmy v živé přírodě, které vznikly díky evoluci, nejsou ve své podstatě složité a jsou složeny z interakce jednoduchých elementů. A nejen tam. Například úplný soubor logických funkcí tvoří Shefferova funkce. No až v Haskellu nebude if a nebo while, tedy imperativní prvky, pak možná bude čitelný a elegantní :-) Zaměnit if a : y za y = if a : c moc elegantní není. Z hlediska čitelnosti programu je to katastrofa, protože se vám tam vynořuje to c, a musíte hledat, o co vlastně jde. Jistě u programu o 10 řádcích to problém není, problém to už je, když těch řádků jsou tisíce. Navíc, abyste někdy v budoucnosti mohl modifikovat to c, musíte dojít až k jeho zdroji, a zpětně prohledávat řetězy transformací imutable objektů, protože to c máte samozřejmě použito ve více místech programu a změnit ho potřebujete jen v jednom místě. Přidání modifikačního dekorátoru v místě použití situaci neřeší. Jen systém znepřehledňuje.

No, abych byl uprimny tak se moc nechytam. c? Kdyz jsem delal tu chvilku v Haskellu, tak v tymu byla snaha mit funkce co nejkratsi a nejstrucnejsi, idealne vzdy s tim typovym zapisem (ten projektik presahl tisic radek urcite). Navic FP je snad zalozeno na tom, ze mame jasny vstup a vystup, vse bez vedlejsich efektu, jak se tedy c muze nekde ztracet?

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #357 kdy: 15. 09. 2015, 10:18:24 »
tohle je samozřejmě validní námitka, můžu jenom dodat, že alfanumerické identifikátory neprovokují kreativitu tak jako přílišná volnost u operátorů, je to vidět na všelijakých EDSL (sám se taky občas neudržím)
No přiznejme si, že jmen za které bych autorovi otloukl hlavu o klávesnici, se vyskytuje taky dost :)

Ale je to pravda, svádí to. Možná i tím, že to ještě není tak prošláplé.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #358 kdy: 15. 09. 2015, 10:23:08 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While se ve FP taky moc nevyskytuje, leda tak něco, co ho hodně vzdáleně připomíná. Funkcionální if (funkce podobná operátoru ?:) není nic roubovaného, ale naprosto plnohodnotný prvek FP.
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu. if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.

v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #359 kdy: 15. 09. 2015, 10:25:48 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While se ve FP taky moc nevyskytuje, leda tak něco, co ho hodně vzdáleně připomíná. Funkcionální if (funkce podobná operátoru ?:) není nic roubovaného, ale naprosto plnohodnotný prvek FP.
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu. if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.

tak příklad:
poděl :: Integer -> Integer -> Maybe Integer
poděl a b = if b == 0 then Nothing else Just (a/b)

co je na tom nefunkcionálního?