45 votes

Différence - à moins que / si

Quelqu'un peut-il m'expliquer la différence entre if y unless et quand l'utiliser ?

1 votes

unless comments.empty? est plus beau que if !comments.empty? mais l'utiliser avec une autre clause, comme.. : unless comments.empty? then aaa else bbb end peut être plus déroutant que l'équivalent inversé : if comments.empty? bbb else aaa end

0 votes

Ruby ne suit pas le zen de Python : "Il devrait y avoir une - et de préférence une seule - manière évidente de le faire."

78voto

unless est juste une négation de if . C'est-à-dire qu'il exécute ce qu'il contient si la condition est no vrai.

unless foo?
    # blabla
end

Cela signifie simplement

if !foo?
    # blabla
end

Tout est une question de ce que vous trouvez plus facile à lire, vraiment.

Voir aussi : A moins que, l'abus de Ruby Conditionnel

3 votes

Pour une raison quelconque, je trouve incroyablement déroutant de lire unless déclarations. Quelqu'un d'autre est-il dans la même situation ?

0 votes

@BKSpurgeon Vous n'êtes certainement pas seul.

11voto

calasyr Points 116

L'utilisation de "à moins que" me paraît simple lorsqu'il n'y a qu'un seul argument, mais je la trouve déroutante lorsqu'il y en a plusieurs. Et lorsque vous utilisez || au lieu de && .

"A moins que ceci ou cela" est juste plus difficile pour mon cerveau. "si pas ceci et pas cela" est plus facile.

Il sera plus difficile de maintenir ce code à l'avenir si je l'utilise. Donc je ne le fais pas.

0 votes

Rappelez-vous la loi de De Morgan en cas de doute. fr.wikipedia.org/wiki/De_Morgan%27s_laws

8voto

Ole Begemann Points 85798

unless est simplement équivalent à if not . Quand vous utilisez ce qui est une préférence personnelle.

2voto

Jörg W Mittag Points 153275

La différence entre if y unless c'est qu'ils sont exactement l'opposé l'un de l'autre :

  • if prend une condition, un bloc then et un bloc else facultatif, et évalue le bloc then si la condition est vraie, sinon il évalue le bloc else.
  • unless prend une condition, un then-block et un else-block optionnel, et évalue le then-block si la condition est falsy, sinon il évalue le else-block

Ou, en d'autres termes : ils signifient à peu près la même chose en Ruby qu'en anglais.

1voto

tenzin dorjee Points 166

En tant que développeur de ruby on rails, il est préférable de suivre les meilleures pratiques pour maintenir la lisibilité du code. Ma réponse n'est pas directement liée à cette question mais elle pourrait aider quelqu'un, Essayez d'utiliser if autant que possible au lieu de unless Par exemple, au lieu de unless comments.empty? il est préférable d'utiliser if comments.present? au lieu de unless comments.present? essayez d'utiliser if comments.blank? , blank? vérifie à la fois empty y nil .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X