Почему популярные языки программирования не используют другие символы для разделения строк?[закрыто]

StackOverflow https://stackoverflow.com/questions/965425

Вопрос

Все языки программирования, которые я знаю (Perl, Javascript, PHP, Python, ASP, ActionScript, Commodore Basic) использует одинарные и двойные кавычки для разделения строк.

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

Почему в языках программирования не используются какой-то другой символ для разделения строк, тот, который не используется в обычном разговоре , | или { } например), чтобы мы могли продолжать жить своей жизнью?

Это правда, или я что-то упускаю из виду?Есть ли простой способ отказаться от использования кавычек для строк в современном языке программирования?

распечатать <<<КОНЕЦ
я знаю о здесь документ синтаксис, но для небольших манипуляций со строками он слишком сложен и усложняет форматирование.
КОНЕЦ;

[ОБНОВЛЯТЬ] Многие из вас отметили важность использования только символов ASCII.Я обновил примеры, чтобы отразить это ( обратная косая черта, трубка и брекеты).

Это было полезно?

Решение

В Python есть дополнительный тип строки, в котором используются тройные двойные кавычки.

"""like this"""

В дополнение к этому Perl позволяет вам использовать любой разделитель по вашему желанию.

q^ like this ^

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

Другие советы

Perl позволяет использовать любые персонажи, которые тебе нравятся

 "foo $bar" eq
 qq(foo $bar) eq
 qq[foo $bar] eq
 qq!foo $bar! eq
 qq#foo $bar# etc

Meanwhile
 'foo $bar' eq
 q(foo $bar) eq
 q[foo $bar] eq
 q!foo $bar! eq
 q#foo $bar# etc

Синтаксис распространяется на другие функции, включая регулярные выражения, что удобно, если вы имеете дело с URI.

 "http://www.example.com/foo/bar/baz/" =~ /\/foo/[^\/]+\/baz\//;
 "http://www.example.com/foo/bar/baz/" =~ m!/foo/[^/]+/baz/!;

Текущий:Кавычки "Пишущая машинка"

Есть много веских причин для использования кавычек, которые мы используем сейчас:

  • Цитаты легко найти на клавиатуре - поэтому их легко печатать, и они должны быть простыми, потому что строки нужны так часто.

  • Котировки указаны в ASCII - большинство инструментов программирования хорошо обрабатывают только ASCII.Вы можете использовать ASCII практически в любой мыслимой среде.И это важно, когда вы исправляете свою программу через соединение Telnet на каком-то далеком сервере.

  • Цитаты бывают разных версий - одинарные кавычки, двойные кавычки, обратные кавычки.Таким образом, язык может присваивать разные значения строкам, заключенным в разные кавычки.Эти разные кавычки также могут решить проблему «кавычек внутри кавычек».

  • Цитаты естественны - В английском языке кавычки использовались для разметки отрывков текста задолго до того, как появились языки программирования.В лингвистике кавычки используются точно так же, как и в языках программирования.Кавычки естественны так же, как + и - естественны для сложения и вычитания.

Альтернатива:«типографически» «правильные» кавычки

Технически они превосходят других.Одним из больших преимуществ является то, что вы можете легко отличить открывающие и закрывающие котировки.Но их сложно напечатать, и они не в ASCII.(Мне пришлось поместить их в заголовок, чтобы они вообще были видны в этом шрифте StackOverflow.)

Будем надеяться, что однажды, когда ASCII станет чем-то, что волнует только историков, а клавиатуры превратятся во что-то совершенно другое (если у нас вообще будут клавиатуры), появится язык программирования, который будет использовать лучшие кавычки...

В Python есть альтернативный разделитель строк с тройной двойной кавычкой """Some String""".

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

Языки (должны) стараться быть максимально простыми для понимания, а использование чего-то отличного от кавычек для работы со строками приводит к ненужной сложности.

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

Э:Я пропустил символ вертикальной черты, который на самом деле может быть жизнеспособной альтернативой.За исключением того, что в настоящее время он широко используется в качестве оператора OR, и проблема читаемости все еще остается.

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

РЕДАКТИРОВАТЬ:Что касается того, почему бы не использовать {}, | Или , ну, все эти символы уже имеют значения на большинстве языков.Представьте себе C или Perl с двумя разными значениями «{» и «}»!

| означает или, и на некоторых языках уже объединяют строки.и как бы вы получили , если бы \ был разделителем?

По сути, я действительно не понимаю, почему это проблема.Неужели \" действительно ТАК сложно?Я имею в виду, что в C вам часто приходится использовать \%, \ и несколько других двухсимвольных символов, так что...Мех.

Потому что никто не создал язык, используя какой-то другой символ, ставший популярным.

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

Сравните следующее.

print "This is a simple string."
print "This \"is not\" a simple string."

print ¤This is a simple string.¤
print ¤This "is not" a simple string.¤

Мне, например, не кажется, что второе проще или читабельнее.

Итак, вам нужен старомодный FORTRAN, в котором вы будете цитировать, подсчитывая количество символов в строке и встраивая ее в формат H, например: 13HHello, World!.Для человека, который делал несколько вещей с FORTRAN еще в те времена, когда название языка было только заглавными буквами, кавычки и экранирование от них - это хорошо.(Например, вы не совсем облажались, если в ручном подсчете символов вы отклонились на единицу.)

Серьезно, идеального решения не существует.В какой-то момент всегда будет необходимо иметь строку, содержащую любой символ кавычки, который вам нравится.Для практических целей разделители кавычек должны располагаться на клавиатуре и быть легко доступными, поскольку они часто используются.Перл q@...@ синтаксис завершится ошибкой, если строка содержит пример каждого возможного символа.Константы Холлерита в FORTRAN еще хуже.

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

Одна из веских причин, вероятно, заключается в том, что если это единственное, что вы хотите улучшить в существующем языке, то на самом деле вы не создаете новый язык.

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

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

И в любом случае механизм цитирования по-прежнему будет необходим... вы получаете сокращение количества случаев использования цитирования за счет усложнения чтения языка для неспециалистов.

Так что не совсем понятно, что это победа, да и тут сила привычки.

Ада не использует одинарные кавычки для строк.Они предназначены только для символов, и их не нужно экранировать внутри строк.

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

Я предполагаю, что основная причина, по которой ни один из этих других символов не используется для разделителей строк, заключается в том, что их нет в исходной 7-битной кодовой таблице ASCII.Возможно, в наши дни это не самое лучшее оправдание, но в мире, где большинство разработчиков языков боятся отказаться от безумно дрянного синтаксиса C, вы не найдете много сторонников необычного выбора разделителя строк.

Python позволяет смешивать одинарные и двойные кавычки для помещения кавычек в строки.

print "Please welcome Mr Jim 'Beaner' Wilson."
>>> Please welcome Mr Jim 'Beaner' Wilson.

print 'Please welcome Mr Jim "Beaner" Wilson.'
>>> Please welcome Mr Jim "Beaner" Wilson

Вы также можете использовать ранее упомянутые тройные кавычки.Они также распространяются на несколько строк, что позволяет вам избежать необходимости печатать новые строки.

print """Please welcome Mr Jim "Beaner" Wilson."""
>>> Please welcome Mr Jim "Beaner" Wilson

Наконец, вы можете печатать строки так же, как и все остальные.

print "Please welcome Mr Jim \"Beaner\" Wilson."
>>> Please welcome Mr Jim "Beaner" Wilson
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top