Khi học Ruby, tôi nhận thấy rằng trong tất cả các ví dụ không có dấu chấm phẩy. Tôi biết rằng điều này hoàn toàn ổn miễn là mỗi câu lệnh đều nằm trên dòng riêng của nó. Nhưng điều tôi băn khoăn là bạn có thể sử dụng dấu chấm phẩy trong Ruby không?
Khi học Ruby, tôi nhận thấy rằng trong tất cả các ví dụ không có dấu chấm phẩy. Tôi biết rằng điều này hoàn toàn ổn miễn là mỗi câu lệnh đều nằm trên dòng riêng của nó. Nhưng điều tôi băn khoăn là bạn có thể sử dụng dấu chấm phẩy trong Ruby không?
Câu trả lời:
Đúng.
Ruby không yêu cầu chúng ta sử dụng bất kỳ ký tự nào để phân tách các lệnh, trừ khi chúng ta muốn xâu chuỗi nhiều câu lệnh lại với nhau trên một dòng. Trong trường hợp này, dấu chấm phẩy (;) được sử dụng làm dấu phân tách.
Nguồn: http://articles.sitepoint.com/article/learn-ruby-on-rails/2
Một lưu ý phụ là bạn nên sử dụng dấu chấm phẩy trong phiên irb (j) của bạn để tránh in ra giá trị biểu thức dài đến mức nực cười, ví dụ:
irb[0]> x = (1..1000000000).to_a
[printout out the whole array]
vs
irb[0]> x = (1..100000000).to_a; nil
Đặc biệt tốt cho các cuộc gọi MyBigORMObject.find_all của bạn.
Dấu chấm phẩy: vâng.
irb(main):018:0> x = 1; c = 0
=> 0
irb(main):019:0> x
=> 1
irb(main):020:0> c
=> 0
Bạn thậm chí có thể chạy nhiều lệnh được phân tách bằng dấu chấm phẩy trong vòng lặp một lớp lót
irb(main):021:0> (c += x; x += 1) while x < 10
=> nil
irb(main):022:0> x
=> 10
irb(main):023:0> c
=> 45
Tình huống duy nhất tôi gặp phải rằng dấu chấm phẩy hữu ích là khi khai báo các phương thức bí danh cho attr_reader.
Hãy xem xét đoạn mã sau:
attr_reader :property1_enabled
attr_reader :property2_enabled
attr_reader :property3_enabled
alias_method :property1_enabled?, :property1_enabled
alias_method :property2_enabled?, :property2_enabled
alias_method :property3_enabled?, :property3_enabled
Bằng cách sử dụng dấu chấm phẩy, chúng ta có thể giảm điều này xuống 3 dòng:
attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled
attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled
attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled
Đối với tôi, điều này không thực sự làm mất đi khả năng đọc.
Có thể thú vị khi sử dụng dấu chấm phẩy để bảo toàn cú pháp khối như trong ví dụ này:
a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h }
Bạn duy trì một dòng mã.