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

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #360 kdy: 15. 09. 2015, 10:26:16 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?


JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #361 kdy: 15. 09. 2015, 10:31:24 »
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.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
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.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #362 kdy: 15. 09. 2015, 10:32:02 »
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.

Nechápu. Nicméně každý if c then a else b můžete mechanicky nahradit funkcí λc.c a b, kde true je definováno jako λx y.x a false jako λx y.y

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #363 kdy: 15. 09. 2015, 10:32:16 »
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?
Ale přináší, přináší to možnost lepšího testování a snadnější lokalizaci chyby.

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #364 kdy: 15. 09. 2015, 10:33: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.

Nechápu. Nicméně každý if c then a else b můžete mechanicky nahradit funkcí λc.c a b, kde true je definováno jako λx y.x a false jako λx y.y

Voláním c a b, nikoliv funkcí.


Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #365 kdy: 15. 09. 2015, 10:40:13 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?

Protože if je činnost, nikoliv funkce. Chápete-li ji funkcionálně, tedy jako přiřazení, je to přiřazení příliš široce definované. Předem nevíte s čím budete pracovat, její definice je příliš široká a univerzální. Tím se ztrácí výhoda FP programování.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #366 kdy: 15. 09. 2015, 10:41:47 »
Protože if je činnost, nikoliv funkce. Chápete-li ji funkcionálně, tedy jako přiřazení, je to přiřazení příliš široce definované. Předem nevíte s čím budete pracovat, její definice je příliš široká a univerzální. Tím se ztrácí výhoda FP programování.
To je teda pěkná blbost.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #367 kdy: 15. 09. 2015, 10:44:29 »
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.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
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.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
c = a + b
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #368 kdy: 15. 09. 2015, 10:45:56 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?

Už toho trolla, přátelé, fakt nekrmte.

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #369 kdy: 15. 09. 2015, 10:48:51 »
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.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
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.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #370 kdy: 15. 09. 2015, 10:50:20 »
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?

Už toho trolla, přátelé, fakt nekrmte.
No už taky končím, ale člověka pobaví, když vidí, že zastánci FP myslí vlastně imperativně v FP jazyku :-)))

v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #371 kdy: 15. 09. 2015, 10:50:56 »
Už toho trolla, přátelé, fakt nekrmte.
+1

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #372 kdy: 15. 09. 2015, 10:53:32 »
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.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
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.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.
Tak ještě toto, v imperativním programování se toto nepoužívá, FP by se mělo, protože to pak vede na možnost strojově upravovat algoritmy napsané v FP jazyku tak, aby byly automaticky paralelizovatelné. A proto se vlastně FP zavádí, ne? Nebo jaké má vlastně výhody? Zvětšuje ego echt programátorů?

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #373 kdy: 15. 09. 2015, 10:54:08 »
Protože if je činnost, nikoliv funkce. Chápete-li ji funkcionálně, tedy jako přiřazení, je to přiřazení příliš široce definované. Předem nevíte s čím budete pracovat, její definice je příliš široká a univerzální. Tím se ztrácí výhoda FP programování.

Wut? Neni to jen ekvivalent toho, ze muzu v Jave vracet vysledek typu Object? Snad jak moc obecny vysledek vratim je na programatorovi (a je uplne jedno, jestli to vratim z konstrukce if nebo funkce ci metody).

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #374 kdy: 15. 09. 2015, 11:09:15 »
Protože if je činnost, nikoliv funkce. Chápete-li ji funkcionálně, tedy jako přiřazení, je to přiřazení příliš široce definované. Předem nevíte s čím budete pracovat, její definice je příliš široká a univerzální. Tím se ztrácí výhoda FP programování.

Wut? Neni to jen ekvivalent toho, ze muzu v Jave vracet vysledek typu Object? Snad jak moc obecny vysledek vratim je na programatorovi (a je uplne jedno, jestli to vratim z konstrukce if nebo funkce ci metody).
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...