[PHP] Coding standards: if ? then : nothing else;

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Persoonlijk vind ik de ternary operator een prachtig ding voor kleine if-then-else constructies, bijvoorbeeld:

PHP:
1
isset($_GET['id']) ? $id = intval($_GET['id']) : $id = 0;


Pas wanneer het wat groter wordt pak ik dan IF erbij en netjes extra regels voor de haakjes, zo:
PHP:
1
2
3
4
if ( ... )
{
  ...
}


Maar bij de ternary operator is een "else" gedeelte verplicht. Dat kan ik wel "faken", zo bijvoorbeeld:
PHP:
1
isset($_GET['id']) ? $id = intval($_GET['id']) : '';

maar echt fraai vind ik dat eigenlijk niet. Vandaar dat ik 't hier nu maar 'ns post voor commentaar. Graag hoor ik wat jullie een nette oplossing vinden voor de "kleine" if-then constructies.

[ Voor 53% gewijzigd door Gwaihir op 22-05-2007 22:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het is er, je kunt het gebruiken, en het enige nadeel is dat je code onduidelijk kan worden. Als je hem verstandig gebruikt, is er niks mis mee. Het kan een assignment of wat regels code schelen.
PHP:
1
2
3
4
printf ( '<a href="%s">%s</a>',
   $page->getRef (),
   $short ? $page->getRefTitle () : $page->getTitle ()
);

Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Meestal doe ik het nog wat korter ;)
PHP:
1
2
3
<?php
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
?>


Maar ik gebruik het sowieso eigenlijk alleen voor het ophalen van request gegevens.

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Waarom een lege string of de integer 0 invoeren als je gewoon null bedoelt? Het zal mierenneukerij zijn, maar doe het lekker zo:
PHP:
1
$foo = ($bar)? $get->some_thing() : null;
:)

En het is verplicht ja, maar is dat zo erg? Het is niet gelijk een lelijke constructie ofzo.

Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
--MeAngry-- schreef op dinsdag 22 mei 2007 @ 22:18:
Maar ik gebruik het sowieso eigenlijk alleen voor het ophalen van request gegevens.
Ik doorgaans ook, maar vandaag kwam ik tegen:
PHP:
1
$uid > 0 ? $_SESSION['uid'] = $uid : '';

Dat $uid is dan net opgezocht bij een succesvolle inlog. Gaat er ergens iets niet goed, dan staat 't nog op z'n aanvankelijke -1 en mag $_SESSION['uid'] niet gezet worden. Ik heb dan dus echt helemaal niets te doen; ik wijs die lege string (of null) nergens aan toe en tja, dat stoorde me toch als 'n tikkie lelijk.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Maar bij de ternary operator is een "else" gedeelte verplicht. Dat kan ik wel "faken", zo bijvoorbeeld:
Doe het dan zo:

PHP:
1
isset ( $_GET['id'] ) && $id = intval ( $_GET['id'] );

[ Voor 43% gewijzigd door XWB op 22-05-2007 22:46 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Birdie schreef op dinsdag 22 mei 2007 @ 22:37:
[...]

Ik doorgaans ook, maar vandaag kwam ik tegen:
PHP:
1
$uid > 0 ? $_SESSION['uid'] = $uid : '';

Dat $uid is dan net opgezocht bij een succesvolle inlog. Gaat er ergens iets niet goed, dan staat 't nog op z'n aanvankelijke -1 en mag $_SESSION['uid'] niet gezet worden. Ik heb dan dus echt helemaal niets te doen; ik wijs die lege string (of null) nergens aan toe en tja, dat stoorde me toch als 'n tikkie lelijk.
dat klinkt echt heel dom.

nofi, maar wat daar gebeurt is gewoon dit:
PHP:
1
if ($uid > 0) $_SESSION['uid'] = $uid;

hij doet niks met de 'else' van de constructie, en kent de waarde uit het geheel aan niks toe.

heel zonde dus, want het wordt wel geparsed

de constructie is dus:
$res = boolexpr ? truepart : falsepart;
(waar alleen het bold van gebruikt wordt)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
@Hacku: Juist, die constructie zocht ik. :)

@BasieP: Ja, dat gebeurt daar exact :) . Ik denk niet dat de parser daar nu echt noemenswaardig tijd op verliest. Er zijn wel meer aanroepen waarvan de returnwaarde (een statuscode) vaak niet daadwerkelijk toegewezen wordt.

