Bạn có thể sử dụng dấu chấm phẩy trong Ruby không?


76

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?


Và đối với những người chơi Ruby ngoài kia: Có nên sử dụng dấu chấm phẩy không? Có lợi ích khi làm như vậy không? Tôi biết rằng khi tôi viết mã Ruby, tôi sẽ thêm chúng theo phản xạ.
Andy Lester

@Andy Không sử dụng dấu chấm phẩy, trừ khi bạn muốn đặt nhiều câu lệnh trên một dòng, điều này bạn nên tránh làm .
Yaser Sulaiman 17/10/10

@Yaser: Tôi hơi cần dấu chấm phẩy. Bởi vì khi có một hàm trên một dòng không có dấu chấm phẩy, vim sẽ tự động điều chỉnh cho tôi, điều mà tôi không muốn xảy ra.
Mark Szymanski 17/10/10

Bạn có thể muốn đặt một câu hỏi về điều đó, bởi vì có rất ít người sử dụng vim với ruby.
Andrew Grimm

Liên kết trong nhận xét của @YaserSulaiman đưa ra lập luận rằng dấu chấm phẩy làm cho mã kém dễ đọc và xấu. Đó là một ý kiến ​​hợp lệ, nhưng đó là một ý kiến.
Tony

Câu trả lời:


100

Đú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


2
nhưng tôi có nên sử dụng dấu chấm phẩy không?
rocketspacer

1
@rocketspacer Đó là một câu hỏi hoàn toàn khác
ATLief

37

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.


6

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

3

Có, dấu chấm phẩy có thể được sử dụng làm dấu phân tách câu lệnh trong Ruby.

Mặc dù phong cách điển hình của tôi (và hầu hết các mã tôi thấy) đặt một dòng mã trên mỗi dòng, vì vậy việc sử dụng ;là khá không cần thiết.


3

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.


1

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ã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.