Groß- und Kleinschreibung in einer Sprache ignorieren

31

Wir versuchen, eine benutzerdefinierte Skriptsprache zu schreiben. Es wurde vorgeschlagen, die Sprache durch die Eingabe von Schlüsselwörtern zu verzeihen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird.

Ich persönlich mag die Idee nicht, aber es gibt nur wenige Leute in meinem Team, die sich dazu neigen und sagen, es würde den Endbenutzer glücklich machen! Beispiele für Sprachen wie FORTRAN, BASIC, SQL besagen, dass bei diesen die Groß- und Kleinschreibung nicht beachtet wird.

Ist das eine gute Idee?

Neugierig
quelle
4
Nun, Visual Basic unterscheidet im Allgemeinen nicht zwischen Groß- und Kleinschreibung. Beantwortet das Ihre Frage? ; P
yannis
3
Beachten Sie, dass die Groß- und Kleinschreibung von Bezeichnern nur sehr schwer beachtet werden kann, wenn Sie die Benutzer auf den ASCII-Zeichensatz beschränken.
Simon Richter
2
@MainMa: C ++ atleast nicht direkt. Es ermöglicht die Implementierung definierte Zeichen in der Kennung, aber was garantiert ist nur a-zA-Z, 0-9(außer am Anfang) und _.
Xeo
2
VB6 verwendet einen hybriden Ansatz: Sie können Schlüsselwörter und Bezeichner nach Belieben eingeben und die IDE konvertiert sie sofort in die gespeicherte Form. (Sie können sogar "endif" schreiben und es wird in "End If" konvertiert.)
Felix Dombek

Antworten:

42

Fragen Sie sich, wer der Endbenutzer ist. Wenn es von jemandem geschrieben werden soll, der über Programmiererfahrung in C oder Javscript oder IT-Erfahrung in Unix verfügt, ist Groß- und Kleinschreibung wahrscheinlich das Richtige, da der Benutzer dies erwartet. Aber für die meisten Endbenutzer, auch für Power-User, wird dies verwirrend sein.

Bei VB / VBA / VBScript wird die Groß- und Kleinschreibung nicht beachtet. Dies war eine Entscheidung, die es Nicht-Programmierern ermöglichte, auf einfache Weise die Sprache zu verstehen. Bei Excel-Formeln, bei denen es sich nicht um Skripten handelt, sondern um solche, die vielen Benutzern sehr nahe kommen, wird die Groß- und Kleinschreibung nicht berücksichtigt. Bei den meisten Schreibweisen kann die Wahl der Schreibweise dazu führen, dass der Text mehr oder weniger professionell und poliert aussieht, bei der Schreibweise ändert sich die semantische Bedeutung der Wörter jedoch nicht. Aus diesem Grund glaube ich, dass Nicht-Entwickler von einer Skriptsprache mit Groß- und Kleinschreibung verwirrt werden.

Auch dies ist keine technische Wahl. Es ist eine Entscheidung für das Produktmanagement, die von den Personen getroffen werden muss, die die Zielgruppe gut kennen.

Avner Shahar-Kashtan
quelle
Überlegen Sie, bei welchen Dateisystemen die Groß- und Kleinschreibung beachtet wird, bevor Sie sich die Programmiersprachen ansehen. Bei FAT / NTFS für Windows und HFS + für MacOS X wird die Groß- und Kleinschreibung nicht berücksichtigt, bei UFS / NFS für Unix wird die Groß- und Kleinschreibung beachtet. Hauptbenutzer mögen die Fähigkeit, Dateien / Variablen anhand winziger Unterschiede zu unterscheiden, während die meisten Benutzer es vorziehen, die Dinge intuitiver zu halten. Wie Avner sagt, liegt der Unterschied in der Wahl des Produktmanagements.
Michael Shopsin
4
Da es sich um eine Skriptsprache handelt, ist es ein Kinderspiel - Groß- und Kleinschreibung ist der richtige Weg. Warum Groß- und Kleinschreibung beachten? Wenn die Antwort lautet "wie C und Java sein", ist das wirklich ein guter Grund?
Ben
15
@Ben Python, Ruby, bash, Lua und Perl sind Beispiele für sehr beliebte Skriptsprachen, bei denen die Groß- und Kleinschreibung beachtet wird. Bei Sprachen, bei denen die Groß- und Kleinschreibung nicht beachtet wird, handelt es sich um Unternehmenssprachen wie Delphi und SQL (und COBOL IIRC, wenn Sie dies berücksichtigen). Warum ist es ein Kinderspiel für Skriptsprachen, und warum stimmen die Designer der weltweit größten Skriptsprachen nicht überein?
2
Es kann kein Kinderspiel sein, weil es eine Skriptsprache ist - die relevante Frage ist: Wer macht das Skripting und was ist die beste Wahl für sie? (Ich werde auch sagen , dass Sie wahrscheinlich konsistent sein sollten: Wenn Sie Ihre Keywords Groß- und Kleinschreibung sind, bitte machen Sie nicht die Kennungen case-sensitive ...)
comingstorm
@delnan Ich halte es für logisch, dass bei der Skriptsprache für das Betriebssystem, in dem die Groß- und Kleinschreibung berücksichtigt wird, auch die Groß- und Kleinschreibung berücksichtigt wird.
Artemix
16

Sie sollten basierend auf der Benutzererfahrung, die Sie präsentieren möchten, entscheiden, nicht wie einfach oder schwierig die Implementierung ist.

Wenn dies Ihren Benutzern die Unterscheidung zwischen Groß- und Kleinschreibung erleichtert, sollten Sie dies implementieren.

In Point SQL wird die Groß- und Kleinschreibung nicht berücksichtigt. Dies macht die Verwendung in einer interaktiven Umgebung sehr einfach.

