NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: throw exception VS return false

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
DREAMDEV
Člen
Avatar
DREAMDEV:16.2.2017 20:44

ako je lepsie tvorit vynimky? na nizsej alebo vyssej urovni? ktora moznost je lepsia a preco?
http://pastebin.com/bqi9kYUb

 
Odpovědět
16.2.2017 20:44
Avatar
Odpovídá na DREAMDEV
Matúš Petrofčík:16.2.2017 20:53

Skopírujem tu ten tvoj kód:

<?php

//moznost #1
public function send()
{
    if (!mail($this->to, $this->subject, $this->message, $headers)) {
        throw new Exception('Send e-mail failed');
    }
}

try {
    $mail->send();

    $this->setFlashMessage('success', 'E-mail pre obnovenie hesla bol odoslaný na vašu adresu.');
} catch (Exception $e) {
    $this->setFlashMessage('danger', 'Pokus o obnovenie hesla bol neúspešný.');
}

// -----------------------------

//moznost #2
public function send()
{
    if (!mail($this->to, $this->subject, $this->message, $headers)) {
        return false;
    }

    return true;
}

try {
    if (!$mail->send()) {
        throw new Exception('Send e-mail failed');
    }
    $this->setFlashMessage('success', 'E-mail pre obnovenie hesla bol odoslaný na vašu adresu.');
} catch (Exception $e) {
    $this->setFlashMessage('danger', 'Pokus o obnovenie hesla bol neúspešný.');
}

Podľa môjho názoru je úplne individuálne ako sa to robí, niekomu to vyhovuje tak, inému inak.

Za seba môžem povedať, že som skôr zástanca toho prvého spôsobu. Príde mi to viac flexibilné. Ak má funkcia niečo vracať, tak to vráti, ale v prípade chyby sa vyhodí príslušná výnimka (netreba sa báť vlastných konkrétnejších definícií výnimiek).

Editováno 16.2.2017 20:55
Nahoru Odpovědět
16.2.2017 20:53
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Matúš Petrofčík:16.2.2017 20:57

U pár ľudí som videl aj ten druhý spôsob ale nepríde mi to OK :D Ibaže by to bola funkcia nejakého externého balíčka a tá nevyhadzuje výnimky ale len vracia hodnoty. Vtedy by sa to dalo tolerovať.

Nahoru Odpovědět
16.2.2017 20:57
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
Marian Benčat:16.2.2017 21:33

https://www.youtube.com/watch?… cca od 39.minuty se tomu video věnuje.

Nahoru Odpovědět
16.2.2017 21:33
Totalitní admini..
Avatar
Patrik Valkovič:17.2.2017 0:51

Je to diskutabilní. Na jednu stranu, vyvolání výjimky je náročnější na procesorový čas než prosté navrácení hodnoty. Na druhou stranu, jak bylo zmíněno ve videu, pokud funkce failne a oprava leží i tři úrovně výše, musí chybová návratová hodnota "probublat" až do bodu, kde tento chybový stav můžu ošetřit. To je na druhou stranu pracné pro programátory, protože musí neustále checkovat návratovou hodnotu a na druhou to znemožňuje navrátit skutečnou hodnotu. V takové situaci se zase rozejdou pravidla - jednou bude chybový stav -1, jednou false a jednou null. Takže neustále projíždění dokumentace...
No a poté tu máme samozřejmě konvence. Například Java si výjimky velmi oblívila a tak je používá prakticky všude.
Mé doporučení zní - pokud chybů můžeš rovnou opravit, vracej chybu návratovou hodnotou. Pokud ne a vzniklá chyba má větší rozsah než je první kontext, vyhoď výjimku. Ale rozhodnutí je pouze na tobě a asi záleží na kovencích, které používáš ty/firma apod.

Nahoru Odpovědět
17.2.2017 0:51
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Marian Benčat:17.2.2017 8:19

Hlavni problem výjimek je ten, že je to zneužíváno k řízení chodu programu a né pouze jako skutečně výjimečná neočekávaná situace. Na procesorový čas ser* pes, v dnešní době je práce CPU naprosto druhotný argument. To co je důležité je, jak funguje bublání vyjímky a co to je schopné udělat se stackem atp. Proto je výjimka z hlediska funkčnosti považována za takové zlo.

Nahoru Odpovědět
17.2.2017 8:19
Totalitní admini..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.