Vlákno názorů k článku Konstrukce pro řízení běhu programu v jazyce Go (dokončení) od ja - ahoj, neudelal by mi prosim nekdo code review?...

  • Článek je starý, nové názory již nelze přidávat.
  • 6. 1. 2019 22:12

    ja (neregistrovaný)

    ahoj, neudelal by mi prosim nekdo code review? v ramci uceni se panic a recover jsem napsal toto. mozna ale by to chtelo googlit best practice jak se v golangu pracoje s "vyjimkama" / jak pracovat s chybama...

    kazdopadne budu vdecny za jakykoli postreh :)

    https://paste.ofcode.org/dhQyPh7mg8JKuQrNDhKkS9

  • 7. 1. 2019 2:56

    ivoszz

    Je to hodně neidiomatické.

    Když to vezmu shora, tak není potřeba do interface cpát metody showError a divide. Interface bych pojmenoval Calculator a měl by jedinou metodu Calculate.

    Celé to zachytávání výjimek je jen cvičení. Buď vám to hodí při dělení nulou panic a vy víte, že jste si nezkontroloval vstupy, nebo bude mít metoda návratovou hodnotu error, která vrátí chybu dělení chybou. Zachytávání panic pomocí recover je v Go poměrně vzácné, jednou z mála výjimek je modul http, u kterého i tvůrci připouští, že by jej teď napsali trochu jinak.

    Z drobností bych určitě operaci nedefinoval jako string, ale vytvořil celočíselné konstanty pro jednotlivé operace. Stejně tak chyby nedefinovat jako řetězce, ale jako typ error nbo přímo vytvořit pro každý ze dvou chybových stavů speciální error typ.

  • 11. 1. 2019 14:23

    ja (neregistrovaný)

    ivoszz - diky moc za review! :)

    jen bych se chtel vyjadrit ke svemu predchozimu kodu:
    - strukturu Calculator se stringama zeroDivideException a notSupportedO­perationExcep­tion jsem zvolil proto, abych tohle mel na jednom miste a obecne s tim mohl pracovat na jednom miste
    - s tim panic a recover je to prirozene tak ze jsem se to chtel naucit kdyz se to v clanku probira ale to ze se to nepouziva jsem nevedel.

    snazil jsem se to predelat: https://paste.ofcode.org/bXpBphFqCtf5Hj8ifjEB2a

    (metody konci dvojkou protoze to mam nejak ve stejnym baliku a mlati se mi to s puvodni implementaci. chtel jsem mit vedle sebe svoje prvni reseni a ted po refaktoru.)

    idiomaticke to jeste asi dlouho nebude z pochopitelnych duvodu O:) (koukal jsem na prednasku https://www.youtube.com/watch?v=yeetIgNeIkc a jeste mi to chvili potrva...)

    to aby mel interface jednu metodu asi trochu chapu. (v Jave je neco podobneho, anotace @FunctionalIn­terface...)

    uplne jsem nepochopil jak jste myslel "Stejně tak chyby nedefinovat jako řetězce, ale jako typ error nbo přímo vytvořit pro každý ze dvou chybových stavů speciální error typ." vasi radu jsem se snazil implementovat (inspiraci jsem hleda v std lib v errors) na radku 21 a 22. tohle se mi vubec nelibi, navic co bych delal, kdybych tu hlasku musel lokalizovat nebo nedej boze nad ni jeste delat nejakou logiku? pak teda radek 33 a 35 odpovida tomu co jsem nacetl - https://blog.golang.org/error-handling-and-go