Eine andere Sichtweise ist, ob es jemals einen Unterschied zwischen keywordund Keywordin Ihrer Sprache geben wird und ob dieser Unterschied für den Benutzer von Bedeutung ist. Für eine Skriptsprache würde ich sagen, dass die Antwort "nein" ist.

ChrisF
quelle
3
+1 für "wird dieser Unterschied für den Benutzer von Bedeutung sein". Der Benutzer ist am wichtigsten.
Ben
Warum ist SQL in einer interaktiven Umgebung aufgrund der Unterscheidung zwischen Groß- und Kleinschreibung einfacher zu verwenden? Liegt es daran, dass Sie die Feststelltaste versehentlich aktivieren und nicht bemerken können?
Kaz
@ Kaz - So ziemlich.
ChrisF
11

Programmiersprachen sollten zwischen Groß- und Kleinschreibung unterscheiden. Die Benutzer können sich sehr einfach darauf einstellen: Sie müssen lediglich daran denken, meistens in Kleinbuchstaben zu arbeiten und in vorhandenen APIs auf Bezeichner mit Groß- oder Kleinschreibung zu achten.

Es schien einmal offensichtlich, dass die Groß- und Kleinschreibung nicht beachtet werden musste. Dies liegt daran, dass Kleinbuchstaben nicht für alle Computersysteme und ihre E / A-Geräte (Tastaturen, Drucker und Anzeigegeräte) verfügbar waren. Programmiersprachenimplementierungen mussten Programme akzeptieren, die in Großbuchstaben geschrieben waren, da nur diese angezeigt oder gedruckt werden konnten. Und dafür mussten sie die Groß- und Kleinschreibung nicht berücksichtigen, denn Groß- und Kleinschreibung gleichzeitig zu akzeptieren bedeutet, die Kleinschreibung abzulehnen. Kleinschreibung war etwas, was Programmierer wollten, aber nicht immer haben konnten. Niemand wollte wirklich mit Programmen arbeiten, die in Großbuchstaben geschrieben standen. Es war nur eine Hardware-Einschränkung.

