Template on template v Javě

Re:Template on template v Javě
« Odpověď #15 kdy: 17. 08. 2017, 13:49:13 »
Pokud někdo nedokáže odpovědět na jasně danou otázku ani nedokáže uvést konkrétní příklad, místo toho odkáže „na web“, většinou to bývá příznakem toho, že někde zaslechl pár pojmů, ale vůbec netuší, o čem je řeč.

Jestli jsem to ale pochopil správně, tazatel by v Javě chtěl napsat něco takového:

Kód: [Vybrat]
class Animal<T> extends T {
}

To v Javě opravdu napsat nejde. A mimochodem to ukazuje, proč je „šablona“ špatný název pro Java generiky. „Šablona“ je označení po kód, na základě kterého kompilátor vygeneruje správný kód pro všechny potřebné typy (proto šablona). A proto tohle v Javě nejde napsat, protože generika nejsou šablony pro vytváření kódu, a jsou to jen upravené běžné typy. V terminologii Javy tedy tazatel nechtěl generiku nad generikou, ale chtěl vytvořit potomka typového parametru.


Aoidhghean

Re:Template on template v Javě
« Odpověď #16 kdy: 17. 08. 2017, 13:54:43 »
Pokud někdo nedokáže odpovědět na jasně danou otázku ani nedokáže uvést konkrétní příklad, místo toho odkáže „na web“, většinou to bývá příznakem toho, že někde zaslechl pár pojmů, ale vůbec netuší, o čem je řeč.

Jestli jsem to ale pochopil správně, tazatel by v Javě chtěl napsat něco takového:

Kód: [Vybrat]
class Animal<T> extends T {
}
1. Pokud si někdo neumí vygooglit pojem, který nezná, tak je přinejlepším to, čemu zde někteří říkají "lopata". Přispěvatelé do fóra nejsou tvoje sekretářka. Doporučuji návrat do školy, pokud Google nevyhovuje.

2. Pochopils to špatně. Doporučuji obrátit se na M.Prýmka  ;)

Aoidhghean

Re:Template on template v Javě
« Odpověď #17 kdy: 17. 08. 2017, 13:56:50 »
To v Javě opravdu napsat nejde. A mimochodem to ukazuje, proč je „šablona“ špatný název pro Java generiky. „Šablona“ je označení po kód, na základě kterého kompilátor vygeneruje správný kód pro všechny potřebné typy (proto šablona). A proto tohle v Javě nejde napsat, protože generika nejsou šablony pro vytváření kódu, a jsou to jen upravené běžné typy. V terminologii Javy tedy tazatel nechtěl generiku nad generikou, ale chtěl vytvořit potomka typového parametru.
To je zásadní neznalost terminologie. Swift taky nemá šablony, jen generika, a přitom proměnné pro vyšší typy má.

Sten

Re:Template on template v Javě
« Odpověď #18 kdy: 17. 08. 2017, 14:00:44 »
Aby to byla šablona nad šablonou, musí být ta šablona parametr toho nového typu. Například
Kód: [Vybrat]
template <template <typename> typename T>
class Collector
{
private:
    T<std::string> _collection;
};

je Collector šablona nad šablonou, protože se tomu jako parametr předává šablona. Kolektor je typický případ, dostane jako šablonu kontejner, do kterého ukládá data:
Kód: [Vybrat]
B<std::vector> vectorCollector{};
B<std::set> setCollector{};

Java nic takového nemá, protože type erasure v generikách zabraňuje takovému použití. Java to řeší rozhraními, zde by kolektor musel dostat zvenčí instanci Collection. To je často omezující, protože ten, kdo tu třídu vytváří, nemusí vědět, co jí vlastně má předat do konstruktoru; v C++ jednoduše volá bezparametrový konstruktor. Řešit to v Javě lze pomocí továrny, ale vede to k typickému javovskému lasagna code.

Aoidhghean

Re:Template on template v Javě
« Odpověď #19 kdy: 17. 08. 2017, 15:03:35 »
Aby to byla šablona nad šablonou, musí být ta šablona parametr toho nového typu. Například
Kód: [Vybrat]
template <template <typename> typename T>
class Collector
{
private:
    T<std::string> _collection;
};

je Collector šablona nad šablonou, protože se tomu jako parametr předává šablona. Kolektor je typický případ, dostane jako šablonu kontejner, do kterého ukládá data:
Kód: [Vybrat]
B<std::vector> vectorCollector{};
B<std::set> setCollector{};

Java nic takového nemá, protože type erasure v generikách zabraňuje takovému použití. Java to řeší rozhraními, zde by kolektor musel dostat zvenčí instanci Collection. To je často omezující, protože ten, kdo tu třídu vytváří, nemusí vědět, co jí vlastně má předat do konstruktoru; v C++ jednoduše volá bezparametrový konstruktor. Řešit to v Javě lze pomocí továrny, ale vede to k typickému javovskému lasagna code.
To je názorný příklad, ale s tím type erasure nesouhlasím, šlo by to udělat i v Javě (nad JVM), jen asi někdo usoudil, že to nemá smysl, protože průměrný cílový programátor to není schopen pobrat (jak je vidět i přímo zde ve vlákně).

