2012-03-31 21 views
6

Tôi hiểu sự khác biệt về chức năng giữa dấu nháy đơn và dấu ngoặc kép trong Ruby, nhưng tôi tự hỏi những lý do cụ thể mà mọi người có để thay đổi giữa hai điều này. Trong tâm trí của tôi có vẻ như bạn chỉ nên luôn luôn sử dụng một trích dẫn kép, và không nghĩ về nó.Có lợi thế nào đối với _ever_ bằng cách sử dụng một trích dẫn duy nhất xung quanh một chuỗi trong Ruby/Rails không?

Một vài lý do cơ bản mà tôi đã đọc trong việc nghiên cứu đề tài ...

  1. Sử dụng một dấu nháy đơn, trừ khi một dấu nháy kép là bắt buộc.

  2. Có lợi thế hiệu suất rất, rất nhỏ đối với một dấu nháy đơn.

Bất kỳ suy nghĩ thú vị nào khác ngoài kia? (Hoặc có thể đây là trường hợp của sự tự do hoặc Ruby để cánh cửa mở ra để không có một cách nào đúng đắn để làm điều gì đó ...)

+0

Tôi nghĩ rằng có một câu hỏi kiểm tra xem dấu nháy đơn có nhanh hơn không. –

+1

[ở đây] (http://stackoverflow.com/questions/6395288/ruby-double-vs-single-quotes) trong số rất nhiều câu hỏi khác. Nội suy chuỗi là lý do lớn. Jorg đã có một câu trả lời tốt ở đây mặc dù. – Jonathan

Trả lời

10

tôi thường làm theo các nguyên tắc sau:

bao giờ sử dụng dấu ngoặc kép (hoặc %Q hoặc %W) nếu bạn không suy

Lý do cho điều này là nếu bạn đang cố gắng theo dõi lỗi hoặc lỗi bảo mật, bạn ngay lập tức biết khi nhìn vào đầu chuỗi mà không thể có bất kỳ mã nào bên trong nó, do đó lỗi không thể ở trong đó.

Tuy nhiên, tôi cũng làm theo các ngoại lệ sau đây để các quy tắc:

sử dụng dấu ngoặc kép nếu họ làm cho mã dễ đọc hơn

Tức là Tôi thích

"It's time" 

qua

'It\'s time' 
%q{It's time} 

Đó là về mặt kỹ thuật đúng là chuỗi trích dẫn đơn là infinitesimally nhanh hơn để phân tích hơn chuỗi trích dẫn đôi, nhưng đó là không thích hợp vì

  • chương trình duy nhất được phân tích cú pháp một lần, trong quá trình khởi động, không có sự khác biệt trong thời gian hoạt động hiệu suất
  • sự khác biệt hiệu suất thực sự là vô cùng nhỏ
  • thời gian thực hiện để phân tích chuỗi là không thích hợp so với thời gian thực hiện để phân tích một số cú pháp điên Ruby

Vì vậy, câu trả lời cho câu hỏi của bạn là: Vâng, có một lợi thế, cụ thể là bạn có thể phát hiện ngay lập tức cho dù chuỗi có chứa mã hay không.

0
1.9.2-p290 :004 > x = 3 
=> 3 
1.9.2-p290 :005 > "#{x}" 
=> "3" 
1.9.2-p290 :006 > '#{x}' 
=> "\#{x}" 

Trong bất kỳ trường hợp nào khác, tôi thích báo giá đơn, vì nó dễ dàng hơn để nhập và chỉ làm cho mã ít bị overbloated vào mắt tôi.

+1

Một câu duy nhất dọc theo các dòng của "chuỗi được trích dẫn một lần không nội suy" hoặc một cái gì đó sẽ làm cho câu trả lời này. Mã này là một minh họa tuyệt vời về thực tế, nhưng một số người có thể không hiểu cái gì (hoặc không) đang diễn ra ở đây. (Hoặc có thể họ làm ngay bây giờ, nếu họ đọc ý kiến. :)) – cHao

+3

OP biết sự khác biệt chức năng giữa hai, ông nói rõ ràng là – Castilho

+0

Vâng ok, cả hai câu trả lời cho đến nay nói về cùng một điều mặc dù :) – Spyros

1

Tôi giả sử sử dụng chuỗi được trích dẫn đơn là nhanh hơn, vì dấu ngoặc kép cho phép nội suy chuỗi và chuỗi được trích dẫn một lần thì không.

Đó là sự khác biệt duy nhất tôi biết. Vì lý do đó, nó có thể là tốt nhất để chỉ sử dụng một chuỗi đơn trích dẫn trừ khi bạn cần chuỗi suy:

num = 59 
"I ate #{num} pineapples"` 
1

Vâng, có rất nhiều lông tơ về "đạt được hiệu suất" của chuỗi trích dẫn đơn vs chuỗi trích dẫn đôi .

Thực tế là nó không thực sự quan trọng nếu bạn không nội suy. Có rất nhiều điểm chuẩn xung quanh trang web chứng thực sự khẳng định đó. (Some here at stackoverflow)

Cá nhân, tôi sử dụng gấp đôi cho các chuỗi có nội suy chỉ vì mục đích dễ đọc. Tôi thích nhìn thấy dấu ngoặc kép khi tôi cần chúng. Nhưng trên thực tế có nhiều phương pháp trong ruby ​​cho suy dây khác hơn là "kép trích dẫn" họ:

%q{#{this} doesn't get interpolated} 

%Q{#{this} is interpolated} 
4

tôi có thể nghĩ ra ba lý do để sử dụng chuỗi trích dẫn duy nhất:

  1. Họ trông sạch hơn (lý do Tôi sử dụng chúng)
  2. Chúng giúp tạo chuỗi dễ dàng hơn nếu bạn muốn thoát ('he said "yes"'"he said \"yes\"")
  3. Chúng có hiệu suất cao hơn một chút.
0

Kể từ khi đặt câu hỏi này, tôi đã phát hiện ra điều này không chính thức Ruby Style Guide giải quyết vấn đề này và nhiều câu hỏi tạo kiểu khác tôi đã nổi xung quanh trong đầu. Tôi rất muốn khuyên bạn nên kiểm tra nó ra.

Các vấn đề liên quan