Für eine Weile war es sogar üblich, Koffer in Terminals zu falten. Wenn ein Terminal nur Großbuchstaben anzeigen könnte, Sie sich jedoch bei einem Computersystem anmelden müssten, das Groß- und Kleinbuchstaben unterstützt, würde das Terminal die Kleinbuchstaben in Großbuchstaben umwandeln. Glaubst du, das ist so lange her? "Wie der Apple II hatte der Apple II Plus keine Kleinbuchstaben-Funktionalität." (http://en.wikipedia.org/wiki/Apple_II_Plus) Wenn sich Benutzer früherer Apple-Computer in ein BBS mit gemischten Groß- und Kleinschreibung einwählten, musste der Terminal-Emulator (oder Host) dies alles in Großbuchstaben umwandeln. Nachrichten, die in Großbuchstaben geschrieben waren, waren in jenen Tagen an schwarzen Brettern verbreitet. Diese Funktionalität gibt es immer noch in Unix-ähnlichen Betriebssystemen wie dem Linux-Kernel. Geben Sie beispielsweise die stty olcucan Ihrer Shell-Eingabeaufforderung ein.Die Unix tty-Zeilendisziplin kann bei der Ausgabe Kleinbuchstaben und bei der Eingabe Großbuchstaben und Kleinbuchstaben zuordnen. Auf diese Weise können Sie in einer Programmiersprache für Kleinbuchstaben auf einem Terminal ohne Kleinbuchstaben arbeiten.

Die Unterscheidung zwischen Groß- und Kleinschreibung ist ein veraltetes Konzept aus einer vergangenen Computer-Ära, das in der modernen Welt des internationalisierten Rechnens nicht sehr gut funktioniert. Erweitern Sie das auf andere Sprachen? Wie wäre es mit Französisch: Halten Sie È und è für gleichwertig? Oder japanisch? Betrachten Sie Hiragana und Katakana nur als Fälle, sodass フ フ ァ ル und ふ ふ ぁ い derselbe Bezeichner sind? Die Unterstützung einer solchen Dummheit wird Ihren lexikalischen Analysator erheblich komplizieren, der Falläquivalenzkarten für den gesamten Unicode-Raum haben muss.

Beachten Sie, dass in der Mathematik die Groß- und Kleinschreibung berücksichtigt wird. Zum Beispiel könnte das Sigma in Großbuchstaben eine Summierung bedeuten, während das Sigma in Kleinbuchstaben etwas anderes bezeichnet, wie zum Beispiel die Standardabweichung. Dies kann in der gleichen Formel erfolgen, ohne dass es zu Schwierigkeiten kommt. (Wird die Programmiersprache Σ und σ äquivalent machen?)

Die englische Rechtschreibung ist empfindlich. Beispielsweise entsprechen viele Eigennamen gewöhnlichen Substantiven oder sogar anderen Wortarten. "may" ist ein Verb, aber "May" ist ein Monat oder der Name einer Frau. Außerdem kann es verwirrend sein, wenn ein Akronym oder eine Abkürzung in Kleinbuchstaben geschrieben wird. SAT steht für schulische Eignungsprüfung, während "sat" das Partizip der Vergangenheit von "sit" ist. Intelligente Menschen achten auf Details und setzen richtig auf Kapital.

Grundsätzlich ist jede neue Programmiersprache, die seit 1985 erstellt wurde und die die Groß- und Kleinschreibung nicht berücksichtigt, für diejenigen gedacht, die immer noch E-Mails und Postings ohne einen zweiten Gedanken versenden.

Was ist, wenn Ihre Sprache jemals als Ziel für die Codegenerierung verwendet wird, um Code in eine andere Sprache zu übersetzen, und diese andere Sprache zwischen Groß- und Kleinschreibung unterscheidet? Sie müssen alle Namen irgendwie transformieren, um die Unterscheidung zu erfassen. (Es ist lächerlich zu behaupten, dass dies keine technische Entscheidung ist, sondern nur eine Frage der emotionalen Vorlieben des Zielpublikums.)

Schauen Sie sich die lästigen Probleme an, die bei der Fallbearbeitung unter Windows auftreten, wenn Dateien von einem anderen Betriebssystem importiert werden. Das ist ein technisches Problem. Groß- und Kleinschreibung bei Dateisystemen hat ein Problem mit fremden Daten, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird.

Common Lisp hat den idealen Ansatz gefunden: Symbolnamen unterscheiden zwischen Groß- und Kleinschreibung, aber wenn Token gelesen werden, werden sie in Großbuchstaben gefaltet. Dies bedeutet , dass die Token foo, fOO, FOOund Fooalle bezeichnen das gleiche Symbol: das Symbol , dessen Name als Zeichenkette gespeichert "FOO". Außerdem ist dieses Verhalten nur die Standardkonfiguration für Lesetabellen. Der Leser kann Buchstaben in Groß- und Kleinschreibung falten, die Groß- und Kleinschreibung umkehren oder beibehalten. Bei den letzten beiden Optionen wird zwischen Groß- und Kleinschreibung unterschieden. Auf diese Weise haben Benutzer die maximale Flexibilität.

Kaz
quelle
1
"Wie wäre es mit Französisch: Halten Sie È und è für gleichwertig? Oder für Japanisch? Betrachten Sie Hiragana und Katakana nur als Fälle, sodass フ フ イ ル und ふ ぁ ぁ い die gleiche Kennung sind?" Die Antwort lautet "Ja", und es ist nur Torheit, wenn Sie die Kulturen anderer für dumm halten.
Ben
Nun, bereiten Sie sich darauf vor, dass Ihr kleiner Kopf explodiert, denn ich halte die Kulturen anderer Menschen nicht für dumm (mit bestimmten Ausnahmen in Bezug auf die aktuellen Ereignisse der Welt), und gleichzeitig halte ich es für völlig schwachsinnig, フ フ ァ イ und zu behandelnふ ぁ い い als derselbe Bezeichner in einer Programmiersprache.
Kaz
Kennen Sie die genannten Kulturen? Wenn Sie wüssten, wovon Kaz sprach, würden Sie ihn nicht dumm nennen.
David Cowden
1
@DavidCowden, ich habe Kaz zu keinem Zeitpunkt als dumm bezeichnet. Ich bin damit einverstanden, dass immer derselbe Fall verwendet wird, wenn ein Bezeichner verwendet wird. Der Kana-Unterschied ist wichtiger als der Fallunterschied, ebenso wie der Akzentunterschied wichtiger als der Fallunterschied ist. So dumm es auch ist, zwei Bezeichner zu haben, die sich nur durch den Einzelfall unterscheiden, so dumm ist es auch, zwei Bezeichner zu haben, die sich nur durch Kana oder Akzent unterscheiden. Es ist sinnloser, Identifikatoren zu verbieten, die sich nur durch Kana oder Akzent unterscheiden, als sie gleich zu behandeln, aber es ist wenig sinnvoll, sie als unterschiedlich zu behandeln.
Ben
Wenn Sie Identifikatoren verbieten, die sich nur in Groß- und Kleinschreibung, Akzent, Kana oder was auch immer unterscheiden, geben Sie stillschweigend zu, dass sie identisch sind (bestehen aber nur auf Konsistenz). Es ist besser, solche Dinge nicht zu verbannen und sie den Benutzern zu überlassen, um eine Frage der Kodierungskonvention zu sein. Eine bessere Idee wäre ein deklaratives System, bei dem das Programm dies behaupten kann foound Fooals Synonyme oder als eigenständig behandelt werden soll. Ohne eine solche Erklärung ist es ein Fehler, dass beide auftreten. Und da sich die Erklärung nicht auf erstreckt FOO, FOOist sie immer noch verboten; es muss hinzugefügt werden.
Kaz
6

Der entscheidende Faktor ist, wie oft Sie mehrere Dinge mit demselben Namen haben möchten. Die Unterscheidung zwischen Groß- und Kleinschreibung funktioniert in SQL, da nicht oft eine Spalte mit dem Namen gewünscht wird SELECT. In Java wäre das ärgerlich, da jede andere Zeile so aussieht, als ob Object object = new Object()derselbe Name auf eine Klasse, eine Instanz und einen Konstruktor verweisen soll.

Mit anderen Worten, die Groß- und Kleinschreibung ist vor allem für das Überladen eines Namens hilfreich, und das Überladen ist vor allem in großen, komplexen Projekten hilfreich. Bei einer selteneren Verwendung, z. B. einer Skriptsprache, kann die Unempfindlichkeit gegenüber Groß- und Kleinschreibung die Programmierung erheblich vereinfachen.

Ich habe einmal eine Regelsprache erstellt, in der Bezeichner nicht nur die Groß- und Kleinschreibung, sondern auch die Leerzeichen nicht berücksichtigten. Ich habe auch erlaubt, Aliase zu erstellen, die auf denselben Bezeichner verweisen. Beispiel: ProgrammersStackExchange, Programmers Stack Exchange und PSE wurden alle in genau dasselbe Symbol aufgelöst und können austauschbar verwendet werden.

Für meine Domain hat das sehr gut funktioniert, da die Domain viele sehr bekannte Möglichkeiten hatte, sich auf dasselbe zu beziehen, und Namenskonflikte waren selten. Es würde niemanden überraschen, eine Abfrage mit einem Namen einzugeben und das Ergebnis mit einem anderen Namen zu versehen. Die Sprachunterstützung machte das Übersetzen zwischen der Domain und der Programmiersprache sehr einfach. Es erschwerte jedoch auch bestimmte Aufgaben, z. B. das Auffinden aller Verweise auf eine Variable. Gott sei Dank, in meinem Fall sind solche Situationen entweder selten aufgetreten oder es war ziemlich einfach, Toolunterstützung aufzubauen, um zu helfen, aber Sie müssen Ihre eigene Situation berücksichtigen.

Karl Bielefeldt
quelle
Ich denke nicht, dass es das Problem ist, Schlüsselwörter für Namen wiederverwenden zu wollen. SQL, Visual Basic und C # (die ersteren beiden unterscheiden zwischen Groß- und Kleinschreibung und die letzteren zwischen Groß- und Kleinschreibung) beheben dies, indem sie die Möglichkeit bieten, Bezeichner in SQL, VB.net und C # "double quotes"(oder [brackets]in MS SQL) [brackets]anzugeben @atsign.
Random832
"Wie oft wirst du mehrere Dinge mit dem gleichen Namen haben wollen." Die Unterscheidung zwischen Groß- und Kleinschreibung bedeutet, dass Sie einen Mehraufwand hinzufügen müssen, um Namen zu disambiguieren, die ansonsten von der Groß- und Kleinschreibung behandelt würden (z. B. m als Präfix für 'member' zur Unterscheidung von einem nicht festgelegten Eigenschaftsnamen).
Nwahmaet
Warum würden Sie ein Objekt Objekt nennen? Das bittet nur um Ärger.
Ben
@ Angenommen, Sie implementieren ein Containerobjekt. Wie wollen Sie den Parameter ansonsten für Ihre add-Methode aufrufen?
Winston Ewert
@ WinstonEwert würde ich es nennen o. Es ist wirklich egal, wie Sie es nennen, da es nur ein Parametername ist. Solange es nicht anstößig oder illegal ist oder Verwirrung stiftet .
Ben
5

Angenommen, Ihre Skriptsprache unterscheidet Groß- und Kleinschreibung. Erstellen Sie einen Compiler oder eine Syntaxprüfung, die dem Benutzer mitteilt, ob er einen Tippfehler macht, indem er in einem Variablennamen oder einem Schlüsselwort die falsche Groß- / Kleinschreibung verwendet? Wenn nicht, wäre das ein sehr starkes Argument dafür, dass die Groß- und Kleinschreibung nicht beachtet wird.

Doc Brown
quelle
Guter Punkt, aber keine Antwort.
@delnan: Vielleicht keine so gute Antwort wie die von Avner Shahar-Kashtan (dem ich +1 gegeben habe), aber wahrscheinlich hilfreich für das OP.
Doc Brown
3
Ja, hilfreich als Kommentar;)
Also, wenn dies umformuliert wird, um zu sagen, dass es nur eine gute Idee ist, wenn Sie den Benutzer vor Groß- und Kleinschreibung warnen, dann wäre es eine Antwort? Für mich wurde das angenommen.
JeffO
Nein, dann wäre es ein kleiner Punkt, der die als Antwort formulierte Frage kaum beantwortet. MEINER BESCHEIDENEN MEINUNG NACH.
4

