waar exception gooien?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

08/05/2014 12:19:34
Quote Anchor link
Ola peepz,

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

Vroeger deed ik dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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?
Gewijzigd op 08/05/2014 15:17:40 door Ozzie PHP
 
PHP hulp

PHP hulp

04/02/2023 16:45:01
 
Snelle Jaap

Snelle Jaap

08/05/2014 14:43:03
Quote Anchor link
Ik doe het altijd met try catch.
 
Ozzie PHP

Ozzie PHP

08/05/2014 14:43:54
Quote Anchor link
Euh... dat is op dit voorbeeld toch niet van toepassing :-s
 
Dos Moonen

Dos Moonen

08/05/2014 15:11:26
Quote Anchor link
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.
Gewijzigd op 08/05/2014 15:16:41 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

08/05/2014 15:19:34
Quote Anchor link
>> 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"?
 
Dos Moonen

Dos Moonen

08/05/2014 15:46:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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");
    }
 
Ozzie PHP

Ozzie PHP

08/05/2014 15:52:37
Quote Anchor link
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.
 
Dos Moonen

Dos Moonen

08/05/2014 15:59:25
Quote Anchor link
Het is Java.

Dit doet het zelfde.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
        // 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
 
Ozzie PHP

Ozzie PHP

08/05/2014 16:03:58
Quote Anchor link
Ah oke... als ik het goed begrijp is dat dus hetzelfde als dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ($value === null) {
  throw Exception('you fool!');
}

return $value;
?>

Zo bedoel je?
 
- Pepijn  -

- Pepijn -

08/05/2014 16:25:47
Quote Anchor link
Zoals hierboven, gebruik ik..
Gewijzigd op 08/05/2014 16:25:59 door - Pepijn -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.