Какой стиль цитирования строк в Ruby вы предпочитаете? - PullRequest
46 голосов
/ 11 ноября 2008

Какой стиль цитирования в Ruby вы предпочитаете? До сих пор я всегда использовал 'single quotes', если строка не содержит определенных escape-последовательностей или интерполяции, и в этом случае мне, очевидно, придется использовать "double quotes".

Однако, действительно ли есть причина не использовать везде строки с двойными кавычками?

Ответы [ 9 ]

47 голосов
/ 11 ноября 2008

Не используйте двойные кавычки, если вам нужно избежать их. И не попадайтесь в ловушку "одиночные против двойных кавычек". В Ruby есть отличная поддержка произвольных разделителей для строковых литералов:

Зеркало сайта - https://web.archive.org/web/20160310224440/http://rors.org/2008/10/26/dont-escape-in-strings

Оригинальный сайт - http://rors.org/2008/10/26/dont-escape-in-strings

31 голосов
/ 11 ноября 2008

Я всегда использую одинарные кавычки, если мне не нужна интерполяция.

Почему? Это выглядит лучше. Когда у вас на экране масса вещей, множество одинарных кавычек дает вам меньше «визуальных помех», чем множество двойных кавычек.

Я хотел бы отметить, что это не то, что я сознательно решил сделать, а то, что я «эволюционировал» с течением времени, пытаясь сделать код более привлекательным.

Иногда я использую% q или% Q, если мне нужны встроенные кавычки. Я только когда-либо использовал heredocs возможно один или два раза.

27 голосов
/ 12 ноября 2008

Как и многие программисты, я стараюсь быть настолько конкретным, насколько это практически возможно. Это означает, что я пытаюсь заставить компилятор выполнять как можно меньше работы, делая мой код максимально простым. Поэтому для строк я использую самый простой метод, который мне подходит для этой строки.

<<END
For strings containing multiple newlines, 
particularly when the string is going to
be output to the screen (and thus formatting
matters), I use heredocs.
END

%q[Because I strongly dislike backslash quoting when unnecessary, I use %Q or %q
for strings containing ' or " characters (usually with square braces, because they
happen to be the easiest to type and least likely to appear in the text inside).]

"For strings needing interpretation, I use %s."%['double quotes']

'For the most common case, needing none of the above, I use single quotes.'

Мой первый простой тест на качество подсветки синтаксиса, предоставляемый программой, состоит в том, чтобы увидеть, насколько хорошо она обрабатывает все методы цитирования.

11 голосов
/ 12 ноября 2008

Я использую одинарные кавычки, если мне не нужна интерполяция. Аргумент о том, что будет затруднительно изменить позже, когда вам понадобятся колебания интерполяции в другом направлении, тоже: вы должны изменить с двойного на одиночный, когда вы обнаружили, что в вашей строке был символ # или \, который вызвал выход, которого вы не сделали т намер.

Преимущество использования по умолчанию одинарных кавычек состоит в том, что в кодовой базе, которая принимает это соглашение, тип кавычек выступает в качестве визуальной подсказки относительно того, ожидать ли интерполированные выражения или нет. Это еще более заметно, когда ваш редактор или IDE по-разному подсвечивает два типа строк.

Я использую синтаксис% {.....} для многострочных строк.

8 голосов
/ 11 ноября 2008

Я обычно использую двойные кавычки, если только мне не нужно отключить экранирование / интерполяцию.

6 голосов
/ 17 июля 2013

Я вижу аргументы для обоих:

Для использования в основном двойных кавычек:

enter image description here

  • Проще найти строку foobar, выполнив поиск "foobar", если вы согласились с цитированием. Тем не менее, я не. Поэтому я ищу ['"] foobar ['"] включающим регулярные выражения.

Для использования некоторой комбинации одинарных двойных кавычек:

  • Знайте, нужно ли вам искать интерполяцию строк.
  • Может быть немного быстрее (хотя и настолько незначительным, что этого было недостаточно, чтобы повлиять на руководство по стилю github).
5 голосов
/ 11 ноября 2008

Раньше я использовал одинарные кавычки, пока не понял, что мне нужна интерполяция. Затем я обнаружил, что трачу впустую много времени, когда возвращаюсь назад и мне приходится менять некоторые одинарные кавычки на двойные. Тестирование производительности не показало ощутимого влияния на скорость использования двойных кавычек, поэтому я рекомендую всегда использовать двойные кавычки.

Единственное исключение - использование sub / gsub с обратными ссылками в строке замены. Тогда вам следует использовать одинарные кавычки, так как это проще.

mystring.gsub( /(fo+)bar/, '\1baz' )
mystring.gsub( /(fo+)bar/, "\\1baz" )
1 голос
/ 08 октября 2018

Одинарные кавычки сохраняют символы внутри них. Но двойные кавычки оценивают и разбирают их. Смотрите следующий пример:

"Welcome #{@user.name} to App!" 

Результаты:

Добро пожаловать Bhojendra в приложение!

Но

'Welcome #{@user.name} to App!'

Результаты:

Добро пожаловать # enj@user.name} в приложение!

1 голос
/ 11 ноября 2008

Я использую одинарные кавычки, если мне не нужна интерполяция или строка содержит одинарные кавычки.

Тем не менее, я только что выучил произвольный трюк с разделителем из ответа Деяна, и я думаю, что это здорово. =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...