1 opdracht per regel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

20/03/2014 14:27:53
Quote Anchor link
Hey guys,

Bestaat er binnen het programmeren eigenlijk zoiets als een "1 opdracht per regel" principe?

Wat ik bedoel is dit. Je kan iets in 1 regel schrijven (wat ik zelf wel eens doe):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return !empty($_SERVER['HTTP_ACCEPT_ENCODING']) ? explode(',', str_replace([' ', ';'], ['', ','], $_SERVER['HTTP_ACCEPT_ENCODING'])) : [];
?>

Maar je kan ook 1 opdracht per regel doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if (empty($_SERVER['HTTP_ACCEPT_ENCODING'])) return [];
$_SERVER['HTTP_ACCEPT_ENCODING'] = str_replace([' ', ';'], ['', ','], $_SERVER['HTTP_ACCEPT_ENCODING']);
$_SERVER['HTTP_ACCEPT_ENCODING'] = explode(',', $_SERVER['HTTP_ACCEPT_ENCODING']);
return $_SERVER['HTTP_ACCEPT_ENCODING'];
?>

Als je 1 opdracht per regel doet, is het beter leesbaar... en nu vroeg ik me dus af of er een soort "regel/principe" bestaat waarbij je slechts 1 opdracht per regel uitvoert. Iemand die dat weet?

Verplaatst naar "Algemene PHP scripting en meer", het topic heeft geen raakvlak met OOP.[/modedit]
Gewijzigd op 20/03/2014 14:40:30 door Wouter J
 
PHP hulp

PHP hulp

18/04/2024 05:54:50
 
Wouter J

Wouter J

20/03/2014 14:34:14
Quote Anchor link
- regels bestaan er niet
- principes gaan over de gedachtegang, niet over de code er uit ziet, staan over welke code standaard je gebruikt.

Of er zo'n coding standard bestaat? Er zal vast wel een bedrijf ergens op de wereld die code standaard hebben...
 
Michael -

Michael -

20/03/2014 14:35:04
Quote Anchor link
Altijd grappig al jouw vragen :) Wat vind je hiervan, wat vind je daarvan, hoe zou jij dit doen, hoe zou jij dat doen.

Heel veel dingen zijn natuurlijk gewoon persoonlijk. Ik kan me niet voorstellen dat er een wereldwijde afspraak is hoe je iets moet opbouwen. Je zou hier hooguit in een SCRUM team afspraken over kunnen maken omdat dan iedereen met je code overweg moet kunnen.

In sommige gevallen doe ik het als voorbeeld 1, en als het echt te lang wordt (als in; in de editor past het niet meer op 1 regel, wordt onoverzichtelijk) doe ik het als voorbeeld 2. Maar net hoe het uit komt.
Gewijzigd op 20/03/2014 14:36:01 door Michael -
 
Wouter J

Wouter J

20/03/2014 14:39:45
Quote Anchor link
Michael, php kent de PSR standaarden die door praktisch alle open source projecten worden ondersteund.
 
Michael -

Michael -

20/03/2014 14:41:54
Quote Anchor link
Komt mij niet bekend voor. Heb je hier een linkje met uitleg voor? Google brengt me weer eens alleen onzin :)
 
Ozzie PHP

Ozzie PHP

20/03/2014 14:44:16
Quote Anchor link
Ah oke... ik dacht misschien bestaat zo'n principe. Maar nee dus :)

Toevoeging op 20/03/2014 14:45:33:

Is voorbeeld 2 trouwens slimmmer dan voorbeeld 1?

Voorbeeld 2 is beter leesbaar, maar je kopieert wel een paar keer variabelen. Wat is de beste optie?
 
Wouter J

Wouter J

20/03/2014 14:46:52
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 15:08:33
Quote Anchor link
PSR-2 is een stijlboek, geen woordenboek.

Een woordenboek is vrij resoluut: dit woord schrijven we altijd zó en dat woord komt in onze taal niet voor. Een woordenboek hebben we vaak ook helemaal niet nodig, want onze woordenschat en de correcte spelling zijn al grotendeels vastgelegd in PHP zelf.

Een stijlboek is genuanceerder: we schrijven iets liever zus dan zo. En dan komt het aan op smaak, leesbaarheid, algemene of juist zeldzame toepassingen, enzovoort.

Maar om de vraag van Ozzie te beantwoorden. Ja, ik gebruik liever één expressie per regel. Dat houdt code goed leesbaar. En het werkt makkelijker als je wat wilt verplaatsen of herschrijven.

Als je heel streng bent voor jezelf, en voor je eigen code, moet je de structuur liefst in één oogopslag zien, zonder blind te varen op de automatische highlighting van samenhangende haakjes en accolades in je editor.
 
Ozzie PHP

Ozzie PHP

20/03/2014 15:17:15
Quote Anchor link
Thanks Ward,

Ik was eigenlijk altijd ervoor om zoveel mogelijk op 1 regel te proppen. Maar één expressie per regel leest inderdaad een stuk makkelijker, en maakt het voor jezelf ook makkelijker om de code te schrijven.

Doe je echt altijd maar 1 expressie per regel?

Je zou dus ook echt dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$_SERVER
['HTTP_ACCEPT_ENCODING'] = explode(',', $_SERVER['HTTP_ACCEPT_ENCODING']);
return $_SERVER['HTTP_ACCEPT_ENCODING'];
?>

En dus niet dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return explode(',', $_SERVER['HTTP_ACCEPT_ENCODING']);
?>

Correct?
 
Wouter J

Wouter J

20/03/2014 15:25:14
Quote Anchor link
Die 2 code blokken doen beide iets totaal anders. Dat is appels met peren vergelijken...
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 15:26:33
Quote Anchor link
Ik deed vroeger, sterk vereenvoudigd, vaak zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$y
= c(b(a($x)));
?>

