it-swarm-eu.dev

Warum wird in einigen Programmiersprachen immer noch zwischen Groß- und Kleinschreibung unterschieden?

Ich sehe keine Verwendung für Groß- und Kleinschreibung in einer Programmiersprache, abgesehen von der Verschleierung von Code.

Warum dies in einer Programmiersprache implementieren?

Update:

Es sieht aus wie jemand, den Sie kennen, hat eine Erklärung dazu abgegeben .

44
DavRob60

Während das Falten von Fällen in Englisch ziemlich trivial ist, ist es in einigen anderen Sprachen viel weniger. Wenn ein deutscher Programmierer ß Was werden Sie in einem Variablennamen als Großbuchstaben betrachten? Nur zu Ihrer Information, "ß" wird immer in Kleinbuchstaben verwendet. OTOH, "ss" is äquivalent - würden Sie einen Compiler in Betracht ziehen, der dazu verpflichtet ist? Wenn Sie in Unicode einsteigen, treten noch interessantere Probleme auf, z. B. Zeichen mit vorkomponierten diakritischen Zeichen im Vergleich zu separaten kombinierten diakritischen Zeichen. Dann gelangen Sie zu einigen arabischen Schriften mit drei getrennten Formen vieler Buchstaben und nicht nur zu zwei.

In den dunklen Zeiten waren die meisten Programmiersprachen fast notgedrungen unabhängig von Groß- und Kleinschreibung. Zum Beispiel begann Pascal mit Control Data-Mainframes, die nur sechs Bits pro Zeichen verwendeten (insgesamt 64 Codes). Die meisten dieser Maschinen verwendeten den Zeichensatz "CDC Scientific", der nur Großbuchstaben enthielt. Sie konnten zu anderen Zeichensätzen wechseln, aber die meisten hatten entweder Groß- oder Kleinbuchstaben, aber nicht beide - verwendeten jedoch für beide die gleichen Codes. Das Gleiche galt für die alten Baudot-Codes, die in den Anfängen von COBOL, FORTRAN, BASIC usw. als Standard angesehen wurden. Als leistungsfähigere Hardware weit verbreitet war, war ihre Groß- und Kleinschreibung so tief verwurzelt, dass eine Änderung unmöglich war .

Im Laufe der Zeit ist die eigentliche Schwierigkeit der Unempfindlichkeit gegenüber Groß- und Kleinschreibung offensichtlicher geworden, und Sprachdesigner haben meistens entschieden ("realisiert" wäre wahrscheinlich ein genauerer Begriff), dass wenn/wenn Menschen wirklich Unempfindlichkeit zwischen Groß- und Kleinschreibung wünschen, diese besser von Zusatzwerkzeugen gehandhabt werden kann als in der Sprache selbst.

Zumindest IMO, Compiler sollte Eingaben genau wie dargestellt nehmen und nicht entscheiden, dass "Sie dies geschrieben haben, aber ich gehe davon aus, dass Sie wirklich etwas anderes gemeint haben." Wenn Sie möchten, dass Übersetzungen durchgeführt werden, sollten Sie sie besser separat ausführen, da die Tools dafür ausgelegt sind.

114
Jerry Coffin

Warum sollte jemand Fallunempfindlichkeit wollen? In welchem ​​Szenario ist es nützlich, eine einzelne Variable an einer Stelle als VARIABLE, an einer anderen als Variable und an einer dritten als variable bezeichnen zu können? Die Unempfindlichkeit gegenüber Groß- und Kleinschreibung ist ärgerlich. Ich erhalte viel lieber einen Compilerfehler, wenn ich versehentlich VAriable anstelle von Variable eingebe, anstatt solche Tippfehler in meinen Code einfließen zu lassen.

Zusammenfassend lässt sich sagen, dass viele Programmiersprachen nicht nur aus historischen/trägen Gründen zwischen Groß- und Kleinschreibung unterscheiden, sondern auch, weil die Groß- und Kleinschreibung keine schlechte Idee ist.

116
nohat

In Java Groß- und Kleinschreibung wird NICHT verwendet, um weitere Optionen im Code bereitzustellen, sondern für eine sehr klare und konsistente semantische Bedeutung. ClassesLookLikeThis. ObjectsLookLikeThis. MethodsLookLikeThis (). STATIC_VARIABLES_LOOK_LIKE_THIS NICHT größere Freiheit bieten: Sie können einige Informationen präzise in eine ansonsten übermäßig ausführliche Sprache packen.