Können Sie Variablen im laufenden Betrieb deklarieren? Wenn ja, würde ich mich gegen Groß- und Kleinschreibung aussprechen, um einen Fehler aufzuspüren, der durch verursacht wurde

ATypo = 42; 

im Gegensatz zu

Atypo = 42; 

Es ist unnötig, nach der Debugging-Zeit zu fragen, wenn das Äquivalent der beiden Anweisungen das Leben einfacher macht.

NWS
quelle
2
IMHO erleichtert es auch das Lesen. Immerhin, wenn Sie einen Satz beginnen, schreiben Sie das erste Wort groß, aber Sie ändern seine Bedeutung nicht. Gleiches sollte für Code sein!
NWS
2
@delnan - Sie wollten Lesbarkeit, es wird das gleiche Alphabet verwendet. Warum die Bedeutung ändern, wenn Sie die Groß- / Kleinschreibung ändern?
NWS
1
@delnan Laut dem Obersten Gerichtshof der Vereinigten Staaten von Amerika sind Computersprachen eine Ausdruckssprache, die sowohl von Computern als auch von Menschen verstanden werden soll (wenn entschieden wird, dass der Computercode durch die erste Änderung geschützt ist). Sie sind keine Engländer, aber sie sind eine Sprache, und "Bob" ist anders als "Bob" ist anders als "Bob" ist idiotisch in jeder Sprache, die von Menschen benutzt werden soll. Ja, wir können lernen, damit umzugehen, aber das ist überhaupt keine Entschuldigung.
Ben
2
@Ben Lass mich eine Analogie machen. Mathematische Notation ist im Gegensatz zu Programmiersprachen ausschließlich für den Menschen. Das übliche Argument der Unempfindlichkeit gegen Groß- und Kleinschreibung als historisches Artefakt alter Computer trifft hier nicht zu. Ich bezweifle jedoch, dass ein Mathematiker dies argumentieren würde aund Aaustauschbar sein sollte. Sie verhandeln konsequent ohne Ausnahmen. In einigen Kontexten werden beispielsweise Großbuchstaben für Mengen verwendet, während Kleinbuchstaben als Mengenelemente verwendet werden. Ein weiteres Beispiel ist die Elektrotechnik: Kleinbuchstaben sind zeitabhängig und Großbuchstaben sind zeitunabhängig ...
2
@Ben ... in diesen und anderen Zusammenhängen sehe ich die Groß- und Kleinschreibung nicht als Einschränkung. Ich sehe es als Freisetzung redundanter Symbole für eine produktivere Verwendung durch Konventionen, die unter anderem durch Großschreibung Sinn vermitteln. Wie jede knappe domänenspezifische Notation mag dies dem Laien fremd erscheinen, ermöglicht es den Experten jedoch, besser und schneller zu kommunizieren.
2

Beispiele für Sprachen wie FORTRAN, BASIC, SQL besagen, dass bei diesen die Groß- und Kleinschreibung nicht beachtet wird.

