Ola peepz,

Puur uit nieuwsgierigheid... waar in een functie gooi jij je exception?

Vroeger deed ik dit:

<?php

public function foo() {
if (isset($this->bar)) {
return $this->bar;
}
throw Exception('bar not found');
}

?>
Ik koos voor deze aanpak omdat een "positief" if-statement sneller is dan een "negatief" if-statement. Ik deed het dus voor performance.

Tegenwoordig gebruik ik echter een "negatief" if-statement, en return ik de waarde pas aan het eind van de functie. Dan krijgen we dus dit:

<?php

public function foo() {
if (!isset($this->bar)) {
throw Exception('bar not found');
}
return $this->bar;
}

?>
Voor mijn gevoel is dit een logischere, duidelijkere opbouw van de functie.

Toch zag ik eerder deze week iemand op het forum de eerste versie gebruiken, en dus vroeg ik me af welke versie jullie gebruiken. De eerste of de laatste?
Ik doe het altijd met try catch.
Euh... dat is op dit voorbeeld toch niet van toepassing :-s
Dan had je het topic niet "waar foutafvanging" moeten noemen. Je wilt nu namelijk weten waar je de fout zou moeten gooien.

Precondities heb ik het liefst bovenaan. En op zo'n manier dat daar ook de foutmelding staat die bij de preconditie hoort. In dat geval dus bovenaan.

Postcondities zoals "deze methode mag nooit null returnen" komen dan waarschijnlijk wel weer onderaan.

Doe wat het meest leesbaar is. En aangezien smaken verschillen mag je zelf bepalen wat dat is. Zolang je maar argumenten kunt verzinnen en verdedigen.
Oh, en zoals bijna altijd: doe dit op een case by case basis.
>> Dan had je het topic niet "waar foutafvanging" moeten noemen. Je wilt nu namelijk weten waar je de fout zou moeten gooien.

Fixed :)

>> Postcondities zoals "deze methode mag nooit null returnen" komen dan waarschijnlijk wel weer onderaan.

Hoe bedoel je dit? Wat versta je onder een "postconditie"?
package me.darsstar

import static java.util.Objects.requireNonNull;

...

    public SomeObject someMethod(String miauw, int offset, int length) {
        requireNonNull(miauw, "Violation of non-null contract for argument miauw");

        if (offset < 0 || offset >= miauw.length()) {
            throw new IllegalArgumentEception("Invalid offset");
        }

        if (length < 0 || length >= miauw.length() - offset) {
            throw new IllegalArgumentEception("Invalid length");
        }

        SomeObject value;

        ...

        value = injectedObject.someOtherMethod();

        ...

        // dit hier
        return requireNonNull(value, "Preventing violation of non-null contract for the return value");
    }
Ah oke... ik moet even goed kijken. Is dit javascript?

Maar je doet dus een controle in de return. Ik zou dan zelf voordat ik return kijken of ie niet null is.
Het is Java.

Dit doet het zelfde.
        // dit hier
        requireNonNull(value, "Preventing violation of non-null contract for the return value");

        return value;
    } 

Post condities zijn condities die waar moeten zijn aan het eind van de methode.
Objects.requireNonNull(Object, String) source code
Ah oke... als ik het goed begrijp is dat dus hetzelfde als dit?

<?php
if ($value === null) {
throw Exception('you fool!');
}
return $value;
?>
Zo bedoel je?
Zoals hierboven, gebruik ik..

Reageren