Стиль C # предлагает использовать CamelCase в идентификаторах для разделения слов. Традиция Лиспа предлагает использовать вместо него тире.
Существовал ли когда-либо язык программирования, где использование пробелов в идентификаторах было не только разрешено, но и широко использовалось при использовании многословных идентификаторов?
В некоторых реализациях Scheme могут быть идентификаторы с пробелами , но это не очень распространенная практика. Вот пример:
Petite Chez Scheme Version 8.4
Copyright (c) 1985-2011 Cadence Research Systems
> (define |hey there| 100)
> (define |x y z| 200)
> (list |hey there| |x y z|)
(100 200)
programming-languages
language-design
dharmatech
источник
источник
bobs_utilities :: string_functions :: scramble
. Это имя, и мы можем включить произвольные пробелы, если захотим, потому что это синтаксис, а не простой токен. Имена с несколькими компонентами хотят быть абстрактным синтаксисом; Чистка информации о пространстве имен в едином идентификаторе - это, по сути, хак «искажение имени» для представления структуры внутри текста, где вам не хватает механизма для представления структуры.alert({'some Prop':'bob'}['some Prop']);
но если эти имена строковых свойств не проходят проверку идентификатора / метки, их нельзя использовать с точечной нотацией.define_singleton_method "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~" do; puts 42; end;
и тогда вы можете:send "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~"
но это не распространено.Ответы:
Компиляторы FORTRAN игнорировали пробелы так:
Были идентичны в том, что касается компилятора.
Некоторые диалекты SQL допускают использование встроенных пробелов в именах столбцов, но перед использованием они должны быть заключены в кавычки или какой-либо другой разделитель.
источник
Visual Basic (и VBScript) также допускают пробелы в идентификаторах, если вы окружаете идентификатор квадратными скобками.
Однако это происходит довольно редко.
источник
SQL считается?
источник
Ну, пробел это все о ... пробел:
К сожалению, Markdown не поддерживает его синтаксис, и я не могу показать вам некоторый код, но в Википедии есть пример кода, удобного для человека .
источник
В Алголе 68 у вас может быть место в идентификаторах (я не помню, были ли они значимыми или нет). Но ключевые слова были помечены обрезкой . Использование имен с пробелом в них было идиоматичным (по крайней мере, вокруг меня).
VHDL позволяет спасся идентификаторы со значительными пробелами в них:
\foo bar\
. Это позволяет также использовать ключевые слова в качестве идентификатора\and\
, любой символ\n<42>\
и регистр чувствительности в идентификаторах (\Foo\
и\foo\
отличаются, в то время какFoo
иfoo
эквивалентны, и отличаются от любого\Foo\
и\foo\
!). В Verilog также есть идентификаторы с пробелами с большинством этих характеристик (обычные идентификаторы чувствительны к регистру, и их выход без необходимости не создает другого идентификатора), но не допускает пробелов в них. Потребность в экранированных идентификаторах в VHDL и Verilog проистекает из того факта, что они часто создаются автоматически из других источников (например, схем), где идентификаторы обычно не имеют того же ограничения, что и в языке программирования; AFAIK, они не используются в других обстоятельствах.источник
'DEFINE'
и, личный фаворит'COMMENT'
. Мы использовали использовать макропроцессор, чтобы заменить их версиями без кавычек).Я не знаю, считаете ли вы MediaWiki wikitext языком, но имена с пробелами определенно идиоматичны:
Где «развернуть раздел» - это имя шаблона (http://en.wikipedia.org/wiki/Template:Expand_section)
Я предполагаю, что это соответствует критериям - язык, где идентификаторы обычно содержат пробелы. Это никогда (я думаю?) Неоднозначно, потому что идентификаторы всегда окружены множеством знаков препинания, чтобы отделить их от необработанного вики-текста.
источник
if
S и рекурсию. Синтаксис и производительность довольно плохи, хотя. Шаблоны ведут себя во многом как функции, и их имена считаются идентификаторами в моей книге.Inform 7 - это система для разработки интерактивной художественной литературы с использованием синтаксиса, подобного естественному языку, в котором многословные идентификаторы являются обычным явлением:
Ограничение, конечно, заключается в том, что идентификатор не может содержать ключевое слово, когда это будет неоднозначным.
Аналогичным образом, идентификаторы с подчеркиванием в Agda могут быть использованы mixfix, простейшим примером которого, вероятно, является
if_then_else_
оператор:источник
Scala позволяет произвольные идентификаторы с помощью обратных галочек. Обычно это используется для вызова,
Thread.`yield`
потому чтоyield
это зарезервированное слово в Scala. Это может быть (ab) иметь пробелы в именах, хотя это будет далеко от идиоматического кода Scala:Черт возьми, вы даже можете иметь вкладки в идентификаторах:
Я предполагаю , что это может предположительно быть идиоматическим для грамотного программирования народа. Может быть.
источник
+
в именах методов. Так чтоobj.a+=1
, это было бы проанализировать, как если быa+=
это был метод. Изобретатель Мартин Одерский в своем учебнике предполагает, что программисты обычно включают пробелы, так что неоднозначности синтаксического анализатора практически не слишком проблематичны.obj.a+=1
эквивалентно тому,obj.a += 1
что эквивалентноobj.a.+=(1)
. Вам понадобится,obj.a_+=1
если вы хотите, чтобы все работало так, как вы описали. (На самом деле, это даст ошибку разбора, вам нужно либо позвонить,obj.a_+=(1)
либоobj a_+= 1
.)F # допускает пробелы в именах идентификаторов, но они должны быть заключены в двойные обратные галочки. Посмотрите ответ на этот вопрос: https://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f .
источник
Вы можете подумать, что это имеет место в Cucumber / Gherkin , где имена функций фактически являются предложениями со встроенными в них аргументами.
Как расширение, я ожидал бы, что это будет более распространено в крошечных DSL , где язык должен быть дружественным для не разработчиков. Например, многие механизмы правил предоставляют возможность определять правила с англоязычным описанием, где пробелы могут использоваться в идентификаторах.
источник
FWIW, Tcl допускает использование пробелов (и почти всех других символов) в идентификаторах, хотя использование этой функции не является распространенным явлением. Основная причина, по которой он не используется очень часто, заключается в том, что вы должны использовать правильное цитирование. Например, следующий код устанавливает переменную с именем «my name» в «bob», а затем печатает ее
ОТО, это очень полезно при динамическом построении переменных, так как при создании таких переменных не нужно беспокоиться о недопустимых символах
источник
Есть несколько, о которых я знаю. Я работаю над одним и гибким языком программирования . Inform делает, но это не совсем язык программирования общего назначения.
источник
Если вы считаете, что автоматизированное тестирование DSL является языком, среда роботов допускает пробелы в именах ключевых слов, и это очень идиоматично. В следующем примере «Say hello» - это имя ключевого слова, «Example test case» - это имя теста, а «$ {first name}» - переменная:
источник
Язык 4D допускает пробелы в именах методов и переменных. Как правило, он не одобряется в сообществе, но все встроенные методы и переменные используют их, когда это применимо (
SET MENU ITEM PARAMETER
например,)источник
В Smalltalk есть ключевые методы, такие как
a:b:c:
пробелы, которые вызываются при вызове. Например:a: 100 b: 200 c: 300
. Это стандартная идиома в языке.источник
Powershell допускает пробелы в именах переменных:
источник
Я видел упоминание о подобном для VB, но в JS это часто используется. Любое свойство объекта в JavaScript может быть доступно и задано в виде строки в квадратных скобках или просто в виде строк в литералах объекта. Имена свойств, которые не следуют правилам именования переменных JS, недоступны через. обозначения, но они удобны. Например, вы можете сопоставить URL-адреса с поведением или ссылаться на группу людей по имени, когда вы уверены, что все они уникальны. Это часто очень удобно и легко читается:
Это также упрощает реструктуризацию JSON для простоты использования без потери фактора мгновенного объекта при падении в JS.
источник
foo['my method']()
иfoo['my property']
Power Query использует много автоматически сгенерированного кода. Я предполагаю, что более половины сгенерированных идентификаторов используют пробелы:
Как вы можете видеть, как и во многих языках, существует дополнительный синтаксис для устранения неоднозначности идентификатора.
Но там, где это однозначно, дополнительный синтаксис не требуется:
источник
Если вы считаете его реальным языком, языком сценариев JMP ( http://www.jmp.com/support/downloads/pdf/jmp_scripting_guide.pdf ). Это позволяет идентификаторам иметь пробелы (чтобы сделать их более «читаемыми») и более или менее поощряет такие.
источник
Язык программирования o42a, который я сейчас разрабатываю, поддерживает имена из нескольких слов . В языке вообще нет ключевых слов, а имена обычно разделяются каким-то символом. В редком случае два имени следуют друг за другом, подчеркивание используется для их разделения.
источник
Authorware, чей язык сценариев основан на не объектно-ориентированном Pascal, допускал пробелы в именах переменных, хотя со временем люди обнаруживали проблемы с их использованием и уходили от него http://books.google.com/books?id= bHC88YignAkC & pg = PA428 & lpg = PA428 .
источник
Изменить: Этот ответ был показан как неправильный, см. Комментарии.
Если я правильно понимаю ваш вопрос, компилятор не может разрешить использование пробелов в имени идентификатора, поскольку это может привести к дублированию имен (если только не используется разделитель). Например:
int my = 0; bool my count = false; int count = 0; если (мой граф) ...
Термин «мой счет» сбивает с толку, он может относиться либо к переменной, называемой «мой счет», либо, возможно, разработчик забыл написать оператор отношения, такой как> между my и count.
COBOL позволяет разделять имена разделов и разделов пробелами, но это не идентификаторы и переменные, как в вашем вопросе.
источник
my Count
имени переменной будет программист, сделавший опечатку. Это не двусмысленность. Неоднозначность была бы, если бы был другой действительный способ разобрать выражение. По тем же соображениям можно сказать, что разрешениеa(b+c)
- это неоднозначно, потому что, возможно, программист забыл>
и действительно имел в видуa > (b + c)
.if (my count)
. Вы не говорите, что есть другой, действительный способ разобрать это утверждение (что будет означать, что оно неоднозначно). Вы говорите, что если вы добавите персонажа<
, вы получите другой, действительный анализ. И я говорю, что если вы добавите персонажа<
кa(b+c)
вам, вы получите другой, действительный анализ.var name of the variable : type of the variable
), либо вообще не иметь объявлений типов.