Im C # -Stil wird die Verwendung von CamelCase in Bezeichnern zur Abgrenzung von Wörtern empfohlen. Lisp Tradition schlägt vor, stattdessen Striche zu verwenden.
Gab es jemals eine Programmiersprache, in der die Verwendung von Leerzeichen in Bezeichnern nicht nur zulässig war, sondern eine häufig verwendete Redewendung bei der Verwendung von Bezeichnern mit mehreren Wörtern?
In einigen Schema- Implementierungen können Bezeichner mit Leerzeichen verwendet werden , dies ist jedoch keine weit verbreitete Praxis. Hier ist ein Beispiel:
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
quelle
quelle
bobs_utilities :: string_functions :: scramble
. Dies ist ein Name, und wir können beliebige Leerzeichen einfügen, wenn wir möchten, da es sich um eine Syntax handelt, die kein einfaches Token ist. Namen mit mehreren Komponenten möchten eine abstrakte Syntax haben. shoehorning Namespace-Informationen in einem einzelnen Bezeichner sind im Grunde genommen ein "Name Mangling" -Hack zur Darstellung der Struktur innerhalb von Text, bei dem Ihnen der Mechanismus zur Darstellung der Struktur fehlt.alert({'some Prop':'bob'}['some Prop']);
Wenn diese Namen von Zeichenfolgeneigenschaften den Bezeichner- / Etikettentest nicht bestehen, können Sie sie nicht mit Punktnotation verwenden.define_singleton_method "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~" do; puts 42; end;
und dann können Sie:send "sjdlkfjsljk#$SDEF SDFSDF@# @#$!!~"
aber es ist nicht üblich.Antworten:
FORTRAN-Compiler ignorierten Leerzeichen wie folgt:
Waren für den Compiler identisch.
Einige SQL-Dialekte erlauben eingebettete Leerzeichen in Spaltennamen, müssen jedoch von Anführungszeichen oder anderen Trennzeichen umgeben sein, bevor sie verwendet werden können.
quelle
Visual Basic (und VBScript) erlauben auch Leerzeichen in Bezeichnern, wenn Sie den Bezeichner mit eckigen Klammern umgeben.
Dies ist jedoch ziemlich selten.
quelle
Zählt SQL?
quelle
Nun, bei Whitespace dreht sich alles um ... Whitespace:
Leider unterstützt Markdown seine Syntax nicht und ich kann Ihnen keinen Code zeigen, aber Wikipedia hat ein menschenfreundliches Codebeispiel .
quelle
In Algol 68 könnte in Bezeichnern Platz sein (ich erinnere mich nicht, ob sie signifikant waren oder nicht). Die Keywords wurden jedoch durch Stoppen gekennzeichnet . Namen mit Leerzeichen zu verwenden war idiomatisch (zumindest um mich herum).
VHDL erlaubt Kennungen mit bedeutenden Räume in ihnen entronnen
\foo bar\
. Dies ermöglicht auch die Verwendung der Schlüsselwörter als Identifikator\and\
, einem beliebigen Zeichen\n<42>\
und die Groß- und Kleinschreibung in Identifikatoren (\Foo\
und\foo\
unterschiedlich sind , währendFoo
undfoo
äquivalent sind, und die sich von beiden\Foo\
und\foo\
!). Verilog hat auch Bezeichner mit den meisten dieser Merkmale angegeben (bei normalen Bezeichnern wird die Groß- und Kleinschreibung beachtet, und wenn sie unnötigerweise maskiert werden, wird kein weiterer Bezeichner erstellt), in ihnen sind jedoch keine Leerzeichen zulässig. Die Notwendigkeit von Escape-Kennungen in VHDL und Verilog ergibt sich aus der Tatsache, dass sie häufig automatisch aus anderen Quellen (wie z. B. Schaltplänen) erstellt werden, bei denen Kennungen normalerweise nicht die gleiche Einschränkung aufweisen wie in der Programmiersprache. AFAIK, unter anderen Umständen werden sie nicht idiomatisch verwendet.quelle
'DEFINE'
und, ein persönlicher Favorit, den'COMMENT'
wir verwendet haben) den Makroprozessor verwenden, um diese durch nicht zitierte Versionen zu ersetzen).Ich weiß nicht, ob Sie MediaWiki Wikitext als Sprache betrachten, aber Namen mit Leerzeichen sind definitiv idiomatisch:
Wobei "expand section" der Name einer Vorlage ist (http://en.wikipedia.org/wiki/Template:Expand_section)
Ich denke, es erfüllt die Kriterien - eine Sprache, in der Bezeichner routinemäßig Leerzeichen enthalten. Es ist nie (glaube ich?) Mehrdeutig, weil Bezeichner immer von vielen Satzzeichen umgeben sind, um sie von rohem Wiki-Text zu trennen.
quelle
if
s und Rekursion. Syntax und Leistung sind allerdings ziemlich schlecht. Vorlagen verhalten sich ziemlich ähnlich wie Funktionen, und ihre Namen gelten in meinem Buch als Bezeichner.Inform 7 ist ein System zur Entwicklung interaktiver Belletristik in natürlicher Syntax, in der Kennungen mit mehreren Wörtern an der Tagesordnung sind:
Die Einschränkung besteht natürlich darin, dass ein Bezeichner kein Schlüsselwort enthalten darf, wenn dies nicht eindeutig wäre.
In ähnlicher Weise können Bezeichner mit Unterstrichen in Agda mixfix verwendet werden. Das einfachste Beispiel hierfür ist wahrscheinlich der
if_then_else_
Operator:quelle
Scala erlaubt beliebige Bezeichner mit Backticks. Die übliche Verwendung hierfür ist das Aufrufen,
Thread.`yield`
dayield
es sich bei Scala um ein reserviertes Wort handelt. Dies könnte (ab) verwendet werden, um Leerzeichen in Namen zu haben, obwohl das alles andere als idiomatischer Scala-Code wäre:Sie können sogar Tabulatoren in Bezeichnern haben:
Ich nehme an, dies könnte möglicherweise für das Literarische Programmierung Volk seines idiomatischen. Vielleicht.
quelle
+
in Methodennamen. Alsoobj.a+=1
würde es es analysieren, als oba+=
es eine Methode wäre. Der Erfinder Martin Odersky geht in seinem Lehrbuch davon aus, dass Programmierer üblicherweise Leerzeichen einschließen, so dass Parser-Ambiguitäten praktisch nicht zu problematisch sind.obj.a+=1
ist äquivalent zuobj.a += 1
dem äquivalent zuobj.a.+=(1)
. Das müssten Sie haben,obj.a_+=1
wenn Sie möchten, dass es so funktioniert, wie Sie es beschreiben. (Tatsächlich wird das einen Analysefehler geben, Sie müssen entweder anrufenobj.a_+=(1)
oderobj a_+= 1
.)F # erlaubt Leerzeichen in Bezeichnernamen, diese müssen jedoch von doppelten Backticks umgeben sein. Siehe die Antwort auf diese Frage: https://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f .
quelle
Möglicherweise ist dies in Cucumber / Gherkin der Fall , wo Funktionsnamen effektiv Sätze mit den darin eingebetteten Argumenten sind.
Als Erweiterung würde ich erwarten, dass dies häufiger bei winzigen DSLs vorkommt , bei denen die Sprache für Nicht-Entwickler geeignet sein soll. Beispielsweise bieten viele Regel-Engines die Möglichkeit, Regeln mit einer englischen Beschreibung zu definieren, bei der Leerzeichen in Bezeichnern verwendet werden können.
quelle
FWIW, Tcl erlaubt Leerzeichen (und fast jedes andere Zeichen) in Bezeichnern, obwohl es nicht üblich ist, diese Funktion zu nutzen. Der Hauptgrund, warum es nicht sehr oft verwendet wird, ist nur, dass Sie korrekte Anführungszeichen verwenden müssen. Im Folgenden wird beispielsweise eine Variable mit dem Namen "Mein Name" auf "Bob" gesetzt und dann gedruckt
OTOH, es ist sehr nützlich, wenn Variablen dynamisch erstellt werden, da man sich beim Erstellen solcher Variablen keine Gedanken über unzulässige Zeichen machen muss
quelle
Ich kenne nur wenige. Ich arbeite an einer und der geschmeidigen Programmiersprache . Inform tut es, aber es ist nicht gerade eine Allzweck-Programmiersprache.
quelle
Wenn Sie einen automatisierten DSL-Test für eine Sprache halten, lässt das Roboter-Framework Leerzeichen in Keyword-Namen zu und ist sehr idiomatisch. Im folgenden Beispiel ist "Say hello" ein Schlüsselwortname, "Example test case" ein Testfallname und "$ {first name}" eine Variable:
quelle
Die 4D Sprache erlaubt Leerzeichen in Methodennamen und Variablen. Es ist in der Regel in der Community verpönt, wird jedoch von allen integrierten Methoden und Variablen verwendet, sofern zutreffend (
SET MENU ITEM PARAMETER
z. B.).quelle
Smalltalk enthält Schlüsselwortmethoden,
a:b:c:
die beim Aufrufen Leerzeichen enthalten. Zum Beispiel:a: 100 b: 200 c: 300
. Dies ist eine Standardsprache in der Sprache.quelle
Powershell erlaubt Leerzeichen in Variablennamen:
quelle
Ich habe gesehen, dass für VB etwas Ähnliches erwähnt wurde, aber in JS wird dies tatsächlich häufig verwendet. Auf jede Eigenschaft eines Objekts in JavaScript kann zugegriffen werden und sie kann in Form von Zeichenfolgen in eckigen Klammern oder einfach als Zeichenfolgen in Objektliteralen festgelegt werden. Auf Eigenschaftsnamen, die nicht den Regeln für die variable Benennung von JS entsprechen, kann über nicht zugegriffen werden. Notation, aber sie sind praktisch. Beispielsweise möchten Sie möglicherweise URLs dem Verhalten zuordnen oder eine Gruppe von Personen anhand ihres Namens referenzieren, wenn Sie sicher sind, dass sie alle eindeutig sind. Es ist oft sehr praktisch und leicht zu lesen:
Dies macht es auch einfach, JSON zu restrukturieren, um die Verwendung zu vereinfachen, ohne den Instant-Object-Faktor zu verlieren, wenn er in JS abgelegt wird.
quelle
foo['my method']()
undfoo['my property']
Power Query verwendet viele automatisch generierte Codes. Ich schätze, mehr als die Hälfte der generierten Bezeichner verwenden Leerzeichen:
Wie Sie sehen, gibt es, wie in vielen Sprachen, eine zusätzliche Syntax, um zu unterscheiden, was der Bezeichner ist.
Aber an Stellen, an denen es eindeutig ist, ist keine zusätzliche Syntax erforderlich:
quelle
Wenn Sie es als echte Sprache betrachten, JMP-Skriptsprache ( http://www.jmp.com/support/downloads/pdf/jmp_scripting_guide.pdf ). Es erlaubt Identifikatoren, Leerzeichen zu verwenden (um sie "lesbarer" zu machen) und ermutigt mehr oder weniger dazu.
quelle
Die Programmiersprache o42a, die ich gerade entwickle, unterstützt Namen mit mehreren Wörtern . Die Sprache hat überhaupt keine Schlüsselwörter und die Namen werden normalerweise mit einem Symbol getrennt. In seltenen Fällen folgen die beiden Namen aufeinander, der Unterstrich dient zur Trennung.
quelle
Authorware, dessen Skriptsprache auf nicht objektorientiertem Pascal basiert, ließ Leerzeichen in Variablennamen zu. Im Laufe der Zeit entdeckten die Benutzer jedoch die Probleme bei der Verwendung und entfernten sich von dieser http://books.google.com/books?id= bHC88YignAkC & pg = PA428 & lpg = PA428 .
quelle
Bearbeiten: Diese Antwort hat sich als nicht korrekt erwiesen, siehe die Kommentare.
Wenn ich Ihre Frage richtig verstehe, kann ein Compiler keine Leerzeichen im Bezeichnernamen zulassen, da dies zu doppelten Namen führen kann (sofern kein Trennzeichen verwendet wird). Zum Beispiel:
int my = 0; bool my count = false; int count = 0; wenn (mein Graf) ...
Der Begriff 'my count' ist verwirrend. Er kann sich entweder auf die Variable 'my count' beziehen, oder der Entwickler hat vergessen, einen Beziehungsoperator wie> zwischen my und count zu schreiben.
Mit COBOL konnten Abteilungs- und Abschnittsnamen durch Leerzeichen getrennt werden, dies sind jedoch keine Bezeichner und Variablen wie in Ihrer Frage.
quelle
my Count
Variablennamen ein Tippfehler des Programmierers. Das ist keine Mehrdeutigkeit. Mehrdeutigkeit wäre, wenn es einen anderen gültigen Weg zum Parsen des Ausdrucks gäbe . Nach der gleichen Überlegung könnte man sagen, dass das Zulassena(b+c)
mehrdeutig ist, weil der Programmierer vielleicht ein vergessen>
und wirklich gemeint hata > (b + c)
.if (my count)
. Sie sagen nicht, dass es einen anderen, gültigen Weg gibt, diese Aussage zu analysieren (was bedeuten würde, dass sie mehrdeutig ist). Sie sagen, wenn Sie den Charakter hinzufügen<
, erhalten Sie eine andere, gültige Analyse. Und ich sage, wenn Sie den Charakter hinzufügen<
, erhaltena(b+c)
Sie auch eine andere, gültige Analyse.var name of the variable : type of the variable
) - oder überhaupt keine Typdeklarationen haben.