J'ai un collègue qui essaie activement de me convaincre que je ne devrais pas utiliser do..end mais plutôt les accolades pour définir des blocs multilignes en Ruby.
Je suis fermement convaincu qu'il ne faut utiliser les accolades que pour les phrases courtes d'une ligne et les do..end pour tout le reste. Mais j'ai pensé que je pouvais m'adresser à la communauté pour trouver une solution.
Alors, lequel des deux est le meilleur, et pourquoi ? (Exemple d'un code "shoulda")
context do
setup { do_some_setup() }
should "do somthing" do
# some more code...
end
end
ou
context {
setup { do_some_setup() }
should("do somthing") {
# some more code...
}
}
Personnellement, le simple fait de regarder ce qui précède répond à la question pour moi, mais je voulais ouvrir cette question à l'ensemble de la communauté.
4 votes
Je me demande juste quels sont les arguments de vos collègues pour l'utilisation d'un appareil dentaire ? Ça ressemble plus à une préférence personnelle qu'à une question de logique.
7 votes
Si vous voulez une discussion, faites-en un wiki communautaire. A votre question : C'est juste un style personnel. Je préfère les accolades bouclées car elles ont l'air plus ringardes.
10 votes
Ce n'est pas une question de préférence, il y a des raisons syntaxiques d'utiliser l'une plutôt que l'autre, en plus des raisons stylistiques. Plusieurs des réponses expliquent pourquoi. Ne pas utiliser la bonne méthode peut provoquer des bogues très subtils qui sont difficiles à trouver si un autre choix "stylistique" est fait de ne jamais utiliser de parenthèses enveloppantes pour les méthodes.
0 votes
Wow, de très bonnes réponses, je n'en attendais pas tant. Pour mon propre bien, je tiens à préciser que je n'étais pas inconscient de la différence de précédence. Je pense simplement qu'une condition marginale qui n'affecte que le résultat de 1% de mon code ne devrait pas avoir un effet aussi important sur la façon dont je conçois les 99% restants. Quand et si c'était important, je ferais une exception à tout style détecté.
1 votes
Les "conditions de bord" ont la mauvaise habitude de se faufiler chez les personnes qui ne les connaissent pas. Coder de manière défensive signifie beaucoup de choses, notamment décider d'utiliser des styles de codage qui minimisent les chances de rencontrer ces cas. VOUS êtes peut-être au courant, mais les deux personnes qui vous suivent ne le seront peut-être pas une fois que les connaissances tribales auront été oubliées. Cela a tendance à se produire dans les environnements d'entreprise, malheureusement.
0 votes
Cela me rappelle la syntaxe Visual Basic vs C#. Personnellement, j'utiliserais les accolades. Moins de caractères à taper tout en faisant passer son message.
1 votes
@tinman Ces types de conditions de bord sont traités par TDD. C'est pourquoi les Rubist peuvent écrire du code comme celui-ci et se reposer la nuit en sachant que de telles erreurs n'existent pas dans leur code. Lorsque l'on développe avec TDD ou BDD et qu'une telle erreur de précédence est commise, le rouge affiché à l'écran est ce qui nous rappelle la "connaissance tribale". En général, la solution consiste à ajouter quelques parenthèses quelque part, ce qui est tout à fait acceptable dans le cadre des conventions standard :)
0 votes
Bonne question, mais a-t-elle déjà été posée auparavant ?
0 votes
@andrew première chose que j'ai vérifiée... merci :)
1 votes
@BlakeTaylor Désolé, mais dire que ces cas sont traités par TDD n'est tout simplement pas vrai. Je viens de me faire piquer par ça dans un test et j'ai passé une demi-heure à le déboguer :(
0 votes
Cela répond-il à votre question ? Utiliser le bloc do ou les accolades {}