Ich denke, dass in explizit statisch typisierten Sprachen mit mucho-Compiler und IDE Unterstützung) die Groß- und Kleinschreibung eine großartige Möglichkeit ist, Informationen zu kommunizieren (z. B. Java). Bei Sprachen wie Ruby würde die Groß- und Kleinschreibung wahrscheinlich nicht berücksichtigt verursachen noch MEHR unerwartete Ergebnisse, obwohl ich offen wäre, Ruby ohne Berücksichtigung der Groß- und Kleinschreibung zu versuchen.

Ich denke, dass die Groß- und Kleinschreibung bei einem strengen System den Code nicht verschleiert, sondern tatsächlich klarer macht. Betrachten Sie mögliche Java Code:

      joe blah = new hUf();

das ist ziemlich klar, aber was ist mit:

      hUf.WTF();

In Java wie es ist, würden Sie automatisch wissen, was dies ist. In Java, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, ist es mehrdeutig, also Sie müssten auf einen anderen Mechanismus zurückgreifen, um Unterscheide Klassen von Instanzen von Paketen von Methoden. Und DIESER Mechanismus würde dich wahrscheinlich dazu bringen, dich zu übergeben, wie hässlich es ist :)

27
Dan Rosenstark

Ich glaube nicht, dass es "implementiert" wurde, sondern "erlaubt". Die Groß- und Kleinschreibung wird als Standardstatus für Zeichenfolgenvergleiche verwendet. Der Compiler-Ingenieur benötigt zusätzliche Arbeit, um eine Sprache ohne Berücksichtigung der Groß- und Kleinschreibung zu verwenden, da Sie zusätzlichen Code hinzufügen müssen, um Vergleiche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen und die ursprünglichen Token-Namen für eine korrekte Fehler- und Warnmeldung beizubehalten.

Das ist mit ziemlicher Sicherheit der Grund, warum es in C gelandet ist. Sie wollten eine einfache Sprache erstellen, für die ein Compiler auf Kosten der Benutzerfreundlichkeit leicht zu implementieren ist. Warum ist es in modernen Sprachen? Weil es natürlich in C ist, muss es der richtige Weg sein, es zu tun! </ Sarkasmusmodus>

24
Mason Wheeler

Wenn nichts anderes, vereinfacht es das Parsen und ermöglicht Ihnen mehr Kombinationen für Variablen-/Klassennamen.

Bei der Analyse ohne Berücksichtigung der Groß- und Kleinschreibung müssen Sie nur eindeutige Bezeichner verwenden, da "myClass" und "MyClass" dasselbe sind. Alternativ müssten Sie Ihrem Parser Komplexitätsebenen hinzufügen, um sicherzustellen, dass Sie anhand des Kontexts bestimmen können, welcher Bezeichner verwendet wird.

Stellen Sie sich einen Fall wie diesen vor:

XmlWriter xmlWriter = new XmlWriter();
xmlWriter.Write("blah");

Angenommen, die XmlWriter-Klasse verfügt auch über eine statische Methode namens "Write". Rufen Sie es für die Instanz oder für die Klasse auf, wenn hier keine Groß- und Kleinschreibung angewendet wird?

23
Adam Lear

Ich mag Groß- und Kleinschreibung, wenn der Code aus keinem anderen Grund selbstdokumentierender ist:

this is a CONSTANT
this is a ClassName
this is a methodName
this is a local variablename

Normalerweise programmiere ich in Python, aber in meinen C # -Tagen fand ich es sehr praktisch, Klasseninstanzen genauso zu benennen wie die Klasse, jedoch in Kleinbuchstaben (oder Kamelbuchstaben) (wie andere gesagt haben):

Thing thing = new Thing();

Die Verwendung von Sprachen ohne Berücksichtigung der Groß- und Kleinschreibung erfordert hierfür eine andere Konvention, d. H. Eine Art Siegel wie:

Thing oThing = new Thing()
Thing instanceOfThing = new Thing()

Welches ist eine "schlechte Sache".

