Ola,

Nog weer even een leuke...

Stel we hebben een of andere (algemene) copy functie. Als deze false teruggeeft (het kopiëren is mislukt) wil ik een exception gooien. Weer even uit nieuwsgierigheid. Heeft voorbeeld A of voorbeeld B jullie voorkeur?

A:

<?php
if (!copy('foo.php', 'bar.php')) {
throw new Exception('could not make copy bla bla bla...');
}
?>


B:

<?php
if (copy('foo.php', 'bar.php')) {
return;
}
throw new Exception('could not make copy bla bla bla...');
?>
In voorbeeld A zeg ik "als het kopiëren is mislukt gooi dan een exception. In voorbeeld B zeg ik "als het kopiëren is GELUKT verlaat dan de functie. Als het kopiëren dan mislukt dan wordt er niet gereturned en wordt alsnog de exception gegooid. Twee verschillende benaderingswijzen. Methode A voelt denk ik het meest intuïtief en prettig, maar methode B is weer ietsje sneller. Ik weet dat veel mensen voor methode A zouden kiezen, maar ik ben benieuwd of hier ook programmeurs zijn die juist vaker een oplossing a la methode B gebruiken. Van de 2 is methode B dus ietsje sneller (omdat er een positieve vergelijking plaatsvindt in plaats van een negatieve vergelijking zoals bij A). Wat heeft jullie voorkeur?
Optie A, de throw moet zorgen dat de functie optijd stopt.

Maar stel dat de throw niet afhankelijk is van die if, maar van andere dingen optie B.
Wouter, thanks voor je reactie. Het gaat me eigenlijk vooral om de constructie. Als we het breder trekken... dus niet toegespitst op een bepaalde situatie, kies je dan voor A of B? Beide functies doen hetzelfde:

A:

<?php
public function foo() {
if (!$gelukt) {
throw Exception(); // het is niet gelukt->exception!
}
}
?>

B:

<?php
public function foo() {
if ($gelukt) {
return; // gelukt->verlaat de functie!
}
throw Exception(); // het is niet gelukt->exception!
}
?>
Wat heeft jouw voorkeur?
Ozzie, waarom wil je dat allemaal weten? Beide functies doen toch hetzelfde?
Precies, beiden doen hetzelfde. Maar ik ben dus benieuwd welke variant jullie meestal gebruiken. Ik gebruik wel eens de variant met return (optie B). Ik deed dat omdat dat iets sneller is. Maar ik denk dat optie A beter leesbaar is, en ik neig steeds meer naar het schrijven van leesbare code dan naar code die een ietsje pietsie sneller is. Maar ik ben dus benieuwd hoe anderen daar mee omgaan. Vandaar mijn vraag! :)
Gelukkig geef je al je eigen antwoord: "Maar ik denk dat optie A beter leesbaar is, en ik neig steeds meer naar het schrijven van leesbare code"

Er is geen wetboek, wil je A gebruiken dan gebruik jij lekker A
Allright ;)
En wat gebruik jij zelf meestal dan?
Ozzie PHP op 04/01/2014 02:08:18

Allright ;)
En wat gebruik jij zelf meestal dan?


A, het is leesbaarder.
Thanks Dos.

Eigenlijk is de conclusie dus dat het beter is om leesbaardere code te schrijven in plaats van code die net een ietsiepietsje sneller is, maar minder goed leesbaar. Juiste conclusie?
Tenzij je voor een micro processor aan het programmeren bent zal dat inderdaad het advies zijn.
Dos Moonen op 04/01/2014 17:17:49

Tenzij je voor een micro processor aan het programmeren bent zal dat inderdaad het advies zijn.
Of tenzij je een andere goede reden hebt, zoals bij Yoda-condities: “If false you are ...”

Reageren