Désolé si c'est une question stupide, mais je suis un c # gars qui se marie autour de Ruby ..
dans Ruby, je remarque beaucoup de gens le font: P>
if 1 = 1 do_something(with params)
5 Réponses :
Fire up Le trailing IRB code> et exécutez votre code et vous apprendrez: p>
si 1 == 1 code>, vous devrez ajouter un
: code> ou
puis code> et fermer avec un
fin code>. li>
ul>
si code> ne doit vraiment être utilisé que pour les expressions simples et vous ne pouvez pas ajouter un
sinon code>. Ils s'appellent modificateurs de déclaration em> et ils ne sont que du sucre syntaxique pour une meilleure lisibilité. Je ne suis pas totalement contre eux mais je vous recommande de les utiliser avec parcimonie. P>
C'est Syntaxtic Sugar ... nous permettant d'écrire du code de manière plus facile à lire.
http://rubylearning.com/satishatalim/ruby_syntactic_sugar.html p>
Remarque: Pour @Progz, ce qui suit n'est pas le même! Assurez-vous que vous n'essayez pas d'attribuer une valeur à la variable au lieu de comparer une variable à une valeur! Aussi, comme expiration de Phrogz, l'ordre de mission variable fait une grande différence ... voir @Phrogz Répondre pour plus de détails! P>
if 1 = 1 then do_something(with params) end if 1 == 1 then do_something(with params) end
Ce dernier est syntaxiquement invalide. Vous auriez besoin d'écrire:
bar1 = if foo1=14 foo1*3 end #=> 42 bar2 = foo2*3 if foo2=14 #=> NameError: undefined local variable or method `foo2' for main:Object
AVERTISSEMENT: trouvé = sous condition, devrait être == code>
@ Jonasefström Oui, il y a aussi ça. Mais le problème reste. C'est (je trouve personnellement et dans d'autres Code) commun dans Ruby pour utiliser la mission dans des conditionnels. si utilisateur = user.find (42) puis ... fin code>. Malheureusement, les heuristiques pour les variables locales ne fonctionnent pas lorsque la cession est dans un conditionnel de fuite unique.
@Phrogz, j'essaie de comprendre pourquoi la mission dans le conditionnel de fuite échoue. Où puis-je en savoir plus?
@Leito Le problème est que l'interprète de Ruby utilise une heuristique pour décider si un nom non qualifié non qualifié est une variable locale ou un appel de méthode, car pour foo = bar code> la barre code> pourrait être une variable locale ou un appel de méthode sans arguments. Si je comprends bien, la heuristique est basée sur la manière dont le nom est utilisé la première fois qu'il est vu lexiquement dans le code source. Dans le cas problématique, il décide que
FOO2 code> est un appel de méthode au lieu d'une variable locale et est supposée être telle de ce point en avant.
@Leito, par exemple, cet horrible hack facilite le fonctionnement: bar = (foo || = 0) && (foo * 3) Si FOO = 14 code> Parce que la première fois qu'il voit
foo code> Il sait qu'il doit être une variable locale et non un appel de méthode. Alternativement, il suffit de mettre
foo = nil code> sur la ligne avant de le résoudre également.
Vous pouvez utiliser soit mais si vous mettez d'abord l'instruction IF, vous devrez fermer la condition avec une "fin".
if 1==1 do_something(with params) end
Les feuilles suivantes ceci est parce que Ruby crée une variable Si vous l'avez fait P> < Pré> xxx pré> alors vous obtiendriez J'ai ajouté ceci à Donc oui, dans certaines circonstances, cela peut compter. p> p> foo code> comme nul.
foo code> et l'attribue à nil quand il lit (analyse, je pense) le
foo = true code> bit, puis quand il se lit (exécutant, je pense) le
sauf si défini? (FOO) code>, il est indiqué que < Code> FOO code> est défini (c'est défini comme nul) et n'exécute donc pas le
foo = true code> partie. p>
foo code> assigné à true. p>
C'est surtout stylistique. Lorsque vous traitez avec une seule ligne de code, j'utilise le suivi conditionnel car il semble avoir plus de sens en conversation. Étant donné qu'un composant de logiciels de rédaction de grand rendement le rend maintable, j'essaie de l'écrire d'une manière qui lui permet de glisser facilement dans le cerveau. Certains livres recommandent d'utiliser un bloc ou une enveloppe conditionnelle
si (bla) ... Quelques ... Fin Code> Seulement, affirmant que c'est mieux pour une expansion future du code. Si nous devons ajouter quelque chose, la fermeture
fin code> est déjà là. Je trouve que beaucoup facile avec mes puissances Vim de travailler autour de cela, donc j'utilise une seule ligne surtout.