Hledám knihy: Myslíme v C++ a v Javě

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #105 kdy: 14. 09. 2019, 15:48:22 »
Jak to tedy uděláš, když ten chybový stav nesmíš předat returnem ani parametry nesmíš předávat odkazem?
To je ještě sranda. Ale jak to uděláš, když ten chybový stav nesmíš předat returnem ani parametry nesmíš předávat odkazem a nesmíš vyhazovat výjimky?
V parametrech předám vhodný objekt.
Takže side-effect. To jsme si teda pomohli.

O tom side-effectu vím a proto používám výjimky. Tak se předveď, jak bys to vyřešil.
Jednoduše. Já bych v prvé řadě nevytvářel umělá omezení.

Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.

Návratová hodnota je určena pro data. Pokud bych například místo stringu dostal int nebo boolean, tak by z toho navazující kód mohl být zmaten. Takovou funkci či metodu by nebylo možné použít ve výrazu. Analýza typu návratové hodnoty je zase code smell.

Výjimky to skutečně řeší mnohem lépe a popisněji. Dozvím se z nich nejen návratový kód, ale i co a kde se stalo a za jakých okolností. A když se mi nechce ji zachytávat, tak ji prostě nechám propadnout.

Když budeš ignorovat návratové kódy, tak se ti bude program chovat podivně. S výjimkami se ti to nemůže stát, tedy pokud je nebudeš polykat.


Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #106 kdy: 14. 09. 2019, 15:53:02 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.

Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #107 kdy: 14. 09. 2019, 16:08:11 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
O monádách jsi už slyšel?  ::)

Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #108 kdy: 14. 09. 2019, 16:09:50 »
Návratová hodnota je určena pro data. Pokud bych například místo stringu dostal int nebo boolean, tak by z toho navazující kód mohl být zmaten. Takovou funkci či metodu by nebylo možné použít ve výrazu. Analýza typu návratové hodnoty je zase code smell.

Pokud místo stringu dostanu int nebo boolean, tak je chyba trochu jinde než ve výjimkách / návratové hodnotě.

Výjimky to skutečně řeší mnohem lépe a popisněji. Dozvím se z nich nejen návratový kód, ale i co a kde se stalo a za jakých okolností. A když se mi nechce ji zachytávat, tak ji prostě nechám propadnout.

A z návratového kódu nelze určit, co a kde se stalo?

Když budeš ignorovat návratové kódy, tak se ti bude program chovat podivně. S výjimkami se ti to nemůže stát, tedy pokud je nebudeš polykat.

Jakože když budu ignorovat návratové kódy, tak se bude program chovat divně, ale když budu ignorovat výjimky, tak se divně chovat nebude?  :D

Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.

Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.

Například Either, Maybe/std::optional...

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #109 kdy: 14. 09. 2019, 16:12:32 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
O monádách jsi už slyšel?  ::)

Ano, slyšel. A také jsem slyšel, že Maybe je izomorfní s výjimkami.


Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #110 kdy: 14. 09. 2019, 16:20:50 »
Návratová hodnota je určena pro data. Pokud bych například místo stringu dostal int nebo boolean, tak by z toho navazující kód mohl být zmaten. Takovou funkci či metodu by nebylo možné použít ve výrazu. Analýza typu návratové hodnoty je zase code smell.
Pokud místo stringu dostanu int nebo boolean, tak je chyba trochu jinde než ve výjimkách / návratové hodnotě.

Tak tedy uveď návratovou hodnotu funkce, která má vrátit string, ale selže. Zároveň chci vědět, proč selhala a za jakých okolností.

Haskell prosím odlož stranou, bavíme se o objektových jazycích. Golang také můžeš vynechat, jelikož jeho řešení znám. Zajímá mě (a podle nadpisu nejen mne) řešení pro C++ a Javu.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #111 kdy: 14. 09. 2019, 16:21:43 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
O monádách jsi už slyšel?  ::)
Ano, slyšel. A také jsem slyšel, že Maybe je izomorfní s výjimkami.
Tak proč se ptáš?

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #112 kdy: 14. 09. 2019, 16:30:06 »
Když budeš ignorovat návratové kódy, tak se ti bude program chovat podivně. S výjimkami se ti to nemůže stát, tedy pokud je nebudeš polykat.
Jakože když budu ignorovat návratové kódy, tak se bude program chovat divně, ale když budu ignorovat výjimky, tak se divně chovat nebude?  :D

Přesně tak. Pokud neodchytíš výjimku, program zhavaruje a vypíše report, proč a kde zhavaroval. To není podivné, ale standardní chování.

Pokud budeš ignorovat návratový kód s chybou, tak s ní pojede dál a ani se nedozvíš, co se stalo, co bylo příčinou podivného chování.

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #113 kdy: 14. 09. 2019, 16:39:09 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
O monádách jsi už slyšel?  ::)
Ano, slyšel. A také jsem slyšel, že Maybe je izomorfní s výjimkami.
Tak proč se ptáš?