Der Grund, warum bei FORTRAN und SQL (und COBOL) die Groß- und Kleinschreibung nicht beachtet wird, ist, dass sie ursprünglich für die Verwendung auf Computern entwickelt wurden, auf denen die normalen Zeichensätze nur Großbuchstaben enthielten. Die Unterscheidung zwischen Groß- und Kleinschreibung in diesen Sprachen ist (zumindest) eher ein historisches Artefakt als eine Wahl für das Sprachdesign.

Nun könnte man behaupten, dass die Groß- und Kleinschreibung unempfindlicher ist, aber die Kehrseite ist, dass die Groß- und Kleinschreibung zu besser lesbarem Code führt, weil sie die Konnektivität der Anpassung fördert.

Stephen C
quelle
4
Ich habe das Argument satt "X ist gut, Y erzwingt verwandte Dinge Z, Y tut also gut, indem es X erzwingt" (z. B. vernünftiger Codierungsstil / Python / Abseitsregel). Kein guter Programmierer kann auf eine Weise Kapital schlagen, die die Lesbarkeit ernsthaft beeinträchtigt, auch wenn dies zulässig ist. Diejenigen, die die Unterscheidbarkeit von Groß- und Kleinschreibung missbrauchen, können auch in einer Umgebung, in der Groß- und Kleinschreibung beachtet wird, uneinheitlich Groß- und Kleinschreibung verwenden (und hundert weitere Gräueltaten begehen). Schlechte Programmierer können Fortran in jeder Sprache schreiben. (Haftungsausschluss: Ich bin ein großer Fan von Groß- und Kleinschreibung!)
Erraten Sie, was. Ich habe es satt, Code lesen zu müssen, der von schlechten Programmierern geschrieben wurde, die sie für so gute Programmierer halten, dass sie ihre eigenen einzigartigen Stilregeln entwickeln können. (Haftungsausschluss: Ich habe in den Tagen von FORTRAN und COBOL das Programmieren gelernt und verabscheue Fallunempfindlichkeit und andere sprachliche Gräueltaten aus dieser Zeit.)
Stephen C
Jede Verwendung von Großbuchstaben in einer Sprache ohne Berücksichtigung der Groß- und Kleinschreibung stellt einen Missbrauch der Unempfindlichkeit dar.
Kaz
@Kaz - erm ... versuche das einer Million SQL - Programmierer zu erzählen.
Stephen C
1

Groß- / Kleinschreibung als schädlich eingestuft.

Das Leben unterscheidet nicht zwischen Groß- und Kleinschreibung und weder Benutzer noch Programmierer.

Groß- und Kleinschreibung ist ein historischer Unfall von eingeschränkten Systemen, bei denen Vergleiche zwischen Groß- und Kleinschreibung schwierig waren. Dieses Handicap existiert nicht mehr, so dass es keinen Grund mehr gibt, ein Computersystem mit Groß- und Kleinschreibung zu erstellen.

Ich würde sogar sagen, dass die Unterscheidung zwischen Groß- und Kleinschreibung schlecht ist , da der Komfort des Computers vor dem des Benutzers steht.

(Wie ich mich erinnere, weigerte sich ein Genie vor ein paar Jahren, seine Kreditkartenrechnung zu bezahlen, weil sein Name in Großbuchstaben geschrieben war. Daher wurde er argumentiert, es sei nicht richtig an ihn gerichtet und nicht richtig eine gültige Zahlungsaufforderung. Der Richter behandelte das Argument als verdient).

Ben
quelle
Die Unterscheidung zwischen Groß- und Kleinschreibung stellt den Komfort des Computers nicht vor den des Benutzers. Ich habe case sensitive und case insensitive Sprachen implementiert, und der einzige Unterschied ist ein zusätzlicher Funktionsaufruf an einigen Stellen. Andere Antworten sagen auch, dass Groß- und Kleinschreibung aufgrund begrenzter Zeichensätze ein historisches Artefakt ist - widerspricht Ihrer Theorie, nicht wahr?
Unicode versetzt dies in einen ganz anderen Bereich.
DeadMG
3
Dieser Blog gibt keine Rechtfertigung dafür, warum es in C schlecht ist, nur in Python oder PHP - und das OP spricht nicht von Groß- und Kleinschreibung, sondern nur von Schlüsselwörtern . Dieser Link hat absolut nichts zu diesem Thema zu sagen.
DeadMG
1
@Ben Editoren können Schreibweisen während der Eingabe unabhängig von den Regeln der Sprache korrigieren. Das Zulassen von Fehlern, die trotzdem durchrutschen (z. B. weil Sie keinen schicken Editor zur Hand haben), hilft nicht. Es bedeutet, ein Problem zu belassen, anstatt sich darüber zu beschweren, um es zu beheben. Wenn ich einmal eine konsistente Groß- und Kleinschreibung verwende, kann ich mehrere Bezeichner haben, die sich in Groß- und Kleinschreibung unterscheiden, aber sehr unterschiedliche Dinge bezeichnen und dank Kontext und Großschreibung für den Menschen ohne Mehrdeutigkeit leicht zu analysieren sind.
2
@ Ben: In einigen Sprachen gibt es sehr strenge lexografische Gepflogenheiten oder sogar Regeln. In C und C ++ ist All-Caps ein Makro, und Makros sollten All-Caps bleiben, um Verwechslungen zu vermeiden. Einige Sprachen haben unterschiedliche Bedeutungen für Symbole mit oder ohne Initialen (und ich weiß nicht, wie gut sie in verschiedenen Sprachen ohne entsprechende Groß- und Kleinbuchstaben abschneiden würden). Wenn Sie über solche Regeln oder Konventionen verfügen, wirkt sich dies auf verschiedene Namespaces aus, und das Duplizieren von Bezeichnernamen in verschiedenen Namespaces funktioniert häufig.
David Thornley
1

Aus meiner persönlichen Erfahrung sehe ich keinen großen Unterschied zwischen Sprachen, bei denen zwischen Groß- und Kleinschreibung unterschieden wird.