Ich finde es auch bequem, grep (Groß- und Kleinschreibung beachten), um einen Verweis auf eine Klasse im Vergleich zu Verwendungen einer Variablen zu finden. Mit einer Sprache ohne Berücksichtigung der Groß- und Kleinschreibung wäre dies weniger einfach. Gleiches gilt für Suchen und Ersetzen.

Wenn ich als Programmierer Wörter mit unterschiedlichen Fällen sehe, fällt mir auf, dass es sich um unterschiedliche Dinge handelt ... Ich habe selten Fehler, bei denen variable Fälle falsch waren, selbst in dynamischen Skriptsprachen, in denen ein Compiler geholfen hätte.

13
Hollister

Menschen achten auf die Form von Wörtern, bevor sie sie tatsächlich lesen. Durch die Groß- und Kleinschreibung wird die Form eines Symbols im gesamten Code konsistent gehalten. Ich stimme auch den oben genannten zu, wonach unterschiedliche Konventionen unterschiedliche Arten von Symbolen bezeichnen. Groß- und Kleinschreibung und Unempfindlichkeit können beide missbraucht werden. Schlechte Programmierer generieren immer schlechten Code ... sie werden einen Weg finden.

Nehmen Sie die Sprache als Beispiel. Warum beginnen wir Sätze und benannten Dinge mit Großbuchstaben ... Liegt es auch an Unix?

10
Tjaart

Ich denke, für statisch typisierte Sprachen wie C # und Java bringt es keinen Mehrwert. Weil Sie in den meisten Fällen eine IDE] haben, die Fallfehlanpassungen ohnehin automatisch korrigiert, sodass ich am Ende des Tages, wenn ich versehentlich "VAriable" eingebe, my IDE korrigiert das automatisch zu "Variable" für mich. Fügen Sie dazu das MyClass myClass; Stilkonventionen und Sie können sehen, dass Groß- und Kleinschreibung nicht unbedingt eine schlechte Sache ist.

Für dynamisch typisierte Sprachen gibt es möglicherweise mehr Argumente, da es für eine IDE] schwieriger ist, eine Autokorrektur zu erraten, aber bei dynamisch typisierten Sprachen haben Sie dies bereits Viel mehr Sorgen (in Bezug auf Tippfehler), dass die Verwendung einer einheitlichen Gehäusekonvention nicht viel mehr Belastung bedeutet.

Also ja, obwohl es keinen wirklichen Grund gibt, warum Sprachen nicht ohne Berücksichtigung der Groß- und Kleinschreibung sein könnten, gibt es auch keinen wirklichen Grund, warum sie sollten auch sein könnten.

In diesem Artikel von Scott Hanselman über "SignOn" und "Signon" ging es um Zeichenfolgenvergleiche und nichts mit Programmiersprachen. Ich bin damit einverstanden, dass Zeichenfolgen, die Benutzer geben ein, immer ohne Berücksichtigung der Groß- und Kleinschreibung verglichen werden sollten, aber ich denke, dass dies ein anderes Ballspiel ist als Bezeichner in einer Programmiersprache.

9
Dean Harding

Wenn eine Sprache zwischen Groß- und Kleinschreibung unterscheidet, nutze ich sie, um die konventionelle Verwendung von Groß- und Kleinschreibung in Mathematik und Naturwissenschaften zu reproduzieren. Hier ist eine (keineswegs erschöpfende) Liste einiger Fallkonventionen:

  • In der Wahrscheinlichkeitstheorie repräsentiert Kleinbuchstaben f normalerweise eine Wahrscheinlichkeitsdichtefunktion (pdf), während Großbuchstaben F die entsprechende kumulative Verteilungsfunktion (cdf) darstellen.
  • Auch in der Wahrscheinlichkeitstheorie bezeichnen Großbuchstaben Zufallsvariablen X und die entsprechenden Kleinbuchstaben bezeichnen ihre Realisierungen x, wie in $ Pr [X = x]\leq 0.05 $.
  • In der linearen Algebra werden Großbuchstaben im Allgemeinen verwendet, um sich auf Matrizen zu beziehen, während Kleinbuchstaben im Allgemeinen verwendet werden, um sich auf Zahlen zu beziehen, z. B. $ A = [a_ {ij}] $.
  • Einheitensymbole werden in Kleinbuchstaben geschrieben (z. B. m für Meter), mit Ausnahme von Liter (L) und solchen Einheiten, die vom Namen einer Person abgeleitet sind (W für Watt, Pa für Pascal, N für Newton usw.).
  • Symbole von Präfixen, die eine Million oder mehr bedeuten, werden großgeschrieben (M für Mega (Millionen)), und Symbole mit weniger als einer Million werden in Kleinbuchstaben geschrieben (m für Milli (Tausendstel)).