De vraag is evenwel vooral wat eenieder het leesbaarst vindt staan, gegeven dat if-blokken bij ons in principe zo ruim neergezet worden als ik in startpost aangaf.

- Hacku's schrijfwijze - kort, krachtig, misschien te cryptisch?
- Een if-then van (inclusief de haakjes) vier regels - heel consequent de coding standaard volgen
- Jouw (BasieP's) manier

Acties:
  • 0 Henk 'm!

Verwijderd

Persoonlijk vind ik het lelijk en onduidelijk, ik gebruik altijd de methode met accolades.
Vergroot, in mijn ogen, de leesbaarheid, qua performance zou het sowieso niet uitmaken welke van de twee je kiest, dus zou ik altijd voor de meest leesbare gaan.

Just my 2 cents :)

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
- Hacku's schrijfwijze - kort, krachtig, misschien te cryptisch?
Da's idd de kortste maar eerlijk gezegd gebruik ik hem zelf amper. Eenmaal je een hoop apps ontworpen hebt wordt je die steeds terugkerende controles spuugzat, ik doe het altijd zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
define ( 'GET', 0 );
define ( 'POST', 1 );
define ( 'COOKIE', 2 );
define ( 'SESSION', 3 );
define ( 'GETPOST', 4 );
define ( 'POSTGET', 5 );

function strGetVariable ( $varName, $varType, $defaultValue = '' )
{
    $sResult = $defaultValue;
    
    switch ( $varType )
    {
        case GET :
        {
          if (isset($_GET[$varName]) && $_GET[$varName] != '') $sResult = $_GET[$varName];
          break;
        }
        case POST :
        {
          if (isset($_POST[$varName]) && $_POST[$varName] != '') $sResult = $_POST[$varName];
          break;
        }
        case COOKIE :
        {
          if (isset($_COOKIE[$varName]) && $_COOKIE[$varName] != '') $sResult = $_COOKIE[$varName];
          break;
        }
        case SESSION :
        {
          if (isset($_SESSION[$varName]) && $_SESSION[$varName] != '') $sResult = $_SESSION[$varName];
          break;
        }
        case GETPOST :
        {
          if (isset($_GET[$varName]) && $_GET[$varName] != '') $sResult = $_GET[$varName];
          elseif (isset($_POST[$varName]) && $_POST[$varName] != '') $sResult = $_POST[$varName];
          break;
        }
        case POSTGET :
        {
          if (isset($_POST[$varName]) && $_POST[$varName] != '') $sResult = $_POST[$varName];
          elseif (isset($_GET[$varName]) && $_GET[$varName] != '') $sResult = $_GET[$varName];
          break;
        }
    }
    
    return $sResult;
}

$id = strGetVariable ( 'id', GET );


En dan is er ook nog een numGetVariable () die altijd een int of float zal returnen en van strings een 0 maakt.

March of the Eagles


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 15:16
De ternary operator is heel leuk, maar zou imo alleen gebruikt moeten worden als expressie. Dat wil dus zeggen dat ik zelf ook wel eens dit schrijf:

PHP:
1
$x = ($x >= 0 ? $x : -$x);


Maar een kleine if-statemen kun je volgens mij veel duidelijker (en niet langer) met een if-statement op te schrijven:

PHP:
1
if($x < 0) $x = -$x;


of zoiets :)

Dit geldt natuurlijk voor veel talen, niet alleen PHP. Volgens mij staan nergens echt vaste coding standards hiervoor, maar een losse ternary operator vind ik zelf heel onduidelijk (en mag volgens mij bijvoorbeeld java sowieso niet, maar in PHP dus wel).

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

mithras schreef op dinsdag 22 mei 2007 @ 22:26:
Waarom een lege string of de integer 0 invoeren als je gewoon null bedoelt? Het zal mierenneukerij zijn, maar doe het lekker zo:
PHP:
1
$foo = ($bar)? $get->some_thing() : null;
:)

En het is verplicht ja, maar is dat zo erg? Het is niet gelijk een lelijke constructie ofzo.
Ligt er maar aan of je ook daadwerkelijk null bedoeld natuurlijk ;)
Ik gebruik deze operator meestal om aan een variabele een default value toe te kennen indien het niet anders mogelijk is, en dat is dus niet altijd null, maar soms dus 0 of "".

Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Ik vind het zelf dan leesbaarder om dit op een dergelijke manier op te schrijven:
PHP:
1
2
if ( $x < 0 ) 
  $x = -$x;


