10
votes

renvoie une valeur de 'Suivant' une mauvaise idée?

devrait être facile. Je pensais, de la lecture Ce blog post que je pourrais retourner quelque chose juste après mon Commande suivante :

suivant "nouvelle valeur" si axis_range == "Test"

Qu'est-ce que j'aimerais vraiment faire est de loger la raison de la prochaine ligne sur la même ligne:

suivant @ LOGGER.INFO ('Sauter cet élément car pour le plaisir') Sauf si (Elephants.Size> 0)

Je ne trouve aucune discussion sur cet usage de Suivant sur Ruby Doc . Le code fonctionne certainement. Je me rends compte que je peux le faire avec un sauf si bloc mais la ligne de code est tellement concise.

Deux questions:

  • Y a-t-il un meilleur document quelque part?
  • est cette utilisation de suivant un peu impair et non "ruby-ish"?

0 commentaires

3 Réponses :


0
votes

Ma première impression est que c'est assez évident que le mot clé suivant est dans le contexte d'une boucle - c'est une bonne chose. Le fait que "nouvelle valeur" est le résultat de suivant "nouvelle valeur" est un peu d'étirement, mais je peux y arriver.

Qu'est-ce qui me jette est que suivant @ logger.info ('Sauter cet article parce que pour le plaisir') serait probablement difficile de comprendre. Il n'est vraiment pas évident que le résultat de l'appel info va être renvoyé par suivant et je crois que beaucoup de Devs seraient jetés par celui-ci.

Bien que le code puisse être plus concis, il est difficile de comprendre. Je commenterais soit ce que le code fait ou va avec autre chose.

Néanmoins bon appel à vos deux questions. Je serais heureux d'être un développeur de maintenir votre code avec ce type d'état d'esprit!


0 commentaires

0
votes

Je ne poserais pas de problème inhéremment à celui-ci, à moins que ce n'était juste au milieu de beaucoup d'autres codes compliqués (j'essaie de la moyenne de 2 location locale, généralement un ou deux de 4 à 8 lignes de long, et un groupe qui ne sont qu'une ligne, une moyenne de la moyenne).

Si le code est long et difficile à comprendre, j'ai eu beaucoup de succès à tirer la méthode dans son propre objet. J'ai juste que la méthode instanciate d'un objet qui fait sa tâche et la pose pour le résultat, le code peut être beaucoup plus simple, réduisant souvent la boucle à une seule ligne ou deux et lui permettant d'avoir une méthode qui compte cette journalisation, laquelle Vous pouvez ensuite gérer avec un appel simple à Log_Error ou quel que soit le nom que vous pensez être approprié.

Ces jours-ci, je considère que les méthodes de procédure complexes doivent être une odeur qu'il existe un objet gestant dans cette méthode.


0 commentaires

20
votes

"Comme le retour et break mots-clés, suivant peut être utilisé seul, ou il peut être suivi d'une expression ou d'une liste séparée par des virgules de expressions. Lorsque Suivant est utilisé dans une boucle, toutes les valeurs suivantes Suivant sont ignorés. Dans un bloc mais l'expression ou les expressions devenir la "valeur de retour" de la déclaration de rendement qui a appelé le Bloc. "(Le langage de programmation Ruby, David Flanagan & Yukihiro Matsumoto, 2008, page 150)

Le livre donne cet exemple: xxx

et cette alternative: xxx


2 commentaires

Squareroots = data.Collect {| x | (x <0)? 0: math.sqrt (x)} (opérateur ternaire est meilleur dans ce cas)


Dans le premier exemple, le suivant ... La déclaration se comporte comme une clause de garde. Je l'aime bien. Merci!