A jen tak mimochodem, i v C++ se rychle narazí na omezení typového systému, jakmile dojde na generické metody.


Re:Template on template v Javě
« Odpověď #20 kdy: 17. 08. 2017, 15:17:13 »
Pokud si někdo neumí vygooglit pojem, který nezná, tak je přinejlepším to, čemu zde někteří říkají "lopata". Přispěvatelé do fóra nejsou tvoje sekretářka. Doporučuji návrat do školy, pokud Google nevyhovuje.
Nechápu, proč sem píšete poznámky, které nijak nesouvisí s touhle debatou. Nebo on se tu objevil někdo takový, o kom píšete? A mimochodem, je hezké, že googlení pojmu doporučuje ten, kdo předtím tvrdil, že používání špatných pojmů nevadí, protože přeci všichni vědí, o co jde.

Pochopils to špatně. Doporučuji obrátit se na M.Prýmka  ;)
Klidně se na něj obraťte, já vám v tom nijak nebráním.

To je zásadní neznalost terminologie. Swift taky nemá šablony, jen generika, a přitom proměnné pro vyšší typy má.
To je právě ten problém, když někdo jenom zaslechne nějaké termíny, ale vůbec netuší, o co vlastně jde. Kdybyste těm termínům rozuměl, tak byste pochopil, že jsem nepsal nic o tom, že šablony jsou podmínkou pro „proměnné pro vyšší typy“. Šablony jsou jenom jeden z možných způsobů implementace, nikoli jediný. A Java prostě šablony implementované nemá, takže není dobrý nápad to šablony nazývat – i když se generiky v Javě často používají stejným způsobem, jako šablony v C++. Právě proto je dobré znát tu terminologii (ne jen slovíčka, ale jejich význam), protože to, že se dva různé nástroje mohou používat ve stejných případech, neznamená, že jsou stejné.

Re:Template on template v Javě
« Odpověď #21 kdy: 17. 08. 2017, 15:34:19 »
Java nic takového nemá, protože type erasure v generikách zabraňuje takovému použití. Java to řeší rozhraními, zde by kolektor musel dostat zvenčí instanci Collection. To je často omezující, protože ten, kdo tu třídu vytváří, nemusí vědět, co jí vlastně má předat do konstruktoru; v C++ jednoduše volá bezparametrový konstruktor. Řešit to v Javě lze pomocí továrny, ale vede to k typickému javovskému lasagna code.
Tenhle jednoduchý případ bude i v Javě stručný díky lambdám. Ale to je samozřejmě dané tím, že ten vnější typ má jen jeden typ události, což je přesně to, co dělají lambda výrazy.

Aoidhghean

Re:Template on template v Javě
« Odpověď #22 kdy: 17. 08. 2017, 15:44:48 »
Pokud si někdo neumí vygooglit pojem, který nezná, tak je přinejlepším to, čemu zde někteří říkají "lopata". Přispěvatelé do fóra nejsou tvoje sekretářka. Doporučuji návrat do školy, pokud Google nevyhovuje.
Nechápu, proč sem píšete poznámky, které nijak nesouvisí s touhle debatou. Nebo on se tu objevil někdo takový, o kom píšete? A mimochodem, je hezké, že googlení pojmu doporučuje ten, kdo předtím tvrdil, že používání špatných pojmů nevadí, protože přeci všichni vědí, o co jde.

Pochopils to špatně. Doporučuji obrátit se na M.Prýmka  ;)
Klidně se na něj obraťte, já vám v tom nijak nebráním.

To je zásadní neznalost terminologie. Swift taky nemá šablony, jen generika, a přitom proměnné pro vyšší typy má.
To je právě ten problém, když někdo jenom zaslechne nějaké termíny, ale vůbec netuší, o co vlastně jde. Kdybyste těm termínům rozuměl, tak byste pochopil, že jsem nepsal nic o tom, že šablony jsou podmínkou pro „proměnné pro vyšší typy“. Šablony jsou jenom jeden z možných způsobů implementace, nikoli jediný. A Java prostě šablony implementované nemá, takže není dobrý nápad to šablony nazývat – i když se generiky v Javě často používají stejným způsobem, jako šablony v C++. Právě proto je dobré znát tu terminologii (ne jen slovíčka, ale jejich význam), protože to, že se dva různé nástroje mohou používat ve stejných případech, neznamená, že jsou stejné.
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš. Začal jsi s ad hominem a teď píšeš bláboly jak malý harant, kterého nachytali na švestkách. Pro tvou informaci znám do hloubky Javu i Haskell a stačilo googlit "higher kinded types in Java", abych si ověřil, že to do Javy ještě nedorazilo. Rezistence k dalšímu vzdělávání vede do pekel, radši se jí zbav a věnuj se studiu místo urážení lidí, co tě upozorní na elementární neznalost.