Wichtiger sind Namens- und Strukturkonventionen, die ein Programmierer in seinem Code behalten sollte und die kein Compiler oder Parser für ihn überprüft. Wenn Sie sich an eine Art von Regeln halten, werden Sie leicht einen richtigen Namen kennen (Sie werden nicht denken, wenn Sie eine Variable checkOut oder CheckOut genannt haben) und Ihr Code wird wahrscheinlich zwischen Groß- und Kleinschreibung unterscheiden und leichter zu lesen sein.

Man sollte CheckOut und checkOut und checkout und cHeCkOuT und CHECKOUT nicht in derselben Bedeutung verwenden. Dies wird die Lesbarkeit beeinträchtigen und das Verständnis dieser Art von Code schmerzhafter machen (aber es gibt Schlimmeres, was man tun kann, um die Lesbarkeit von Code zu zerstören).

Wenn Sie eine Art von Regeln verwenden, sehen Sie zum Beispiel auf einen Blick:

CheckOut.getInstance () - ist eine statische Methode einer Klasse namens checkOut.calculate () - ist eine Methode eines Objekts, das in einem variablen oder öffentlichen Feld namens _checkOut.calculate () gespeichert ist - ist eine Methode eines Objekts, das in einem privaten Feld namens CHECKOUT gespeichert ist - Es ist ein endgültiges statisches oder konstantes Feld / Variable

ohne andere Dateien oder Teile einer Datei auszuchecken. Es macht das Lesen von Code schneller.

Ich sehe ziemlich viele Entwickler, die ähnliche Regeln verwenden - in Sprachen, die ich oft benutze: Java, PHP, Action Script, JavaScript, C ++.

In seltenen Fällen kann die Unempfindlichkeit gegen Groß- und Kleinschreibung ärgerlich sein - beispielsweise, wenn CheckOut für einen Klassennamen und CheckOut für eine Variable verwendet werden soll und dies nicht möglich ist, weil sie miteinander kollidiert. Es ist jedoch ein Problem eines Programmierers, der es gewohnt ist, Groß- und Kleinschreibung zu berücksichtigen und in seinen Namenskonventionen zu verwenden. In einer Sprache, bei der die Groß- und Kleinschreibung keine Rolle spielt, kann es Regeln mit Standardpräfixen oder -postfixen geben (ich programmiere nicht in VB, aber ich weiß, dass viele VB-Programmierer diese Art von Namenskonventionen haben).

In wenigen Worten: Ich sehe die Groß- und Kleinschreibung besser (nur für objektorientierte Sprachen), da die meisten Entwickler case sensitive Sprachen verwenden und die meisten von ihnen Namenskonventionen verwenden, die auf der Groß- und Kleinschreibung basieren in der Lage, ihre Regeln ohne irgendeine Art von Änderungen zu halten. Aber es ist eher ein religiöses Argument - kein objektives Argument (das nicht auf wirklichen Nachteilen oder guten Seiten der Groß- / Kleinschreibung beruht), denn ich sehe keine, wenn es um einen guten Entwickler geht Auch wenn die Groß- / Kleinschreibung kritisch ist, ist dies kein großer Unterschied.

Zbyszek
quelle
1

Bei den Programmiersprachen sollte die Groß- und Kleinschreibung nicht berücksichtigt werden.

Der Hauptgrund, warum heutzutage bei so vielen Sprachen die Groß- und Kleinschreibung beachtet wird, ist einfach das frachtkultige Sprachdesign: "C hat es so gemacht, und C ist unglaublich beliebt, also muss es richtig sein." Und wie in so vielen anderen Dingen hat C dies nachweislich falsch verstanden.

Dies ist Teil der Antriebsphilosophie von C und UNIX: Wenn Sie die Wahl zwischen einer schlechten Lösung, die einfach zu implementieren ist, und einer guten Lösung, die schwieriger zu implementieren ist, haben, wählen Sie die schlechte Lösung und schieben Sie die Last der Umgehung Ihres Chaos auf der Nutzer. Das klingt vielleicht nach Schnupfen, ist aber absolut wahr. Es ist bekannt als das "Schlimmer ist besser" -Prinzip und direkt verantwortlich für Schäden im Wert von Milliarden von Dollar in den letzten Jahrzehnten aufgrund von C und C ++, was es viel zu einfach macht, fehlerhafte und unsichere Software zu schreiben.

Es ist definitiv einfacher, die Groß- und Kleinschreibung einer Sprache zu ignorieren. Sie brauchen keine Lexer-, Parser- und Symboltabellen, um die zusätzliche Arbeit zu leisten, um sicherzustellen, dass alle Übereinstimmungen unabhängig von Groß- und Kleinschreibung ausgeführt werden. Aber es ist auch aus zwei Gründen eine schlechte Idee:

  • Erstens, vor allem, wenn Sie eine Skriptsprache erstellen, einen einfachen Tippfehler, bei dem Sie an einer Stelle etwas "myObject" und an einer anderen Stelle "MyObject" aufrufen, wobei Sie sich offensichtlich auf dasselbe Objekt beziehen, aber nur ein bisschen inkonsistent mit der Groß- / Kleinschreibung sind wird nicht zu einem Laufzeitfehler. (Dies ist berüchtigt als ein Hauptschmerzpunkt in Skriptsprachen, die dies falsch verstehen, wie Python.)
  • Zweitens bedeutet die fehlende Berücksichtigung der Groß- und Kleinschreibung, dass die Berücksichtigung der Groß- und Kleinschreibung nicht missbraucht werden kann , wenn sich dasselbe Wort auf zwei verschiedene Dinge im gleichen Umfang bezieht, indem lediglich die Groß- und Kleinschreibung geändert wird. Wenn Sie jemals mit Windows-Code in einer C-Umgebung arbeiten mussten und auf hässliche Deklarationen wie HWND hwnd;stoßen, wissen Sie genau, wovon ich spreche. Leute, die so schreiben, sollten rausgenommen und erschossen werden, und wenn die Groß- und Kleinschreibung nicht beachtet wird, kann der Missbrauch der Groß- und Kleinschreibung nicht in Ihren Code eindringen.

