Funkcionální programování a mainstream

schwejk

Funkcionální programování a mainstream
« kdy: 22. 07. 2017, 19:14:44 »
Může mi někdo vysvětlit, proč se do normálních OO jazyků cpe FP? Proč se C++ a Rust a Swift sviní něčím jako flatMap apod.? Pak kolekce jsou hodnotové typy místo normálních tříd a celé OOP jde do kytek...


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programování a mainstream
« Odpověď #1 kdy: 22. 07. 2017, 19:36:09 »
IMHO:

Protože OOP nefunguje tak, jak evangelisti slibovali = nepomáhá tolik, jak mělo, je extrémně náročné do toho proniknout, vyžaduje to velkou míru disciplíny, ...

Zatímco FP vypadá, že by mohlo fungovat líp = dá se v něm snadněji psát čitelný kód, hůře se v něm prasí, většinou to sklouzává na to, že to buď napíšeš relativně čitelně, nebo to nenapíšeš vůbec, větší míra znovupoužitelnosti oproti OOP, plus to má další více či méně teoretické výhody.

A nejdůležitější důvod vůbec: je po tom poptávka.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #2 kdy: 22. 07. 2017, 20:55:14 »
+1

plus to má další více či méně teoretické výhody.

Jeste bych doplnil, ze moznost "zadarmo" psat kod pripraveny pro paralelni zpracovani je IMO velke plus. To se v popularnich implementacich OOP jaksi nenosi. Dalsi vyhoda je, ze psani testu pro FP kod je velmi jednoduche - zadne mocky a jine berlicky, proste mam vstup (parametry funkce) a vystup (jedna hodnota, ktera bude vzdy zaviset pouze na vstupu a ne na cemkoliv ve svete).

Kit

Re:Funkcionální programování a mainstream
« Odpověď #3 kdy: 22. 07. 2017, 21:20:39 »
Objekty se skládají z dat a metod. Metody lze chápat jako specializované funkce. Rád používám immutable objekty a to už je jen krůček k FP. Výhody FP zde již byly uvedeny, mně vyhovuje hlavně ta dobrá testovatelnost.

Funkcionální prvky v OOP nevadí, pokud se to s nimi nepřežene.

Re:Funkcionální programování a mainstream
« Odpověď #4 kdy: 22. 07. 2017, 21:44:08 »
Pak kolekce jsou hodnotové typy místo normálních tříd a celé OOP jde do kytek...
Na to jsi přišel jak?


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #5 kdy: 22. 07. 2017, 21:56:23 »
+1

plus to má další více či méně teoretické výhody.

Jeste bych doplnil, ze moznost "zadarmo" psat kod pripraveny pro paralelni zpracovani je IMO velke plus. To se v popularnich implementacich OOP jaksi nenosi. Dalsi vyhoda je, ze psani testu pro FP kod je velmi jednoduche - zadne mocky a jine berlicky, proste mam vstup (parametry funkce) a vystup (jedna hodnota, ktera bude vzdy zaviset pouze na vstupu a ne na cemkoliv ve svete).
Nejen paralelní zpracování, ale lepší optimalizace obecně díky imutabilitě. Záleží na překladači, Haskell třeba optimalizuje jako divý (hlavně kód bez rekurze, ale té se dá snadno zbavit).

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #6 kdy: 22. 07. 2017, 22:10:29 »
Až bude FP mainstream bude se v něm prasit více než v OOP.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #7 kdy: 22. 07. 2017, 22:12:00 »
Až bude FP mainstream bude se v něm prasit více než v OOP.
V FP to jde ale o dost hůře. Je fakt, že Češi jsou vynalézaví, tak to asi dají...

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #8 kdy: 22. 07. 2017, 22:14:03 »
FP nebude nikdy mainstream, protože to už budeme v postalgoritmické době, algoritmy nebudou synteticky vytvářené, ale vytrénované a explicitně neznámé :-)))

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #9 kdy: 22. 07. 2017, 22:17:44 »
Až bude FP mainstream bude se v něm prasit více než v OOP.
V FP to jde ale o dost hůře. Je fakt, že Češi jsou vynalézaví, tak to asi dají...

No právě, že to jde hůře, proto bude potřeba více prasit. V živém systému bude několik větví dělajících to samé, jak se budou připisovat nové funkce místo toho, aby se využívala a upravovala existující funkčnost, každý kdo bude něco upravovat, založí svou novou větev.

Kit

Re:Funkcionální programování a mainstream
« Odpověď #10 kdy: 22. 07. 2017, 22:36:16 »
... Pak kolekce jsou hodnotové typy místo normálních tříd a celé OOP jde do kytek...

Srovnávání kolekcí s třídami mi připadá jako srovnávání košíku jablek s projektem buldozeru...

Honza

Re:Funkcionální programování a mainstream
« Odpověď #11 kdy: 22. 07. 2017, 22:36:48 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #12 kdy: 22. 07. 2017, 22:42:17 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Z mentální setrvačnosti. Smalltalk žádné hodnotové typy nemá.

JS

Re:Funkcionální programování a mainstream
« Odpověď #13 kdy: 22. 07. 2017, 22:52:27 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #14 kdy: 22. 07. 2017, 22:54:24 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

To může automaticky vyřešit překladač.