OOP a pravidla pro konstruktor

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #90 kdy: 05. 06. 2018, 13:38:28 »
Tak lambda je defakto ad-hoc objekt bez setterů, mající právě jednu metodu :-) Co si budem povídat, geniální koncept.

To nemusí být vůbec pravdou, záleží na implementaci. Mimoto je docela obvyklým nedostatkem nerozlišovat lambdy a uzávěry.
To rozlišování je pochybné, je to porovnávání jablek s hruškami.


BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:OOP a pravidla pro konstruktor
« Odpověď #91 kdy: 05. 06. 2018, 14:56:02 »
Tak lambda je defakto ad-hoc objekt bez setterů, mající právě jednu metodu :-) Co si budem povídat, geniální koncept.

To nemusí být vůbec pravdou, záleží na implementaci. Mimoto je docela obvyklým nedostatkem nerozlišovat lambdy a uzávěry.

Bylo by zajímavé, když by si rozvedl rozdíly. Jinak je to o ničem.

SB

Re:OOP a pravidla pro konstruktor
« Odpověď #92 kdy: 05. 06. 2018, 15:12:59 »
Pokud je mi známo, např. Jávka řeší uzávěry vznikem anonymní funkce při překladu. Smalltalk má na uzávěry instance třídy BlockClosure.
Rozdíl lambdy a uzávěry asi slyšet nechcete...

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #93 kdy: 05. 06. 2018, 20:07:54 »
Pokud je mi známo, např. Jávka řeší uzávěry vznikem anonymní funkce při překladu. Smalltalk má na uzávěry instance třídy BlockClosure.
Rozdíl lambdy a uzávěry asi slyšet nechcete...
Chceme. Jak to bude v monádách?

BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:OOP a pravidla pro konstruktor
« Odpověď #94 kdy: 05. 06. 2018, 21:15:02 »
Pokud je mi známo, např. Jávka řeší uzávěry vznikem anonymní funkce při překladu. Smalltalk má na uzávěry instance třídy BlockClosure.
Rozdíl lambdy a uzávěry asi slyšet nechcete...
Tak já jsem psal, co je lambda z takového toho filozofického hlediska. Jak je to reálně implementováno není to, co jsem řešil a tudíž jsem si to samozřejmě zjednodušil a rozdíl mezi lambdou a uzávěrem jsem zanedbal.

Takže pokud máš nějakou pointu z tohoto hlediska...


ZablesenejCokl

Re:OOP a pravidla pro konstruktor
« Odpověď #95 kdy: 05. 06. 2018, 21:46:02 »
"What is the difference between a 'closure' and a 'lambda'?"
https://stackoverflow.com/a/36878651

Kit

Re:OOP a pravidla pro konstruktor
« Odpověď #96 kdy: 05. 06. 2018, 22:26:59 »
Tak já jsem psal, co je lambda z takového toho filozofického hlediska. Jak je to reálně implementováno není to, co jsem řešil a tudíž jsem si to samozřejmě zjednodušil a rozdíl mezi lambdou a uzávěrem jsem zanedbal.

Lambda je jen anonymní funkce. Uzávěr vznikne vhodnou implementací lambdy tak, aby nesl stav.

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #97 kdy: 05. 06. 2018, 22:35:06 »
Tak já jsem psal, co je lambda z takového toho filozofického hlediska. Jak je to reálně implementováno není to, co jsem řešil a tudíž jsem si to samozřejmě zjednodušil a rozdíl mezi lambdou a uzávěrem jsem zanedbal.

Lambda je jen anonymní funkce. Uzávěr vznikne vhodnou implementací lambdy tak, aby nesl stav.
Ne nutně.

BoneFlute

  • *****
  • 2 047
    • Zobrazit profil
Re:OOP a pravidla pro konstruktor
« Odpověď #98 kdy: 05. 06. 2018, 23:05:52 »
Tak já jsem psal, co je lambda z takového toho filozofického hlediska. Jak je to reálně implementováno není to, co jsem řešil a tudíž jsem si to samozřejmě zjednodušil a rozdíl mezi lambdou a uzávěrem jsem zanedbal.

Lambda je jen anonymní funkce. Uzávěr vznikne vhodnou implementací lambdy tak, aby nesl stav.

Nerozumím, proč mi to píšeš.

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #99 kdy: 06. 06. 2018, 15:19:19 »
A realita je taková, jaká je, používá se OOP a možná do toho trochu streamy/linq na zpracování dat.
No jasně. A ty streamy a linq vůbec nejsou funkcionální programování, že? ;D