Machen Sie also den zusätzlichen Aufwand, um es richtig zu machen. Der resultierende Code wird sauberer, einfacher zu lesen, weniger fehleranfällig und macht Ihre Benutzer produktiver. Ist das nicht das ultimative Ziel einer Programmiersprache?

Mason Wheeler
quelle
Programmiersprachen sollten einen lexikalischen Gültigkeitsbereich haben, um diese Art von Fehlern vor der Laufzeit abzufangen (auch wenn sie ansonsten sehr dynamisch sind). Common Lisp ist eine hochdynamische Sprache. Die Compiler geben jedoch an, wann wir eine Variable verwendet haben, die keine lexikalische Bindung aufweist und nicht global als dynamische Variable definiert wurde. Sie können sich nicht auf die Unterscheidung zwischen Groß- und Kleinschreibung verlassen, da Sie alle Tippfehler erfassen möchten, nicht nur die, die die Groß- und Kleinschreibung betreffen.
Kaz
Ich habe nichts dagegen HWND hwnd;. Dies ist ein Beispiel, bei dem die Groß- und Kleinschreibung gut funktioniert. Die "Indian Hill" -Konvention ist allerdings albern. hwnd_t hwndist viel besser. Ich vermute , dass es ist alles wegen FILE. Es ist einmal Version 6 Unix in seiner I / O - Bibliothek Header - Datei hatten diese: #define FILE struct _iobuf. Es war in Großbuchstaben, weil es ein Makro war. Als es in ANSI C zu einem Typedef wurde, wurde die Schreibweise für alle Großbuchstaben beibehalten. Und ich denke, es ist eine Imitation davon, dass die ALL_CAPS_TYPE-Konvention erfunden und im Bell Lab "Indian Hill Style Guide" (Das Original!) Kodiert wurde
Kaz
Wenn Sie jetzt nach "Indian Hill Style Guide" googeln, finden Sie meistens Verweise auf ein Dokument von Bell Labs aus dem Jahr 1990, das die Namen aller Großbuchstaben vollständig wiedergibt: Keine Spur einer solchen Empfehlung. Aber die ursprüngliche Version empfahl Dinge wie typedef struct node *NODE. Ich bin mir sicher, dass Microsoft genau an dieser Stelle aufgegriffen haben muss. Also, schuld Bell Labs für HWND.
Kaz
1

Ich kann nicht glauben, dass jemand sagte "Groß- / Kleinschreibung erleichtert das Lesen von Code".

Das tut es mit Sicherheit nicht! Ich habe einem Kollegen über die Schulter geschaut, wie die Variablen Firma und Firma (Public Variable Company, Matched Private Variable Company) lauten, und seine Wahl von Schriftart und Farbe macht es unglaublich schwierig, den Unterschied zwischen den beiden zu erkennen - auch wenn sie nebeneinander liegen.

Die richtige Aussage sollte "Groß- und Kleinschreibung erleichtert das Lesen von Code" sein. Das ist eine viel offensichtlichere Wahrheit - z. B. Variablen namens CompanyName und CompanyAddress anstelle von companyname. Aber keine Sprache, die ich kenne, lässt Sie nur Variablennamen in Kleinbuchstaben verwenden.

Die verrückteste Konvention, die ich kenne, ist die "öffentlich in Großbuchstaben, privat in Kleinbuchstaben". Es bittet nur um Ärger!

Meine Fehlerannahme ist "besser, als dass etwas laut und so schnell wie möglich ausfällt, als dass es leise ausfällt, aber scheinbar erfolgreich ist". Und es gibt nicht früher als die Kompilierungszeit.

Wenn Sie versehentlich eine Variable in Kleinbuchstaben verwenden, während Sie Großbuchstaben verwenden wollten, wird diese häufig kompiliert, wenn Sie auf dieselbe Klasse verweisen . Auf diese Weise scheinen Sie sowohl in der Kompilierungs- als auch in der Laufzeit erfolgreich zu sein, tun jedoch auf subtile Weise das Falsche und erkennen es möglicherweise über einen längeren Zeitraum nicht. Wenn Sie feststellen, dass etwas nicht stimmt

Es ist weitaus besser, eine Konvention zu verwenden, bei der die private Variable ein Suffix hat - z. B. die öffentliche Variable Company, die private Variable CompanyP. Niemand wird die beiden versehentlich verwechseln und sie erscheinen zusammen im Intellisense.

Dies steht im Gegensatz zu einem Einwand, den die Menschen in der ungarischen Schreibweise haben, wo eine vorangestellte private Variable pCompany nicht an einer guten Stelle in der Intellisesne erscheinen würde.

Diese Konvention hat alle Vorteile der schrecklichen Groß- / Kleinschreibung und keinen ihrer Nachteile.

Die Tatsache, dass die Menschen das Bedürfnis verspüren, die Groß- und Kleinschreibung zu berücksichtigen, um zwischen Variablen zu unterscheiden, zeigt meiner Meinung nach sowohl einen Mangel an Vorstellungskraft als auch einen Mangel an gesundem Menschenverstand. Oder leider pflegen die menschlichen Schafe die Gewohnheit, einer Konvention zu folgen, denn "so wurde es schon immer gemacht".

Machen Sie die Dinge, mit denen Sie arbeiten, klar und deutlich voneinander verschieden, auch wenn sie verwandt sind !!

Andy R
quelle
1
Okay, also companyName == companyname. Das scheint vernünftig, aber wie gehen Sie mit Gebietsschemas um? Verursacht das Kompilieren Ihres Programms in verschiedenen Teilen der Welt eine andere Semantik als in PHP? Werden Sie vollständig anglozentrisch sein und nur die ASCII-druckbaren ID-Sätze unterstützen? Die Unempfindlichkeit gegenüber Groß- und Kleinschreibung ist eine Menge zusätzlicher Komplexität für sehr wenig zusätzlichen Gewinn.
Phoshi
0

