ein programmierer, viele sprachen - das namensdilemma


14

Wenn Sie in mehreren Programmiersprachen arbeiten, tritt ein Problem auf ...

Ein gültiger Name (Bezeichner) in einer Sprache ist in einer anderen ungültig. Beispielsweise...

var new function thissind Schlüsselwörter in JavaScript, aber Sie können sie in Python frei verwenden. Ebenso list dict defkann in JavaScript problemlos gearbeitet werden.

Dies ist eine sehr häufige und etwas, mit dem Programmierer im Allgemeinen schnell vertraut werden, wenn sie in mehreren Sprachen programmieren.

Bei der Zusammenarbeit müssen Sie jedoch einige Regeln / Richtlinien für Ihre Teammitglieder festlegen, um die Konsistenz und Einheitlichkeit des Codes sicherzustellen. Bei Teams ist dieses Problem wichtiger, als sich zu merken, was gültig ist und was nicht, während Sie programmieren.

Meine Frage ist also, welche Strategien Sie anwenden ...

  • Nehmen Sie einfach eine Vereinigung aller reservierten Wörter in allen von Ihnen verwendeten Sprachen, verteilen Sie eine Liste an alle und verzichten Sie auf deren Verwendung?
  • Akzeptiere die Vielfalt und nimm zusätzliche Schmerzen beim "Kontextwechsel"
  • Nehmen Sie einen Zwischengrund an, auf dem eine Sprache die andere verwenden kann, aber nicht umgekehrt

(Hinweis: Ich spreche nur über Python und JavaScript in dieser Frage ... aber bitte beantworten Sie die Frage breiter)

- UPDATE -

Danke für alle Antworten. Der allgemeine Konsens, den ich sehe, besteht darin, Programmierern zu erlauben, einen beliebigen Namen zu verwenden, unabhängig davon, was sie in anderen Sprachen tun - solange die Namen beschreibend sind, schadet es nicht.


1
Oder verlangen Sie einfach, dass jeder Variablenname mit einem beginnt $. Es funktioniert in PHP, JavaScript und einigen C / C ++ - Compilern . In aller Ernsthaftigkeit ist dies eine Sache, die PHP meiner Meinung nach richtig gemacht hat.
Joey Adams

Antworten:


46

Nachdem ich in den mehr als 30 Jahren meiner Erfahrung in einigen Sprachen programmiert habe, würde ich sagen, dass das Finden von Benennungsstandards, die in jeder Sprache funktionieren, wahrscheinlich eine gute Idee ist.

Zu Beginn meiner Erfahrung habe ich versucht, #define-Makros in C zu verwenden, um Dinge zu erstellen, die meinen C-Code so aussehen lassen, wie den Pascal-Code, den ich zuvor verwendet habe. Ich war es so gewohnt, in Pascal zu programmieren, dass ich dachte, wenn ich C so arbeiten lassen könnte wie Pascal, würde es mich produktiver machen. Ich stellte bald fest, dass ich falsch lag.

Was mich produktiver machte, war, C zu lernen und nicht zu versuchen, Pascal-Syntax in eine andere Sprache umzusetzen, nur weil es mich komfortabler machte.

Ich denke, Sie können Ihre Programmierer möglicherweise einschränken, indem Sie sie daran hindern, etwas in einer Sprache zu tun, nur weil es falsch ist, es in einer anderen Sprache zu tun, die Sie verwenden.

Wenn Sie Ihre Namenskonventionen auf Dinge beschränken, die für die Erklärung der Variablenverwendung sinnvoll sind, werden Sie wahrscheinlich guten Code in einer beliebigen Sprache erstellen.


3
Sinnvolle Namen sind der Grund, warum Sie sie brauchen.
JeffO

24

Sie sollten Dinge nicht zuerst "list", "new", "var", "this" nennen, da sie in keiner Sprache aussagekräftig genug sind.


2
Das Gleiche gilt für "Funktion". Wenn es kein Schlüsselwort ist, ist es einfach nicht so gemeint.
MPelletier

11

Der Wechsel von beispielsweise Javascript zu Python ist bereits ein Kontextwechsel. Ich denke nicht, dass es schlecht ist, wenn sich Variablennamen verschieben, besonders wenn die Namensänderungen mit der Sprache idiomatisch sind. Man könnte sogar behaupten, dass härtere Kontextwechsel in diesem Fall hilfreich sein können, da sie dazu beitragen, "Alter, du schreibst jetzt Javascript, nicht Python" zu verstärken.


7

Ich denke, wenn Sie beschreibende Variablennamen verwenden, sollte das von Ihnen beschriebene Problem minimal sein. Wenn dies jedoch minimal ist, wird das Akzeptieren der Kontextverschiebung, die durch die Benennung von Variablen zwischen Sprachen verursacht wird, ebenfalls minimal.


5

Die meisten reservierten Wörter (in jeder Sprache) sind ziemlich allgemein gehalten. Ich bevorzuge Variablen- / Funktionsnamen, die aussagekräftiger sind und das heißt, ich stoße fast nie auf dieses Problem. Ich muss zugeben, von Charles Simonyi mit seinem ursprünglichen Namensschema infiziert worden zu sein - dies war bei Xerox in den späten 70er Jahren, bevor es noch Ungarische Notation hieß - und das bedeutet auch, dass die Namen mehr als nur ein vernünftiger Mensch sind würde jemals als reservierte Wörter verwenden.


