Pouvons-nous rendre le code Ruby suivant plus court et en même temps plus lisible?Meilleure façon de définir les valeurs par défaut?
height = do_some_calc
height = 128 if height == 0
Pouvons-nous rendre le code Ruby suivant plus court et en même temps plus lisible?Meilleure façon de définir les valeurs par défaut?
height = do_some_calc
height = 128 if height == 0
Plus court? Pas et être fonctionnel.
height = (h = do_some_calc).zero? ? 128 : h
comme dans:
def do_some_calc
rand 100
end
10.times do
height = (h = do_some_calc).zero? ? 128 : h
puts height
end
# >> 3
# >> 95
# >> 89
# >> 82
# >> 31
# >> 4
# >> 82
# >> 99
# >> 11
# >> 64
height = 128 if 0 == height = do_some_calc
Il est la seule façon que je sais, si do_some_calc
doit être évalué qu'une seule fois.
Assez génial bien que tout le reste mais élégant, +1 – hurikhan77
Et il ne pollue pas l'espace de noms local avec une variable d'aide ... :-) (la plupart des autres solutions font) – hurikhan77
En faveur de la lisibilité je réécrirais ceci comme 'height = 128 if (hauteur = do_some_calc) == 0'. – Max
Peut-être que quelque chose le long des lignes de:
STANDARD_HEIGHT = 128
def do_some_calc
height = 0
#calculate our height...
height = height == 0 ? STANDARD_HEIGHT : calculated_height
end
Je pense qu'il doit y avoir plus de contexte donné au 128
, d'où la constante. Je pense aussi que do_some_calc
devrait cacher le fait que si elle égale 0, il devrait vraiment égaler notre DEFAULT_HEIGHT
.
EDIT: Pour répondre à votre question implicite (que j'ai éditée en tant que telle), nous pouvons la rendre plus courte en rendant do_some_calc
plus long.
Vous pouvez faire comme suit
height = do_some_calc.zero? ? 128 : do_some_calc
Si vous êtes prêt à modifier do_some_calc
de retourner faux ou nul au lieu de 0, alors vous êtes dans les affaires.
height = do_some_calc || 128
Si vous ne pouvez pas modifier do_some_calc retourner faux ou nul quand il serait normalement retourner 0, alors vous pouvez envelopper, mais vous n'êtes pas sauver beaucoup de personnages à long terme. À l'exception du cas où vous avez plusieurs endroits où vous définissez les valeurs par défaut.
Cette enveloppe retournerait false si do_some_calc renvoyait 0 et la sortie de do_some_calc dans tous les autres cas.
def my_do_some_calc
temp = do_some_calc
temp != 0 && temp
end
Mettre tous ensemble donne:
height = my_do_some_calc || 128
Ceci est techniquement plus court si peu lisible:
(height = do_some_call) == 0 and height = 128
Je dirais garder la façon dont vous l'avez, votre chemin semble être le plus concis et lisible.
Je ne suis pas d'accord avec le titre de la question edites, mais je ne connais pas meilleure variante, que le précédent (dans le style de "comment l'écrire mieux/plus court?"). – Nakilon
@Nakilon Je suis d'accord avec vous, mais comme vous l'avez dit, le titre de la question précédente n'était pas très clair. – theIV