vergelijken en returnen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

03/01/2014 23:46:58
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (!copy('foo.php', 'bar.php')) {
  throw new Exception('could not make copy bla bla bla...');
}

?>



B:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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?
Gewijzigd op 03/01/2014 23:48:12 door Ozzie PHP
 
PHP hulp

PHP hulp

28/11/2024 20:39:08
 
Wouter J

Wouter J

04/01/2014 00:25:43
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

04/01/2014 00:40:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
public function foo() {
  if (!$gelukt) {
    throw Exception(); // het is niet gelukt->exception!
  }
}

?>


B:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
public function foo() {
  if ($gelukt) {
    return; // gelukt->verlaat de functie!
  }
  throw Exception(); // het is niet gelukt->exception!
}
?>

Wat heeft jouw voorkeur?
 
- Raoul -

- Raoul -

04/01/2014 01:07:40
Quote Anchor link
Ozzie, waarom wil je dat allemaal weten? Beide functies doen toch hetzelfde?
 
Ozzie PHP

Ozzie PHP

04/01/2014 01:14:26
Quote Anchor link
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! :)
 
Wouter J

Wouter J

04/01/2014 01:54:11
Quote Anchor link
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
Gewijzigd op 04/01/2014 01:54:31 door Wouter J
 
Ozzie PHP

Ozzie PHP

04/01/2014 02:08:18
Quote Anchor link
Allright ;)
En wat gebruik jij zelf meestal dan?
 
Dos Moonen

Dos Moonen

04/01/2014 11:16:45
Quote Anchor link
Ozzie PHP op 04/01/2014 02:08:18:
Allright ;)
En wat gebruik jij zelf meestal dan?


A, het is leesbaarder.
 
Ozzie PHP

Ozzie PHP

04/01/2014 16:22:02
Quote Anchor link
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?
 
Dos Moonen

Dos Moonen

04/01/2014 17:17:49
Quote Anchor link
Tenzij je voor een micro processor aan het programmeren bent zal dat inderdaad het advies zijn.
 
Ward van der Put
Moderator

Ward van der Put

04/01/2014 17:30:11
Quote Anchor link
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 ...”
 
Ozzie PHP

Ozzie PHP

04/01/2014 17:45:07
Quote Anchor link
>> 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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if (is_dir($path)) {
  // het is een directory, doe iets
} else {
  // het is een file, doe iets anders
}

?>

B:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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?
Gewijzigd op 04/01/2014 17:45:56 door Ozzie PHP
 
Wouter J

Wouter J

04/01/2014 18:54:24
Quote Anchor link
>> Wat zijn dat Yoda condities?
Ken jij een site die google heet? php yoda conditions -> eerste resultaat http://en.wikipedia.org/wiki/Yoda_conditions

Ward, ik zou niet weten wat Yoda conditions hier mee te maken hebben?

>> Kies je voor optie A of B?
B, maar niet omdat ik duidelijk wil programmeren. Gewoon omdat $path ook geen dir en geen file kan zijn.
 
- Raoul -

- Raoul -

04/01/2014 19:27:48
Quote Anchor link
"ietsie pietsie sneller" => Ben je nu geneigd om lelijkere code te schrijven om gewoon wat meer snelheid te hebben?
 
Ward van der Put
Moderator

Ward van der Put

04/01/2014 19:49:26
Quote Anchor link
Wouter J op 04/01/2014 18:54:24:
>> Wat zijn dat Yoda condities?
Ken jij een site die google heet? php yoda conditions -> eerste resultaat http://en.wikipedia.org/wiki/Yoda_conditions

Ward, ik zou niet weten wat Yoda conditions hier mee te maken hebben?

The answer, my friend, is in your answer.

Dangerous and disturbing this puzzle is.
Only a Jedi could have erased those files.
But who, and why, harder to answer.
Meditate on this I will.
 
Ozzie PHP

Ozzie PHP

04/01/2014 20:19:32
Quote Anchor link
@Wouter:

>> 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?
 
- Raoul -

- Raoul -

04/01/2014 20:38:40
Quote Anchor link
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.
Gewijzigd op 04/01/2014 20:39:14 door - Raoul -
 
Ozzie PHP

Ozzie PHP

04/01/2014 20:44:13
Quote Anchor link
>> Je hebt dus duidelijk nog niks geleerd van al je "wat is sneller" topics.

Geen domme dingen zeggen Raoul. Dat ben ik van jou niet gewend.

Ik heb er zeker wel iets van geleerd, de vraag is alleen waar je je focus op legt en waar je de voorkeur aan geeft.
 
Wouter J

Wouter J

04/01/2014 20:58:09
Quote Anchor link
>> 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.
 
Ozzie PHP

Ozzie PHP

04/01/2014 21:04:15
Quote Anchor link
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?
 
Ozzie PHP

Ozzie PHP

05/01/2014 21:32:03
Quote Anchor link
* BUMP *

Ozzie PHP op 04/01/2014 21:04:15:
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

if (is_dir($path)) {
  // het is een directory, doe iets
} else {
  // het is een file, doe iets anders
}

?>

B:

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

Graag jullie reactie.
 

Pagina: 1 2 volgende »



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.