J'ai souvent une situation où je veux faire une logique conditionnelle, puis retourner une partie de la condition. Comment puis-je faire cela sans répéter la partie de la condition dans l'expression vraie ou fausse?
Par exemple: P>
PROFESSIONAL_ROLES.key(self.professional_role).nil? ? 948460516 : PROFESSIONAL_ROLES.key(self.professional_role)
3 Réponses :
supposer que vous allez bien avec Ceci retournera Notez que cela ne renvoie que 948460516 si false code> étant traité de la même manière que
nil code>, vous utilisez
|| code>:
948460516 code> Si
clé code> retourne
nil code> ou
false code> et la valeur de retour de l'appel à
clé code> sinon. p>
clé code> renvoie
nil code> ou
false code>, pas si cela renvoie un tableau vide ou une chaîne. Depuis que vous avez utilisé
nil? Code> dans votre deuxième exemple, je suppose que ça va. Cependant, vous avez utilisé
vide? Code> dans le premier exemple (et
vide? Code> renvoie
vrai code> pour des tableaux et des chaînes vides), donc je ne suis pas sûr. p> p>
Je sais que cela ne semble pas trop jolie, mais cela fait des choses un peu de sèche-linge. Si vous ne souhaitez pas créer TEMP code> variable Pour une raison quelconque, vous pouvez réutiliser quelque chose qui existe déjà comme
$ _ code>. p> p>
Si vous voulez juste sécher, vous pouvez utiliser une variable TEMP:
def x_or_default(x, defval, checker = :nil?) if x.send(checker) then defval else x end end x_or_default(ClassName.method, false, :blank?) x_or_default(PROFESSIONAL_ROLES.key(self.professional_role), 94840516)
Sec est l'une de ces choses qui a beaucoup de sens lorsque vous répétez des blocs de code ou de longues séquences de méthodes chaînées ou de faire quelque chose que la répétition pourrait réduire votre qualité de code de la manière. Je ne pense pas que cela a du sens quand vous faites quelque chose de simple et que vous devez sauter à travers un cerceau pour devenir sèche. Nous pouvons facilement vous séduire dans la poursuite du dragon sec et perdre une trace de «assez bon». Dans votre exemple, si vous allez en boucle, des millions de fois, ajoutez une variable TEMP ou faire le
|| code> THY SEPP2K, sinon, ne vous inquiétez pas trop.