Vind ik overigens een nette methode en ik mag hem graag gebruiken. Vooal als het een check is die eenmalig is, zoals in het voorbeeld.

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

Verwijderd

Niet helemaal ontopic, maar als het toch over ifjes en thenetjes gaat:

vaak zie je dit:
code:
1
2
3
4
5
6
7
8
9
10
if ( expressie )
{
 // hoop
 // bla bla
 // regels
}
else
{
 return;
}


please... doe dit om onleesbare en massale tab inspringen te voorkomen:

code:
1
2
3
4
if ( ! expressie) return;
// hoop
// bla bla
// regels


:)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Overigens, ter info: in PHP 6 wordt, als ik het me goed herinner, de laatste parameter voor de ternary operator optioneel. Je zal vanaf dan gewoon dit kunnen doen:
PHP:
1
$x = isset($y) ? $z;

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

-NMe- schreef op woensdag 23 mei 2007 @ 13:43:
Overigens, ter info: in PHP 6 wordt, als ik het me goed herinner, de laatste parameter voor de ternary operator optioneel. Je zal vanaf dan gewoon dit kunnen doen:
PHP:
1
$x = isset($y) ? $z;
Alleen is het dan geen ternary operator meer :+
Verwijderd schreef op woensdag 23 mei 2007 @ 13:34:
Niet helemaal ontopic, maar als het toch over ifjes en thenetjes gaat:

vaak zie je dit:
code:
1
2
3
4
5
6
7
8
9
10
if ( expressie )
{
 // hoop
 // bla bla
 // regels
}
else
{
 return;
}


please... doe dit om onleesbare en massale tab inspringen te voorkomen:

code:
1
2
3
4
if ( ! expressie) return;
// hoop
// bla bla
// regels


:)
Ik zou liever niet op "random" plaatsen uit mijn functie springen, dus gewoon die hele else weghalen ;)

Acties:
  • 0 Henk 'm!

  • sanzut
  • Registratie: December 2006
  • Laatst online: 19:44

sanzut

It's always christmas time

PHP:
1
if(isset($_GET['id'])) $id = $_GET['id'];


Zoiets?

Acties:
  • 0 Henk 'm!

Verwijderd

@Erkens

als dat de laatste statement is wel, maar dat hoeft niet. Het gaat natuurlijk om het principe dat je in sommige gevallen een hoop inspringen kan besparen en leesbaarheid kan bevorderen als je de expressie negatief evalueert.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op woensdag 23 mei 2007 @ 13:48:
@Erkens

als dat de laatste statement is wel, maar dat hoeft niet. Het gaat natuurlijk om het principe dat je in sommige gevallen een hoop inspringen kan besparen en leesbaarheid kan bevorderen als je de expressie negatief evalueert.
Het moeten echt uitzonderlijke situaties zijn wil ik een functie voortijdig beeindingen, wat imo de leesbaarheid juist ten goede komt. Zodra je teveel moet inspringen is dat vaak een teken dat je de code beter wat kan opdelen in meer functies :)

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
-NMe- schreef op woensdag 23 mei 2007 @ 13:43:
Overigens, ter info: in PHP 6 wordt, als ik het me goed herinner, de laatste parameter voor de ternary operator optioneel. Je zal vanaf dan gewoon dit kunnen doen:
PHP:
1
$x = isset($y) ? $z;
Bij PHP6 komt ifsetor voor dit soort constructies. Je kunt $y dan direct met een regexp controleren. Wel moet je een alternatief opgeven, maar qua overzichtelijkheid lijkt het me een vooruitgang.
PHP:
1
2
3
<?php
if($x < 0) $x = -$x;
?>
Slecht voorbeeld, dat kan mooier:
PHP:
1
$x = abs($x);

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Erkens schreef op woensdag 23 mei 2007 @ 13:45:
[...]

[...]

Ik zou liever niet op "random" plaatsen uit mijn functie springen, dus gewoon die hele else weghalen ;)
Tja, het is een methode die je niet per sé hoeft na te streven hoor ;)
PHP:
1
2
3
4
5
6
7
8
function get_something($var){
  if(!$var)
    return false;
  if( check_for_something($var) )
    return false;
  $var = do_something($var);
  return $var;
}
Je kan dan een return variabele aanmaken, daaraan false toewijzen en die retourneren. Maar niet dat het altijd moet, het ligt aan de situatie én wat je gewend bent :)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