Dat is bij nader inzien helemaal niet zo handig, vooral wanneer de functies aanzienlijk complexer zijn met een argumenten, objecten, enzovoort.

Dan toch maar liever zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$y
= a($x);
$y = b($y);
$y = c($y);
?>

Je kunt het ook nog anders zeggen. Algoritmen en natuurwetten kun je vaak in één vergelijking uitschrijven. Hetzelfde geldt voor veel economische wetten. Maar dat wil niet zeggen dat dat ook de beste manier is om ze te programmeren. Dan kun je vaak beter de stappen van het algoritme uitschrijven, zoals je dat bij algebra ooit geleerd hebt.
 
Ozzie PHP

Ozzie PHP

20/03/2014 15:30:31
Quote Anchor link
@Wouter... lol... sorry, ja ik zie het.

Even opnieuw voor Ward, want m'n voorbeeld was wat krom.

Zou je dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$foo
= explode('/', $foo);
return $foo;
?>

Of zou je dit doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
return explode('/', $foo);
?>

Ik neem dan aan dat je voor de 1e optie kiest? Correct?

>> Je kunt het ook nog anders zeggen. Algoritmen en natuurwetten kun je vaak in één vergelijking uitschrijven. Hetzelfde geldt voor veel economische wetten. Maar dat wil niet zeggen dat dat ook de beste manier is om ze te programmeren. Dan kun je vaak beter de stappen van het algoritme uitschrijven, zoals je dat bij algebra ooit geleerd hebt.

Je voorbeeld is duidelijk. Per regel is het inderdaad veel duidelijker.
Gewijzigd op 20/03/2014 15:30:50 door Ozzie PHP
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 15:36:52
Quote Anchor link
Ik zou de eerste aanbevelen en de tweede gebruiken :-)

Maar dat is geen goed voorbeeld. Op de return wordt het resultaat toegewezen aan een variabele elders buiten de methode. Dan heeft het niet zoveel zin vlak voor de return nog $foo te wijzigen, al helemaal niet omdat $foo ook nog eens op een enkele reis richting destructor wordt gestuurd bij het verlaten van de methode.
 
Ozzie PHP

Ozzie PHP

20/03/2014 15:42:56
Quote Anchor link
Ik begrijp ongeveer wat je bedoelt... maar als er meerdere stappen zijn die $foo wijzigen, dus zeg maar zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function foo() {
  $foo = $this->foo;
  $foo = str_replace([' ', ';'], ['', ','], $foo);
  $foo = explode(',', $foo);
  return $foo;
}

?>

Zou je het doen zoals hierboven, of zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function foo() {
  $foo = $this->foo;
  $foo = str_replace([' ', ';'], ['', ','], $foo);
  return explode(',', $foo);
}

?>

Natuurlijk zitten we hier nu heel erg op detail-niveau te praten, maar ik ben wel benieuwd waarom jij voor het een of het ander zou kiezen. Dan kan ik dat namelijk zelf ook gaan toepassen.
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 15:51:30
Quote Anchor link
Dan zou ik inderdaad de eerste vorm kiezen. Je wilt de operaties die je op $foo loslaat duidelijk op een rij hebben. Letterlijk en figuurlijk. En je wilt de volgorde misschien aanpassen, er nog iets tussen zetten, enzovoort.
 
Ozzie PHP

Ozzie PHP

20/03/2014 15:55:00
Quote Anchor link
Oké, helder! Ik ga eens proberen om dit principe overal toe te passen. Volgens mij kan ik daar veel profijt uit halen.
 
Wouter J

Wouter J

20/03/2014 16:09:08
Quote Anchor link
Vanuit haskell ben ik gewent om zoveel mogelijk te chainen, dus dat gebruik ik ook. Overigens gebruik ik dan wel de korte haskell-like functie namen en niet die belachelijke lange PHP functienamen.

Voor een voorbeeldje zie: http://www.phphulp.nl/php/script/php-algemeen/fn-lazy-loading-currying-etc/1989/

Merk overigens het verschil op: In PHP plaats ik het vaak op meerdere regels, aangezien het anders onleesbaar is. Haskell plaats ik wel op 1 regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
length $ takeWhile (<= 200) $ map (^2) [1..]
Gewijzigd op 20/03/2014 16:10:54 door Wouter J
 
Ozzie PHP

Ozzie PHP

20/03/2014 16:20:39
Quote Anchor link
Ah, dat gaat me ff boven de pet Wouter :)
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 16:21:18
Quote Anchor link
Wouter, maar die heeft de poëtische schoonheid van een gedicht...

En gedichten zijn niet zo makkelijk in een stijlgids te vatten.
Meestal helemaal niet zelfs — sinterklaasgedichten en poeziealbums uitgezonderd.
Gewijzigd op 20/03/2014 16:21:55 door Ward van der Put
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

20/03/2014 18:41:14
Quote Anchor link
Offtopic:

Bij Albastine zeggen ze: Dichten kunnen we wel maar rijmen ......


Maar wat verstaan jullie eigenlijk onder één regel?
Ik heb weleens query's van een paar honderd tekens, die ga ik toch echt over meerdere regels verspreiden.
 
Ward van der Put
Moderator

Ward van der Put

20/03/2014 19:07:44
Quote Anchor link
Ger van Steenderen op 20/03/2014 18:41:14:
Maar wat verstaan jullie eigenlijk onder één regel?
Ik heb weleens query's van een paar honderd tekens, die ga ik toch echt over meerdere regels verspreiden.
Die query's schrijf je waarschijnlijk niet in PHP, nietwaar?

En dan gelden de regels van PHP niet langer, maar die van de string die je aan een andere parser / engine / interpreter / whatsitsname moet doorgeven.
 

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.