Ví dụ, sự hiện diện hay vắng mặt của do
trong đoạn mã sau có ảnh hưởng đến hành vi của chương trình không?Khi nào từ khóa được yêu cầu trong Ruby?
while true do
puts "Hi"
break
end
while true
puts "Hi"
break
end
Ví dụ, sự hiện diện hay vắng mặt của do
trong đoạn mã sau có ảnh hưởng đến hành vi của chương trình không?Khi nào từ khóa được yêu cầu trong Ruby?
while true do
puts "Hi"
break
end
while true
puts "Hi"
break
end
Theo The Ruby Programming Language cuốn sách Mục 5.2.1:
Từ khóa
do
trong mộtwhile
hoặcuntil
loop cũng giống như từ khóathen
trong một tuyên bốif
: nó có thể được bỏ qua hoàn toàn miễn là một dòng mới (hoặc dấu chấm phẩy) xuất hiện giữa điều kiện vòng lặp và thân vòng lặp.
Vì vậy, không, nó sẽ không thay đổi hành vi, nó chỉ là cú pháp tùy chọn.
Hãy tìm hiểu!
Đối với một câu trả lời nhanh chúng ta có thể nhìn vào tài liệu của Ruby và tìm http://www.ruby-doc.org/core-2.1.1/doc/syntax/control_expressions_rdoc.html#label-while+Loop trong đó nêu rằng
Các làm từ khóa là không bắt buộc.
Ok vì vậy hai ví dụ này tương đương nhau nhưng chúng giống nhau không? Họ có thể làm điều tương tự nhưng có thể có một lý do để ủng hộ người khác. Chúng ta có thể nhìn vào AST những ví dụ này tạo ra và xem có sự khác biệt nào không.
> 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)
Không. Hai ví dụ này thực hiện cùng một hướng dẫn chính xác để chúng tôi có thể chọn bất kỳ kiểu nào mà chúng tôi dễ đọc hơn. Một sở thích chung là bỏ qua số do
khi có thể: https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do
Điều này thật thú vị (tôi phải xem 'ruby_parser'), nhưng không cần thiết khó đọc với tất cả lời nhắc' irb'. Tôi đề nghị bạn loại bỏ chúng. –
@CarySwoveland bạn có thể chỉnh sửa lời nhắc và giúp câu hỏi này đẹp hơn. – DiegoSalazar
@ diego.greyrobot, tôi hầu như không bao giờ chỉnh sửa những gì người khác đã viết. Khi tôi nhìn thấy nó, họ sở hữu những từ ngữ, vì vậy tôi không thể làm gì hơn đề xuất những thay đổi. (Trường học rất cũ, tôi biết.) Bạn có thể đoán phản ứng của tôi khi những người khác chỉnh sửa những gì tôi đã viết? :-) –