6
A. N. Other

Ich dachte nur, dass es an Unix und C liegt - aber das ist eine Art Hühnchen- und Ei-Problem, das nur die Geezer richtig beantworten können.

Ich verwende die Begründung, die die Hühner in "Der Osterhase kommt in die Stadt" verwendeten, als sie gefragt wurden, ob sie vor Eiern kamen. Weil es Hühner auf Noahs Arche gab, standen Hühner an erster Stelle. Da GCC unter Unix ausgeführt wird, stand Unix an erster Stelle. Da sich Unix so sehr um den Fall kümmert, kümmert sich C und alle seine Varianten und Nachkommen, ja alles, was geschweifte Klammern auferlegt, um den Fall.

Es gibt wahrscheinlich auch einen Zusammenhang zwischen geschweiften Klammern und der Groß- und Kleinschreibung.

3
Peter Turner

"Groß- und Kleinschreibung beachten" ist für technische Personen immer besser, um Mehrdeutigkeiten zu reduzieren. Nehmen Sie als Beispiel den Dateinamen. Der Umgang mit Windows-Dateinamen ist schwieriger als mit Unix-Dateinamen, da bei Dateinamen in Windows die Groß- und Kleinschreibung nicht berücksichtigt wird, während bei Dateinamen unter Unix die Groß- und Kleinschreibung beachtet wird.

Zurück zur Programmierung. Für Klassennamen, Methodennamen und Variablennamen erzwingen die meisten Sprachen die Namensstilregel nicht. Manchmal können wir der Einfachheit halber einfach den Namen "Groß- und Kleinschreibung beachten" verwenden, um ohne Konvertierung an eine andere Datenquelle zu binden oder das Problem mit demselben Namen zu behandeln, jedoch in einem anderen Fall.

2
linquize

Zusätzlich zu den hervorragenden Antworten, die bisher gegeben wurden, möchte ich darauf hinweisen, dass die Groß- und Kleinschreibung Ihnen auch zusätzliche "Namespaces" bietet. Zum Beispiel hat Perl einige spezielle Blöcke wie BEGIN und END, die zu anderen Zeiten als normaler Code ausgeführt werden (BEGINNEN zur Kompilierungszeit, ENDE nach Beendigung des normalen Programms) und diese als all- haben Kappen heben sie hervor und bedeuten, dass die Kleinbuchstabenvarianten keine reservierten Wörter sind.

Man kann noch weiter gehen und Namen in Großbuchstaben für die zukünftige Verwendung durch die Sprache reservieren und normalen Programmierern, die normalerweise NICHT IN IHREM CODE SCHREIEN, keinen Schaden zufügen.

2
moritz

Ich bin überrascht von diesem Geschwätz. Jetzt, da niemand möchte, dass Sie einen Unterstrich oder einen m_ In einem Feldnamen in C # verwenden, habe ich nur die Groß- und Kleinschreibung verwendet, und wenn der Feldname mit einem öffentlichen Eigenschaftsnamen identisch ist, nur der Der Name des öffentlichen Eigentums ist Pascal case und das Hintergrundfeld ist camel case, ich denke, "so sei es" - das scheint die gesamte Programmiergemeinschaft zu wollen. Es hat bisher keine Probleme verursacht.

1
Scott Whitlock

Insbesondere einige Programmierer stammen aus den Anfängen von BASIC, wo ein Variablenname nur 2 Zeichen lang sein kann.

Wenn es sich also um eine beliebige Anzahl von Zeichen handeln kann, werden sie sehr glücklich. Und zusammen mit der Groß- und Kleinschreibung - weil sie sich nicht darum kümmern möchten, dass SomeName versehentlich gleich SOMENAME ist und aufgrund solcher Dinge einen Fehler verursacht.

0
Michael W