Přečti si diskuzi. Používám výjimky tam, kde mají být. Někteří diskutující píší, že by se neměly používat, protože jsou drahé, že by se měly používat návratové hodnoty. Z mého pohledu jen s výjimkami neumí pracovat.

Je snad logické, že se jich ptám, jak by to tedy řešili v C++ a Javě, kdyby nesměli výjimky používat. Nabízí se mi pouze kostrbatá řešení, které buď používají, anebo mají něco lepšího.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #114 kdy: 14. 09. 2019, 16:51:40 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
O monádách jsi už slyšel?  ::)
Ano, slyšel. A také jsem slyšel, že Maybe je izomorfní s výjimkami.
Tak proč se ptáš?

Přečti si diskuzi. Používám výjimky tam, kde mají být. Někteří diskutující píší, že by se neměly používat, protože jsou drahé, že by se měly používat návratové hodnoty. Z mého pohledu jen s výjimkami neumí pracovat.

Je snad logické, že se jich ptám, jak by to tedy řešili v C++ a Javě, kdyby nesměli výjimky používat. Nabízí se mi pouze kostrbatá řešení, které buď používají, anebo mají něco lepšího.
Máš selektivní slepotu na Maybe? Vždyť ti to tu píšou furt dokola.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #115 kdy: 14. 09. 2019, 16:55:53 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.

Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.

Asi se budu opakovat: Já bych v prvé řadě nevytvářel umělá omezení.

Zrovna případ Golang je super v tom, jak v jazyce kde "zapoměli" vynutit povinnost odebrat hodnotu, vyřešit návrat chyby.
V Javě jsou zvykem výjimky, dělal bych to tedy výjimkami. Ne proto, že by to byla nějaká zvláštní výhra, ale protože je to tam zvykem.
C++ nedělám, to je hnusnej jazyk.
Rust to řeší jako Golang, nebo případně monádama.
Lua to řeší jako Golang, ale výjimky to taky umí.
etc.

Je možno si všimnout, že mnoho, zvláště staticky typovaných jazyků, používají návratovou hodnotu. Mnoho dalších jazyků používá výjimky. Šermovat tu s CleanCode a brát výjimky jako písmo svaté je poněkud... nezkušené.

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #116 kdy: 14. 09. 2019, 16:57:32 »
Je snad logické, že se jich ptám, jak by to tedy řešili v C++ a Javě, kdyby nesměli výjimky používat. Nabízí se mi pouze kostrbatá řešení, které buď používají, anebo mají něco lepšího.
Máš selektivní slepotu na Maybe? Vždyť ti to tu píšou furt dokola.

Jak jsem měl poznat, že nemají na mysli Maybe z Haskellu, ale Maybe z C++ a Javy?

Kit

  • *****
  • 853
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #117 kdy: 14. 09. 2019, 17:03:37 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
V Javě jsou zvykem výjimky, dělal bych to tedy výjimkami. Ne proto, že by to byla nějaká zvláštní výhra, ale protože je to tam zvykem.
C++ nedělám, to je hnusnej jazyk.

Je možno si všimnout, že mnoho, zvláště staticky typovaných jazyků, používají návratovou hodnotu. Mnoho dalších jazyků používá výjimky. Šermovat tu s CleanCode a brát výjimky jako písmo svaté je poněkud... nezkušené.

C++ a Java jsou staticky typované? Skaláry možná, ale objekty jsou typované dynamicky.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #118 kdy: 14. 09. 2019, 17:04:19 »
Z mého pohledu jen s výjimkami neumí pracovat.
Připomíná se mi tady takové otřepané úsloví o OOP: Jsou lidé, kteří nepoužívají objekty protože jim nerozumí. A pak jsou lidé, kteří nepoužívají objekty, protože jim rozumí velmi dobře.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Hledám knihy: Myslíme v C++ a v Javě
« Odpověď #119 kdy: 14. 09. 2019, 17:15:58 »
Nemám v zásadě nic proti výjimkám, ale návratová hodnota je vždycky značka ideál. Zvláště v typovaných jazycích.
Jak bys tedy vyřešil návratovou hodnotu funkce, která má vracet třeba string, ale uvnitř selže? Prosím jinak než v Golang, jehož řešení znám.
V Javě jsou zvykem výjimky, dělal bych to tedy výjimkami. Ne proto, že by to byla nějaká zvláštní výhra, ale protože je to tam zvykem.
C++ nedělám, to je hnusnej jazyk.

Je možno si všimnout, že mnoho, zvláště staticky typovaných jazyků, používají návratovou hodnotu. Mnoho dalších jazyků používá výjimky. Šermovat tu s CleanCode a brát výjimky jako písmo svaté je poněkud... nezkušené.
C++ a Java jsou staticky typované? Skaláry možná, ale objekty jsou typované dynamicky.
Ty v tom máš slušný guláš. Tak jo, C++ je dynamicky typované a Zeman není dementní alkoholik.