[oop] wat zou jij doen?
Een vraagje puur uit nieuwsgierigheid. Ik heb een stukje code:
Code (php)
1
2
3
4
2
3
4
<?php
if ($path->isDir()) $this->ensureDirectory(str_replace($directory, $directory_copy, $path->getPathname()));
else $this->copy($path->getPathname(), str_replace($directory, $directory_copy, $path->getPathname()));
?>
if ($path->isDir()) $this->ensureDirectory(str_replace($directory, $directory_copy, $path->getPathname()));
else $this->copy($path->getPathname(), str_replace($directory, $directory_copy, $path->getPathname()));
?>
Op zich niks spannends aan, maar zoals je ziet zit er 2x dezelfde str_replace in. Dat vind ik eigenlijk best stom staan, 2x dezelfde riedel... Zouden jullie dit zo laten? Of voor die str_replace een variabele aanmaken?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$new_path = str_replace($directory, $directory_copy, $path->getPathname());
if ($path->isDir()) $this->ensureDirectory($new_path);
else $this->copy($path->getPathname(), $new_path);
?>
$new_path = str_replace($directory, $directory_copy, $path->getPathname());
if ($path->isDir()) $this->ensureDirectory($new_path);
else $this->copy($path->getPathname(), $new_path);
?>
In voorbeeld 1 is de code wat langer en heb je dus 2x zo'n lange riedel. In voorbeeld 2 is de code korter en duidelijker, maar maak je onnodig een nieuwe variabele aan. Wat doen jullie in dit soort situaties? Wat zijn jullie afwegingen? Alvast bedankt voor de reacties.
Wordt dit gebruikt voor een cli applicatie?
Zouden meer mensen kiezen voor voorbeeld 2? Zijn er ook mensen die kiezen voor voorbeeld 1?
Iets met Command Line Interface, dat ding wat jij niet op de server wil gebruiken. ;)
Welk voorbeeld heeft jullie voorkeur? 1 of 2?
Het zal vast iets zwaarder zijn qua performance maar daar ben ik eigenlijk nooit zoveel mee bezig
Gewijzigd op 03/01/2014 21:37:41 door NOLot -
So far, 2 stemmen voor voorbeeld 2 en nog geen stemmen voor voorbeeld 1.
Graag nog meer stemmen, laat maar komen hoor :)
Als ik zo code moet gaan debuggen dan pas ik.
Waarom gebruik je geen blokhaken?
Dit maakt je code i.i.g. leesbaarder.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if( $path->isDir() )
{
$this->ensureDirectory( str_replace( $directory, $directory_copy, $path->getPathname() ) );
}
else
{
$this->copy( $path->getPathname() , str_replace( $directory, $directory_copy , $path->getPathname() ) );
}
?>
if( $path->isDir() )
{
$this->ensureDirectory( str_replace( $directory, $directory_copy, $path->getPathname() ) );
}
else
{
$this->copy( $path->getPathname() , str_replace( $directory, $directory_copy , $path->getPathname() ) );
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$new_path = str_replace( $directory, $directory_copy, $path->getPathname() );
if( $path->isDir() )
{
$this->ensureDirectory( $new_path );
}
else
{
$this->copy( $path->getPathname(), $new_path );
}
?>
$new_path = str_replace( $directory, $directory_copy, $path->getPathname() );
if( $path->isDir() )
{
$this->ensureDirectory( $new_path );
}
else
{
$this->copy( $path->getPathname(), $new_path );
}
?>
Persoonlijk zou ik voor de overzichtelijkheid optie 2 gaan.
Misschien net even 1 variabele meer, maar het maakt het verhaal wel beter leesbaar.
(Kuch, misschien komt het door die blokhaken.... ;) )
Gewijzigd op 03/01/2014 21:44:38 door Bart V B
Anders wordt het zo'n uitgerekte soep-zooi. Bij meerdere regels gebruik ik wel accolades, maar dan zo:
Mja, kwestie van smaak en gewenning.
Nog meer stemmers? Laat je hoooooren.... :)
Het viel me gewoon op. Normaal gesproken lees ik toch best snel code.
Maar het brijtje van een paar regels waar jij graag een stemronde over wenst, is toch wel prettig dat het een beetje standaard leesbaar is.
Zonder blokhaken is dat (vind ik persoonlijk) irritant.
Ook een spatie tussen if( $foo ) maakt het sneller leesbaar.
Dat is geen uitgerekte soep, maar meer collegiaal. ;)
Je hebt ook de optie (bijvoorbeeld in python) dat je moet inspringen, dat maakt het ook al duidelijker zonder blokhaken.
Maar dat doe je ook niet....
EDIT
even een voorbeeld:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
n = raw_input("Integer? ")
n = int(n)
if n < 0:
print "The absolute value of",n,"is",-n
else:
print "The absolute value of",n,"is",n
n = int(n)
if n < 0:
print "The absolute value of",n,"is",-n
else:
print "The absolute value of",n,"is",n
Gewijzigd op 03/01/2014 22:10:56 door Bart V B
Duidelijker kan ik het niet maken...
Maar mijn eigenlijke vraag ging er dus over of je die str_replace in een variabele moet stoppen ja of nee. Ik had eigenlijk verwacht dat jullie voor voorbeeld 1 zouden gaan, in plaats van voorbeeld 2 omdat je in dit laatste geval onnodig een variabele kopieert. In het verleden werd dit altjd afgeraden.
Vanwaar wil je dergelijke verantwoordelijkheden neerleggen bij een website/cms ?
Qua code opmaak, hou je aan de psr regels, en wijk hier nooit vanaf!!
Misschien is het makkelijker te beoordelen, als je de betreffende class hier plaatst, of een linkje naar GitHub??
Het is een stukje van een filesystem class. Voor de rest niet zo spannend allemaal. Het gaat me alleen even om dat stukje. Moet je iets in een variabele stoppen om je code beter leesbaar te maken. Dat is de kernvraag. Ik heb nu 3 stemmen voor optie 2, dus jullie zouden inderdaad een extra variabele aanmaken om code beter leesbaar te maken. Dat vind ik wel opvallend, omdat mij eerder wel eens is verteld dat je dat niet moet doen.
Persoonlijk vind ik een filesystem class niet thuishoren in een website/cms, vanwaar wil je dergelijke verantwoordelijkheden geven aan een website/cms?
Euh, waarom zou je dat niet doen? Ik zie het probleem niet echt. Ik ben bezig met een framework waar ik uiteindelijk gemakkelijk een website mee moet maken. Dan is het handig als ik makkelijk bestanden kan kopiëren enz.
Een webapplicatie hoort naar mening geen server side functies te hebben, tevens worden php functies als exec, mkdir, etc op 85% van de webhosting omgevingen geblokkeerd, daar dit onveilig is.
Stel ik maar een soort "sjabloon" voor een website, dan kun je die met dit soort functies kopiëren om even een voorbeeldje te noemen.
En welk voordeel heeft dit dan? En hoe beveilig jij jouw server tegen misbruik van deze functies?
Het voordeel kan zijn dat ik met een druk op de knop een hele website-structuur kan creëren. En hoe ik misbruik voorkom? Ik bouw zo'n functie alleen in in mijn eigen gedeelte van het cms en niet in de cms van een eventuele klant. Ik ben dus de enige die het kan bedienen.
En hopelijk hackers al helemaal niet!!
Mijn mening, misschien erg paranoia, maar dergelijke opties/functies hoort een website/cms nooit en te nimmer te beschikken, zie ook geen reden toe om dit te gebruiken voor het creëren van een website.
Persoonlijk zou ik gaan voor de mogelijkheden van composer en git.
En hopelijk hackers al helemaal niet!!
Nee, en... hopelijk nee :)
Als je site gehackt wordt ben je toch de lul, of je nou wel of niet een class met zulke functies hebt. Php heeft die functies natuurlijk ook gewoon native on board (alleen iets minder uitgebreid).