2010-08-22 23 views
0

En termes de "bon code", est-il acceptable de combiner les méthodes set et get en une seule? Comme ceci:Combinaison de getters et setters dans gettersetters

public function dir($dir=null) { 
    if (is_null($dir)) return $this->dir; 
    $this->dir = $dir; 
} 
+0

Je pense que cela dérouterait la plupart des gens car ce n'est pas "standard", ce qui le rendrait pas "bon code". – Starkey

+0

Quelle est la langue de ce code? – mpenrow

+0

PHP, mais ce n'est pas vraiment pertinent à la question, donc je ne l'ai pas tagué "php". – mattalxndr

Répondre

1

C'est vraiment horrible. Il est impossible de définir la valeur sur null, par exemple.

Dans un langage qui distinguait undefined de null, il serait raisonnable de le faire avec cette valeur non définie, plutôt que null.

La non-concordance entre un élément renvoyé ou non n'est même pas valide dans de nombreuses langues. Dans les deux cas, pourquoi ne pas le renvoyer de toute façon, pour permettre un chaînage raisonnable de x.dir = y.dir = someValue? Mais c'est un choix, mon premier paragraphe est ma réponse principale.

0

Ma pensée initiale est non le code est plus difficile à lire et donc maintenir. Je suis arrivé à l'endroit où j'utilise la propriété auto de C# ou juste un champ public.

0

Ce modèle est au moins très commun dans jQuery; Je dirais que c'est bien.

+0

* Presque * ce modèle, mais ce n'est pas le cas. jQuery vérifie si le paramètre n'est pas défini, pas null. Vous obtenez un comportement différent si vous faites '$ ('elem'). Attr ('foo', null)' que '$ ('elem'). Attr ('foo')'. C'est parce que javascript fait la distinction entre 'undefined' (pas de paramètre) et' null' (paramètre sans valeur). Donc, dans ce cas, c'est OK, mais je ne dirai pas que c'est pour le reste des langues. – Chubas

+0

Juste pour l'exhaustivité de mon commentaire: voir http://code.jquery.com/jquery-latest.js, ligne 795, où la fonction 'access' est définie. – Chubas

+0

@Chubas, je ne dirais pas que c'était "presque" ce modèle du tout. La différence entre undefined et null dans javascript est assez énorme, rendant ceci complètement différent, si superficiellement semblable dans le modèle des mots sur l'écran. –