Door
Ozzie PHP
op 03-01-2014 23:46
gewijzigd op 03-01-2014 23:48
2.174 views
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?
>> Tenzij je voor een micro processor aan het programmeren bent zal dat inderdaad het advies zijn.
Oké :)
>> Of tenzij je een andere goede reden hebt, zoals bij Yoda-condities: “If false you are ...”
Wat zijn dat Yoda condities?
Nog even een andere vraag. Als je het dan hebt over duidelijk programmeren. Kies je voor optie A of B?
A:
<?php
if (is_dir($path)) {
// het is een directory, doe iets
} else {
// het is een file, doe iets anders
}
?>
B:
<?php
if (is_dir($path)) {
// het is een directory, doe iets
} elseif (is_file($path)) {
// het is een file, doe iets anders
}
?>
In voorbeeld A ga je er vanuit dat als het geen directory is het automatisch een file is. In voorbeeld B doe je een overbodige controle of het een file is. Echter, je ziet dan wel sneller dat het om een file gaat. Kieze jullie voor A of B?
>> B, maar niet omdat ik duidelijk wil programmeren. Gewoon omdat $path ook geen dir en geen file kan zijn.
Oké, maar wat nu als zeker is dat $path een path is? Voor welke optie kies je dan?
@Raoul:
>> "ietsie pietsie sneller" => Ben je nu geneigd om lelijkere code te schrijven om gewoon wat meer snelheid te hebben?
Dat is wat ik zeg. Dat doe ik dus vaak wel. Ik laat dan snelheid zwaarder wegen dan duidelijke code. Daar gaat de hele vraag juist over. En mijn vraag aan jou is dus wat jij zwaarder laat wegen?
Volgens jou zou die tweede code snippet dus sneller zijn dan die eerste? Hoeveel zou dat dan zijn? 1 nanoseconde? Minder? Merkt de server daar iets van? Nee. Merkt de eindgebruiker daar iets van? Nee. Kortom, boeit het iets? Nee.
Je hebt dus duidelijk nog niks geleerd van al je "wat is sneller" topics.
OOP en lelijke geoptimaliseerde code gaan niet samen, dan doe je best alles gewoon procedureel.
>> Oké, maar wat nu als zeker is dat $path een path is? Voor welke optie kies je dan?
Hoe kun je nou zonder controleren zeker weten dat $path een path is? Juist, dat kun je niet zeker weten. De method weet niet in welke omstandigheden hij gebruikt wordt, dus hij weet ook niet zeker of $path een path is.
Wouter, stel ik wil de inhoud van een directory kopiëren naar een andere directory. Dan kan ik toch alle paden in een directory uitlezen? En dan per pad bekijken of het om een file of een directory gaat? In zo'n situatie weet je dan toch al dat $path een path is?
Wouter, stel ik wil de inhoud van een directory kopiëren naar een andere directory. Dan kan ik toch alle paden in een directory uitlezen? En dan per pad bekijken of het om een file of een directory gaat? In zo'n situatie weet je dan toch al dat $path een path is?
Ik stel de vraag nog even opnieuw:
Ozzie PHP op 04/01/2014 17:45:07
Nog even een andere vraag. Als je het dan hebt over duidelijk programmeren. Kies je voor optie A of B?
A:
<?php
if (is_dir($path)) {
// het is een directory, doe iets
} else {
// het is een file, doe iets anders
}
?>
B:
<?php
if (is_dir($path)) {
// het is een directory, doe iets
} elseif (is_file($path)) {
// het is een file, doe iets anders
}
?>
In voorbeeld A ga je er vanuit dat als het geen directory is het automatisch een file is. In voorbeeld B doe je een overbodige controle of het een file is. Echter, je ziet dan wel sneller dat het om een file gaat. Kieze jullie voor A of B?