Lol Phirae

Re:Template on template v Javě
« Odpověď #23 kdy: 17. 08. 2017, 16:03:43 »
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš. Začal jsi s ad hominem a teď píšeš bláboly jak malý harant, kterého nachytali na švestkách.

Zřejmě první setkání s Jirsákem?  ;D :D

Re:Template on template v Javě
« Odpověď #24 kdy: 17. 08. 2017, 16:05:50 »
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš.
Já zas nechápu, jak jste na takový nesmysl přišel.

Začal jsi s ad hominem
No vidíte, a hned máte další termín na seznam toho, o čem byste si měl zjistit, co to doopravdy znamená.

Pro tvou informaci znám do hloubky Javu i Haskell a stačilo googlit "higher kinded types in Java", abych si ověřil, že to do Javy ještě nedorazilo.
Já si pod „znám do hloubky“ představuju podstatně vyšší úroveň znalostí, než že budete googlovat běžné vlastnosti jazyka.

Lidem, kteří zaslechli nějaké termíny, ale netuší, co znamenají, je těžké poradit, protože nedokážou popsat, jaký problém vlastně řeší. Tazatel se ptá na šablony šablon v Javě, což je poněkud problém, když v Javě nejsou ani šablony. Vy hned víte, že chtěl určitě higher kinded types, protože jste sice někde zaslechl ten termín, ale nemáte představu, co se za tím skrývá a k čemu by se to mohlo použít.

Občas se stane, že někdo shání nějakou vlastnost jednoho řešení (jazyka nebo klidně IPv4) v jazyce jiném (nebo třeba v IPv6), navíc s dodatkem, že to cílový jazyk (IPv6) určitě neumí, protože je blbý. Pokud se podaří z dotyčného vypáčit, jaký problém vlastně řeší, v 99 % případů se najde v cílovém nástroji řešení daného problému, přičemž v 80 % případů je to stejně elegantní řešení, jako v tom vzorovém nástroji, zbývající případy jsou půl na půl, zda je to řešení dokonce ještě lepší nebo horší než vzor. K takovým případům patří mimo jiné mnoho dotazů, kdy se někdo sháněl po šablonách v Javě a jeho problém vyřešily generiky – po té, co dotyčnému někdo jejich existenci v diskusi prozradil.

Aoidhghean

Re:Template on template v Javě
« Odpověď #25 kdy: 17. 08. 2017, 16:08:02 »
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš. Začal jsi s ad hominem a teď píšeš bláboly jak malý harant, kterého nachytali na švestkách.

Zřejmě první setkání s Jirsákem?  ;D :D
Ano. Takto se chová pořád?


Lol Phirae

Re:Template on template v Javě
« Odpověď #27 kdy: 17. 08. 2017, 16:17:54 »
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš. Začal jsi s ad hominem a teď píšeš bláboly jak malý harant, kterého nachytali na švestkách.

Zřejmě první setkání s Jirsákem?  ;D :D
Ano. Takto se chová pořád?

Po cca dvouroční epizodě v ilegalitě následující po legendární diskusi na téma ukládání vs. export z GIMPu (která si vysloužila i vlastní díl komiksu) je již několik let zase zpět a grafomanie spojená s obsedantním přesvědčením o dokonalé znalosti tématu se rapidně zhoršují. Podobným stylem je schopen zaneřádit prakticky jakoukoliv diskusi, ale "oblíbená" jsou krom Javy zejm. témata autorských práv, licencování Windows a PKI (tzv. "důvěryhodné" certifikační autority).

Aoidhghean

Re:Template on template v Javě
« Odpověď #28 kdy: 17. 08. 2017, 16:24:14 »
Fakt nechápu, proč když něco nevíš, tak se to prostě nedoučíš. Začal jsi s ad hominem a teď píšeš bláboly jak malý harant, kterého nachytali na švestkách.

Zřejmě první setkání s Jirsákem?  ;D :D
Ano. Takto se chová pořád?

Po cca dvouroční epizodě v ilegalitě následující po legendární diskusi na téma ukládání vs. export z GIMPu (která si vysloužila i vlastní díl komiksu) je již několik let zase zpět a grafomanie spojená s obsedantním přesvědčením o dokonalé znalosti tématu se rapidně zhoršují. Podobným stylem je schopen zaneřádit prakticky jakoukoliv diskusi, ale "oblíbená" jsou krom Javy zejm. témata autorských práv, licencování Windows a PKI (tzv. "důvěryhodné" certifikační autority).
Takže troll, co nemá znalosti (jak už stihnul ukázat) a jen provokuje. Díky za upozornění, už je na ignore listu. >:(