Sie sollten die Unterscheidung zwischen Groß- und Kleinschreibung nicht ohne einen sehr guten Grund einführen. Zum Beispiel kann der Umgang mit Fallvergleichen mit Unicode eine Hündin sein. Die Unterscheidung zwischen Groß- und Kleinschreibung (oder das Fehlen) älterer Sprachen ist unerheblich, da ihre Bedürfnisse sehr unterschiedlich waren.

Programmierer in dieser Ära erwarten Groß- und Kleinschreibung.

DeadMG
quelle
1
Fallvergleiche sind nicht so schwer. Zerlegen Sie einfach Ihre Kennungen. É = E '= e' = é. Denken Sie daran, dass Sie immer noch auswählen können, welche Fallregeln zu befolgen sind, und dass Englisch eine vernünftige Wahl ist. (sicherlich, wenn Ihre Keywords auch Englisch sind)
MSalters
2
Ja, sie sind "so schwer" im gesamten Unicode-Bereich.
Kaz
1
"Programmierer in dieser Ära erwarten Groß- und Kleinschreibung"? Nur wenn sie das Stockholm-Syndrom haben, weil sie zu lange mit der C-Familie gearbeitet haben.
Mason Wheeler
Nun, die C-Familie macht nur einen sehr großen Teil der Sprachen und des Codes aus. Außerdem denke ich, dass es eine gute Sache ist und Ihr Kommentar keinen Grund vorschlägt, warum es nicht ist.
DeadMG
0

Die Unterscheidung zwischen Groß- und Kleinschreibung erleichtert das Lesen und Programmieren von Code.

  • Die richtige Verwendung von gemischten Groß- und Kleinschreibung fällt den Lesern leichter .

  • Es erlaubt / ermutigt CamelCase so, dass sich dasselbe Wort mit unterschiedlicher Schreibweise auf verwandte Dinge beziehen kann: Auf diese Weise wird Car car; die Variable named carvom Typ erstellt Car.

  • ALL_CAPS_WITH_UNDERSCORES gibt Konstanten in vielen Sprachen an

  • all_lower_with_underscores kann für Membervariablen oder etwas anderes verwendet werden.

  • Alle modernen Programmiertools (Quellcodeverwaltung, Editoren, Diff, Grep usw.) sind auf Groß- und Kleinschreibung ausgelegt. Sie werden für immer Probleme mit Tools haben, die Programmierer für selbstverständlich halten, wenn Sie eine Sprache verwenden, bei der die Groß- und Kleinschreibung nicht beachtet wird.

  • Wenn die Sprache interpretiert wird, kann es zu einer Leistungsbeeinträchtigung kommen, wenn der Code nicht nach Groß- und Kleinschreibung analysiert wird.

  • Was ist mit nicht-englischen Zeichen? Entscheiden Sie sich jetzt, niemals Koptisch, Chinesisch und Hindi zu unterstützen? Es wird dringend empfohlen, dass Sie als Standardsprache UTF-8 festlegen und dass einige Sprachen unterstützt werden, deren Zeichen keine entsprechenden Groß- oder Kleinbuchstaben enthalten. Sie werden diese Zeichen nicht in Ihren Schlüsselwörtern verwenden, aber wenn Sie die Groß- / Kleinschreibung in verschiedenen Tools deaktivieren (zum Beispiel, um Dinge in Dateien zu finden), werden Sie auf einige surreale und wahrscheinlich unangenehme Erfahrungen stoßen.

Was ist der vorteil Die 3 Sprachen, die Sie erwähnen, stammen aus den 1970er Jahren oder früher. Keine moderne Sprache tut dies.

Auf der anderen Seite bringt alles, was den Endverbraucher wirklich glücklich macht, ein wenig Licht in die Welt. Wenn es das Benutzerglück wirklich beeinflusst, müssen Sie es tun.

Wenn Sie es Endbenutzern wirklich einfach machen möchten, können Sie es besser machen als bei Groß- / Kleinschreibung / Unempfindlichkeit - werfen Sie einen Blick auf Scratch ! Ein paar weniger Comic-Katzen und geschäftsfreundlichere Farben, und Sie haben ungefähr die freundlichste Sprache, die ich je gesehen habe - und Sie müssen nichts schreiben! Nur ein Gedanke.

GlenPeterson
quelle
1
Ich denke, Sie wollten sagen, "Groß- und Kleinschreibung ist ein Albtraum". Japanisch hat Fall: Hiragana und Katakana sind verschiedene Fälle. Genau wie A und a in gewisser Weise "gleich" sind, sind es auch あ und ア. Katakana wird manchmal zur Hervorhebung verwendet, ähnlich in Großbuchstaben in Sprachen, die das römische Alphabet verwenden. Unnötig zu erwähnen, dass es idiotisch wäre, Hiragana und Katakana in Programmiersprachenidentifikatoren gleich zu behandeln.
Kaz
Danke - das ist bereichernd! Ich habe meinen Posten nur ein wenig aufgeräumt.
GlenPeterson
1
Car car;Dies ist eines der besten Argumente gegen die Berücksichtigung der Groß- und Kleinschreibung: Es ist hässlich, und wenn in Ihrer Sprache die Groß- und Kleinschreibung nicht berücksichtigt wird, können Sie die Berücksichtigung der Groß- und Kleinschreibung nicht auf diese Weise missbrauchen.
Mason Wheeler
1
Ist Car myCar;so viel besser
GlenPeterson
@Mason Wheeler: Wenn wir unsere Sprachkonstrukte auf diejenigen beschränken, die wir nicht missbrauchen können, werden wir nicht viel tun können, oder? Mein Rat an jeden, der die Groß- und Kleinschreibung missbraucht, lautet "Don't".
David Thornley