prochaine contre si dans un .chaque tour de boucle?
J'ai un traitement de texte chose que je fais en Ruby. En gros, je dois implémenter un simple état de la machine (avec un caractère regardez-derrière).
Mon code pour le moment ressemble à ceci:
text.each{ |c|
...
...
...
...
if @state!=:some_state
next
end
#processing stuff for if in :some_state mode
...
...
...
...
...
}
Est-ce bon? Ou doit-il plutôt être mis en œuvre comme:
text.each{ |c|
...
...
...
...
if @state==:some_state
#processing stuff for if in :some_state mode
...
...
...
...
...
end
}
Est-il un droit chemin ou est-ce juste une préférence? Qui on se mélange plus avec "le rubis façon" de faire les choses?
Vous devez vous connecter pour publier un commentaire.
Totalement d'accord avec @DigitalRoss et j'ai vu des gens utiliser
next
si il est compliqué morceau de code après qu'une certaine condition est évaluée à savoird'autre part, si il y a une simple opération qui doit être effectuée sur la base de certaines condition, alors je préfère
Après avoir dit que, à sa mauvaise pratique d'écrire de longues code compliqué. Si votre code est propre et bien conçu, alors vous ne serait jamais à utiliser
next
dans votre code.next
déclaration en question, ce qui serait admissible au titre de l'utilisation équitable?if
déclaration puis, tout de même éviter denext
. Toutefois, si vous avez 50 ligne de code au sein d'une seule méthode, puis je pense que vous devriez tout de même lui accorder un regard dur que ce code peut-être trop de choses. Essayer de résumé des bouts de en méthodes distinctes. Méthodes ou fonctions doivent être de petite taille, ont le même niveau d'abstraction avec une seule responsabilité et de modifier l'état de l'objet ou de retourner une valeur.next if predicate
utiliser au début d'un bloc, juste pour plus de clarté.Je pense que l'exemple que vous avez donné n'est pas vraiment saisir la situation où faire
next
fait une différence. Considérons une situation où vous avez plusieurs "next-points" dans votre code:et de la comparer avec si-variante:
Bien que le premier pourrait être perçu comme un spaghetti style par certains puristes, à mon humble avis il est plus lisible que le dernier.
Faire la deuxième façon
Certaines écoles de pensée s'opposent à des choses dans plusieurs langues comme l'
next
,retry
,continue
, etbreak
, parce qu'ils sont juste un peu trop dans la direction de l'mépriségoto
déclaration.Ces déclarations ont leurs cas d'utilisation, mais en général c'est une mauvaise idée délibérément "spaghettify" le code quand structurée de pointe vers le bas de construire permettra d'accomplir la même chose. Maintenant, si la condition appelée pour sauter de l'ensemble du corps de boucle, dans ce cas, je pourrais préférer l'utilisation de
next
.je pencherais pour:
Mais si c'est comme sur le premier échantillon ( ce qui signifie tout simplement 1 l'etat a besoin d'un traitement supplémentaire )
Va encore plus loin au lieu de frapper la variable d'instance, son agréable de demander à l'objet si elle est dans l'état que nous avons besoin comme:
Raisonnement un peu plus loin, je pense que l'un des paquebots comme " autre, à moins qu'traitées?' sont bons que lorsqu'il n'y a pas plus de 10 lignes de code dans le même niveau d'indentation, sinon je préfère le faire de l'autre, de sorte que l'indentation va m'aider à comprendre au premier coup d'œil ce qui se passe