2015-01-12 11 views

risposta

7

Secondo The Ruby Programming Language libro Sezione 5.2.1:

Il do parola chiave in un ciclo while o until è come la parola chiave then in una dichiarazione if: può essere omesso del tutto il più a lungo appare una nuova riga (o il punto e virgola ) tra la condizione di loop e il corpo del loop.

Quindi, no, non cambierà il comportamento, è solo una sintassi opzionale.

6

Scopriamolo!

Per una risposta rapida possiamo guardare la documentazione di Ruby e trovare http://www.ruby-doc.org/core-2.1.1/doc/syntax/control_expressions_rdoc.html#label-while+Loop cui si afferma che

Il DO parola chiave è opzionale.

Ok, quindi questi due esempi sono equivalenti ma sono identici? Potrebbero fare la stessa cosa, ma forse c'è un motivo per preferire l'uno rispetto all'altro. Possiamo guardare l'AST che questi esempi generano e vedere se c'è qualche differenza.

> gem install ruby_parser 
> irb 

> require 'ruby_parser' 
=> true 
> with_do = <<-END 
while true do 
    puts "Hi" 
    break 
end 
END 
=> "while true do\n puts \"Hi\"\n break\nend\n" 
> without_do = <<-END 
while true 
    puts "Hi" 
    break 
end 
END 
=> "while true\n puts \"Hi\"\n break\nend\n" 
> RubyParser.new.parse with_do 
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true) 
> RubyParser.new.parse without_do 
=> s(:while, s(:true), s(:block, s(:call, nil, :puts, s(:str, "Hi")), s(:break)), true) 

No. Questi due esempi eseguono esattamente le stesse istruzioni in modo da poter scegliere qualsiasi stile che troviamo più facile da leggere. Una preferenza comune è quella di omettere lo do quando possibile: https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do

+0

Questo è interessante (devo guardare 'ruby_parser'), ma inutilmente difficile da leggere con tutti i prompt di' irb'. Ti suggerisco di rimuoverli. –

+0

@CarySwoveland è possibile modificare i prompt e aiutare questa domanda a essere più bella. – DiegoSalazar

+0

@ diego.greyrobot, non ho quasi mai modificato ciò che altri hanno scritto. Come la vedo io, possiedono le parole, quindi non posso fare altro che suggerire dei cambiamenti. (Molto vecchia scuola, lo so.) Riesci a indovinare la mia reazione quando gli altri pubblicano ciò che ho scritto? :-) –

Problemi correlati