mithras schreef op woensdag 23 mei 2007 @ 13:54:
[...]
Tja, het is een methode die je niet per sé hoeft na te streven hoor ;)
Bij korte functies waarin je de hele functie slechts een paar regels zijn zoals jouw voorbeeld zou ik idd gewoon eruit breken, bij wat langere/complexere functies liever niet, maargoed, dit is wel allemaal erg offtopic aan het worden :P
GlowMouse schreef op woensdag 23 mei 2007 @ 13:53:
Slecht voorbeeld, dat kan mooier:
PHP:
1
$x = abs($x);
voorbeeld is niet slecht, het gaat om het voorbeeld niet om de letterlijke code ;)

Acties:
  • 0 Henk 'm!

  • Gwaihir
  • Registratie: December 2002
  • Niet online
wackmaniac schreef op woensdag 23 mei 2007 @ 08:41:
[...]

Ik vind het zelf dan leesbaarder om dit op een dergelijke manier op te schrijven:
PHP:
1
2
if ( $x < 0 ) 
  $x = -$x;
Tja; daar kan ik me dus juist weer aan ergeren. Als een if-statement over meerdere regels gaat, dan moet alles wat erbij hoort voor mij tussen haakjes, voor 't overzicht.


@PHP6: Mooie verbeteringen, beide. Tot mijn treurnis zit ik momenteel (klus van een paar maand) aan PHP4 vast. :( Dat is na drie jaar behoorlijk wennen. (Ik ben indertijd bij RC1 al naar PHP5 gestapt want ik was toen net iets nieuws van de grond af aan het neerzetten.)
Erkens schreef op woensdag 23 mei 2007 @ 13:51:
[...]

Het moeten echt uitzonderlijke situaties zijn wil ik een functie voortijdig beeindingen, wat imo de leesbaarheid juist ten goede komt. Zodra je teveel moet inspringen is dat vaak een teken dat je de code beter wat kan opdelen in meer functies :)
Zulk opsplitsen gaat niet met de checks die de functie uitvoert op zijn parameters. Voordat je er erg in hebt krijg je daar zo'n nare geneste boom van. Die checks haal ik graag naar het begin en bij fouten ga ik dan ook daar de functie uit (met return of een exception).

Als een ander zo'n functie wil gebruiken kan hij aan die checks aan het begin juist gemakkelijk zien wat voor parameters precies verwacht worden.

Voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
function is18Plus($geboortedag, $geboortemaand, $geboortejaar)
{
  if (! checkdate($geboortemaand, $geboortedag, $geboortejaar)) return false;

  //Doe hier
  //je ontzettend ingewikkelde rekenwerk
  //en dan:
  return $is18Plus;
}
mithras schreef op woensdag 23 mei 2007 @ 13:54:
[...]
Tja, het is een methode die je niet per sé hoeft na te streven hoor ;) [..]
Je kan dan een return variabele aanmaken, daaraan false toewijzen en die retourneren. Maar niet dat het altijd moet, het ligt aan de situatie én wat je gewend bent :)
Dat vind ik krampachtig aan een stelregel vast houden op een manier die het overzicht juist niet bevordert. Je bent dan al lang klaar maar dwingt je lezer toch de rest van die functie te ontrafelen om te zien of $var echt niet meer aangeraakt wordt.

Acties:
  • 0 Henk 'm!

Verwijderd

Birdie schreef op woensdag 23 mei 2007 @ 15:00:
[...]
Dat vind ik krampachtig aan een stelregel vast houden op een manier die het overzicht juist niet bevordert. Je bent dan al lang klaar maar dwingt je lezer toch de rest van die functie te ontrafelen om te zien of $var echt niet meer aangeraakt wordt.
daar is dan weer commentaar voor uitgevonden ;)

Zelf heb ik altijd maar 1 return statement staan, als laatste regel van een functie. Puur omdat dit voor mij veel overzicht geeft. Dat andere mensen liever aan het begin een return hebben staan na een aantal checks kan ik begrijpen, maar zelf zou ik het nooit toepassen (maybe in heel uitzonderlijke situaties).