Ty vole já nevím co lidi s tím funkcionálním programováním mají, když pořád tvrdí, že tak programujou, a přitom jen používají lambdu a streamy. Seber se, běž si zaprogramovat do Prologu a pak znova tvrď, že programuješ funkcionálně v Javě.
Tvrdit to můžou, ale málokdo skutečně píše funkcionálně.

Kit

Re:OOP a pravidla pro konstruktor
« Odpověď #100 kdy: 06. 06. 2018, 15:26:33 »
Ty vole já nevím co lidi s tím funkcionálním programováním mají, když pořád tvrdí, že tak programujou, a přitom jen používají lambdu a streamy. Seber se, běž si zaprogramovat do Prologu a pak znova tvrď, že programuješ funkcionálně v Javě.
Tvrdit to můžou, ale málokdo skutečně píše funkcionálně.

Málokdo programuje v Javě objektově, to je fakt těžké. Java je prostě multiparadigmatickým jazykem a na každou vrstvu aplikace se hodí jiný přístup.

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #101 kdy: 06. 06. 2018, 16:33:08 »
Ty vole já nevím co lidi s tím funkcionálním programováním mají, když pořád tvrdí, že tak programujou, a přitom jen používají lambdu a streamy. Seber se, běž si zaprogramovat do Prologu a pak znova tvrď, že programuješ funkcionálně v Javě.
Tvrdit to můžou, ale málokdo skutečně píše funkcionálně.

Málokdo programuje v Javě objektově, to je fakt těžké. Java je prostě multiparadigmatickým jazykem a na každou vrstvu aplikace se hodí jiný přístup.
V Javě to je především v podstatě nemožné.

SB

Re:OOP a pravidla pro konstruktor
« Odpověď #102 kdy: 06. 06. 2018, 17:00:35 »
Pokud je mi známo, např. Jávka řeší uzávěry vznikem anonymní funkce při překladu. Smalltalk má na uzávěry instance třídy BlockClosure.
Rozdíl lambdy a uzávěry asi slyšet nechcete...
Chceme. Jak to bude v monádách?

Lamba je samostatným, bezestavovým předpisem. Uzávěra je předpisem, který obsahuje závislosti na svém kontextu, tudíž stavová.
Monády neznám, takže ani netuším, zda s tím mají něco společného. Ale vzhledem k tomu, že je tu řeč o OOP, tak je to asi jedno, ne?

Onestone

Re:OOP a pravidla pro konstruktor
« Odpověď #103 kdy: 06. 06. 2018, 23:51:02 »
Pokud je mi známo, např. Jávka řeší uzávěry vznikem anonymní funkce při překladu. Smalltalk má na uzávěry instance třídy BlockClosure.
Rozdíl lambdy a uzávěry asi slyšet nechcete...
Chceme. Jak to bude v monádách?
Lamba je samostatným, bezestavovým předpisem. Uzávěra je předpisem, který obsahuje závislosti na svém kontextu, tudíž stavová.
To je ale blbost, z držení kontextu neplyne stavovost. Navíc libovolný uzávěr (sic!) jde emulovat prostým lambda výrazem.

ded.kenedy

Re:OOP a pravidla pro konstruktor
« Odpověď #104 kdy: 07. 06. 2018, 01:09:32 »
Motate to oba. Lambda vyraz a uzaver jsou dva odlisne, vzajemne ortogonalni pojmy.

Na LISPu nebo podobnych jazycich to jde videt mnohem lip.

Lambda vyraz je vyraz, jenz se vyhodnoti na funkci. Tecka.

Kód: [Vybrat]
(lambda (x) (* x x)) -> funkce jednoho paremetru pocitajici druhou mocninu.
Vsimnete si, ze zadny uzaver nevznikl, protoze telo lambda-vyrazu neobsahuje volne promenne.

Kód: [Vybrat]
(let ((y 10))
   (lambda (x) (* x y)))

V tomto pripade je vracena funkce jednoho parametru (vracejici nasobek desiti) a v tomto pripade se jedna o uzaver, protoze symbol "y" je v lexikalne nadrazenem prostredi.

Na druhou stranu, aby vznikl uzaver, neni potreba lambda vyrazu:

Kód: [Vybrat]
def a():
    y = 10
    def b(x):
        return x * y
    return b

a()(20) ==> 200