5

Sie sollten Ihre Zeit nicht damit verschwenden, Richtlinien zu schreiben, bis Sie feststellen, dass dies ein tatsächliches , nicht hypothetisches Problem ist.

Ich kann mir vorstellen, dass dies zu einem Problem werden kann, wenn Sie Datenstrukturen zwischen Programmiersprachen austauschen. Wenn Sie beispielsweise ein JavaScript-Objekt auf der Clientseite haben, das sich in einem Python-Objekt auf der Serverseite widerspiegelt, und Sie natürlich möchten, dass sie für ihre Mitglieder dieselben Namen haben. In diesem Fall ist die Regel einfach: Verwenden Sie keine Namen, die reservierte Wörter in einer der Sprachen sind. Das ist es. Schreiben Sie das in die Richtlinien, wenn Sie möchten. Gehen Sie nun zu wichtigeren Aufgaben über.

Übrigens ist weder Liste noch Diktat ein reserviertes Wort in Python. Sie können als Variablennamen verwendet werden, wenn auch ziemlich miese.


3

Meiner Erfahrung nach besteht die Lösung darin, umfassende Namenskonventionen zu verwenden, die für alle Sprachen gelten. Unabhängig davon, ob es sich um JavaScript, C # oder eine andere unkonventionelle Sprache handelt, die Art und Weise, wie Variablen und Klassen benannt werden, kann zu einem Standard in einer Codebasis werden. So würde ich dieses Problem im Allgemeinen lösen. Die Konventionen können einvernehmlich von jedermann vereinbart werden, nur von einer Mehrheit, die eine Richtlinie wünscht, von der Geschäftsleitung, die sagt: "So machen wir das", oder von ein paar anderen Möglichkeiten, die ich mir vorstellen kann.

Das von Ihnen beschriebene Bezeichnerproblem wird nur selten angezeigt, da mein Klassen- oder Variablenname in der Regel so aussagekräftig ist, dass Konflikte nicht so leicht auftreten. Gleichzeitig ist es wichtig, wenn man mit anderen zusammenarbeitet und nicht genau weiß, wie das Team damit umgehen will.


2

Ich kann nicht erkennen, dass dies jemals ein Problem sein könnte, es sei denn, Sie planen, Code von einer Sprache in eine andere zu verschieben. Wenn Sie persönlich häufig vergessen, welche Variablennamen gültig sind, verwenden Sie keinen Variablennamen, es sei denn, Sie sind sich persönlich sicher, dass dieser gültig ist. Wenn andere Benutzer ungültige Variablennamen verwenden, wird der Code nicht kompiliert oder ausgeführt. Wenn Sie also an dem Code einer anderen Person arbeiten und sie etwas als "var" bezeichnet haben, können Sie sich ziemlich sicher sein, dass dies ein gültiger Name für die von ihnen verwendete Sprache ist.

Wenn Sie Code von einer Sprache in eine andere verschieben möchten, benötigen Sie möglicherweise eine Liste verbotener Namen. Zum Beispiel verbietet mein C-Codierungsübungsdokument die Verwendung von new oder class als Variable, da sich der Code dadurch schwerer nach C ++ portieren lässt. In diesem Fall ist es sinnvoll, Regeln festzulegen, die die Arbeit erleichtern, falls dies erforderlich wird.


-2

Halten Sie sich einfach an das in Kleinbuchstaben führende CamelCase. Es funktioniert überall. Dies wird als Suche nach dem kleinsten gemeinsamen Nenner zwischen inkompatiblen Systemen bezeichnet, und Sie werden feststellen, dass Sie dies häufig tun!


5
Mit Ausnahme einiger Sprachen ist der Fall des ersten Buchstabens syntaktisch von Bedeutung.
Karl Bielefeldt

1
... und es verstößt gegen den in vielen Sprachen etablierten kulturellen Quasi-Standard.
tdammers

Die ungarische Notation ist weitaus trügerischer als CamelCase ... ;-)
Zeke Hansell

@ Karl: Offensichtlich beschränkt sich der Vorschlag auf die Grenzen der Sprache. Wussten Sie, dass Java Variablennamen mit einem Dollarzeichen beginnen kann? Ich habe Java-Code gesehen, der wie PHP aussieht, es war offensichtlich, wo der vorherige Programmierer das Programmieren gelernt hat!
Dotancohen

@dotancohen: Ich erinnere mich, dass ich mir vor vielen Jahren ein Pascal-Programm in einem Hobby-Magazin angesehen habe, als Pascal gerade die Szene drehte. Aus der Struktur des Codes (und der Tatsache, dass globale Variablen zur Übergabe von Werten an Subroutinen und Funktionen verwendet wurden) ging hervor, dass das Programm eines der besten Basisprogramme war, die ich je in Pascal gesehen habe. ;-)
Zeke Hansell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.