De ternary operator maak ik ook dankbaar gebruik van, maar eigenlijk alleen als ik ook daadwerkelijk een else heb, anders maak ik gewoon gebruik van een enkele if. If's komen dan bij mij altijd met accolades, en nooit op 1 regel. Dit omdat ik dit leesbaarder vind + dat het makkelijker uitbreidbaar is. Mocht je later nog een regel willen bijvoegen dan kun je iig geen accolades vergeten.

PHP:
1
2
3
4
5
<?php
if ($foo == 'bar') {
    doeRelaxteDingen();
}
?>

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Birdie schreef op woensdag 23 mei 2007 @ 15:00:
[...]

Dat vind ik krampachtig aan een stelregel vast houden op een manier die het overzicht juist niet bevordert. Je bent dan al lang klaar maar dwingt je lezer toch de rest van die functie te ontrafelen om te zien of $var echt niet meer aangeraakt wordt.
Dat is precies de single exit point regel die ik dan overbodig vind. Je kan -wat jij dus ook bedoelt- er dan beter gelijk uitspringen. Geen single exit point, wel beter voor je overzicht :)

Acties:
  • 0 Henk 'm!

  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 12-09 18:17
-NMe- schreef op woensdag 23 mei 2007 @ 13:43:
Overigens, ter info: in PHP 6 wordt, als ik het me goed herinner, de laatste parameter voor de ternary operator optioneel. Je zal vanaf dan gewoon dit kunnen doen:
PHP:
1
$x = isset($y) ? $z;
Maar dat kan eigenlijk toch al?
PHP:
1
($x != isset($y)) || $z;

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 17:11

RayNbow

Kirika <3

DiSiLLUSiON schreef op donderdag 24 mei 2007 @ 08:09:
[...]
Maar dat kan eigenlijk toch al?
PHP:
1
($x != isset($y)) || $z;
Dat is niet hetzelfde :+

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Marcj
  • Registratie: November 2000
  • Laatst online: 15:16
wackmaniac schreef op woensdag 23 mei 2007 @ 08:41:
[...]


Ik vind het zelf dan leesbaarder om dit op een dergelijke manier op te schrijven:
PHP:
1
2
if ( $x < 0 ) 
  $x = -$x;


Vind ik overigens een nette methode en ik mag hem graag gebruiken. Vooal als het een check is die eenmalig is, zoals in het voorbeeld.
Ik vind wel dat wanneer je een if-statement over meerdere regels verspreid, dat je ook accolades moet gebruiken ;)
GlowMouse schreef op woensdag 23 mei 2007 @ 13:53:
[...]

Slecht voorbeeld, dat kan mooier:
PHP:
1
$x = abs($x);
Het gaat om het voorbeeld, niet om wat de code doet ;) Ik snap ook wel dat een abs-functie bestaat.
DiSiLLUSiON schreef op donderdag 24 mei 2007 @ 08:09:
[...]
Maar dat kan eigenlijk toch al?
PHP:
1
($x != isset($y)) || $z;
Dat doet niet echt hetzelfde ;) Daarnaast zou ik gewoon dit doen:

PHP:
1
if(isset($y)) $x = $z


Dit is volgens mij veel duidelijk leesbaar wat het doet en niet echt veel langer :)

Acties:
  • 0 Henk 'm!

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
-NMe- schreef op woensdag 23 mei 2007 @ 13:43:
Overigens, ter info: in PHP 6 wordt, als ik het me goed herinner, de laatste parameter voor de ternary operator optioneel. Je zal vanaf dan gewoon dit kunnen doen:
PHP:
1
$x = isset($y) ? $z;
Wat wordt dan de waarde van $x als de expressie aan de linkerkant false is? Blijft $x dan undefined (of behoudt hij zijn oude waarde als $x al is gedefineerd en al een waarde heeft) of wordt het dan null/false o.i.d.?

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
CAIRATH schreef op donderdag 24 mei 2007 @ 16:09:
[...]


Wat wordt dan de waarde van $x als de expressie aan de linkerkant false is? Blijft $x dan undefined (of behoudt hij zijn oude waarde als $x al is gedefineerd en al een waarde heeft) of wordt het dan null/false o.i.d.?
Het zal een verkorte versie worden van
PHP:
1
2
if(isset($y))
  $x = $x;
Dus zal $x niet ineens undefined worden als $y wel bestaat :)

Acties:
  • 0 Henk 'm!

  • DiSiLLUSiON
  • Registratie: September 2000
  • Laatst online: 12-09 18:17
Whoops, het was nog vroeg in de ochtend.. :+
Pagina: 1