Ist es sinnvoll, in Bezeichnern "ys" anstelle von "ies" zu verwenden, um das Suchen und Ersetzen zu vereinfachen? [geschlossen]

9

Obwohl grammatikalisch falsch, ist es beim Schreiben von Bezeichnern für Funktionen, Variablen usw. sinnvoll, einfach ein "s" an mehrere Wörter anzuhängen, die mit Y enden? Mein Grund dafür wäre, dass, wenn Sie beispielsweise "Unternehmen" durch "Anbieter" ersetzen und ersetzen müssen, "Unternehmen" sowohl Singular- als auch Pluralformen (" Unternehmen " und " Unternehmen ") entspricht Wenn der Plural richtig geschrieben wäre, müssten Sie zwei separate Suchen durchführen.

SHNC
quelle
8
Was ist mit Kindern, Mäusen, Messern, Wölfen, Männern, Frauen, Frauen und Zähnen? Alles ist gültig, um die gefürchteten "zwei getrennten Suchen" zu vermeiden .
Tulains Córdova
3
Ich bin Teil von Wolfys über Wolfies selbst ...
Jimmy Hoffa
2
Planen Sie wirklich, Bezeichner in Ihrem Workflow sehr oft umzubenennen? Es scheint ein bisschen übertrieben, all die kognitive Verrücktheit falsch geschriebener Namen im Code zu übernehmen, nur um eine Funktion zu unterstützen, die möglicherweise nie verwendet wird.
Kent A.
10
Glauben Sie mir, Sie möchten keine Such- und Ersetzungsoperation auf eine große Codebasis für ein Wort wie "Unternehmen" ohne die Einschränkung "Nur vollständige Wörter" anwenden. Daher müssen Sie entweder zwei separate Suchvorgänge verwenden.
Doc Brown
2
Zwei. Trennen. Suchen.
Tulains Córdova

Antworten:

24

Eine solche Suche und Ersetzung sollte mit Sorgfalt durchgeführt und jede Änderung manuell überprüft werden, um beispielsweise zu vermeiden, dass ein Kommentar mit Ihrem Unternehmens- / Lieferantenwechsel zum "Lieferanten" wird. Daher sollten zwei getrennte Suchvorgänge nach "Unternehmen" und "Unternehmen" im Vergleich zu der Zeit, die für die Überprüfung und Genehmigung jeder Änderung aufgewendet wird, keinen erheblichen Overhead verursachen.

Falsch geschriebene Wörter, um nur eine Suche zu erreichen, bieten also die Nachteile, schlecht auszusehen und schwieriger zu lesen als nötig, ohne einen offensichtlichen Vorteil zu bieten.

David Arno
quelle
11
Und da die Refactoring-Tools immer besser werden, wird das globale Suchen und Ersetzen, das nur auf dem Text basiert, zum am wenigsten zuverlässigen Weg, einen Bezeichner umzubenennen.
Kent A.
Dies wäre kein Problem bei der Suche nach "nur ganzen Wörtern", wie von Doc Brown erwähnt.
SHNC
6
@ user3047082, die Suche nach ganzen Wörtern würde auch nicht mit "Unternehmen" übereinstimmen, was die ganze Frage ziemlich sinnlos macht ...
David Arno
6

Ich gehe davon aus, dass Sie über das Umbenennen in Quellcodedateien sprechen. Bei heutigen IDEs sollte dies immer mit den Refactoring-Tools der IDE erfolgen. Wenn Ihre IDE dies nicht hat, sollten Sie zu einer anderen IDE wechseln. Die meisten IDE-Refactoring-Tools führen auch eine Refactoring-Historie, sodass Sie schnell "rückgängig machen" können, wenn Ihnen die Ergebnisse des Refactors nicht gefallen. Wenn Sie Suchen / Ersetzen verwenden, können Sie möglicherweise nicht alle Änderungen rückgängig machen (es sei denn, Sie verwenden möglicherweise Ihre Tools zur Revisionskontrolle und kehren zur zuvor festgeschriebenen Version zurück). Mit Refactoring-Tools können Sie außerdem sicher sein, dass Sie nicht versehentlich etwas ändern, das Sie nicht ändern wollten.

Javabeano
quelle
3
Für wen auch immer diese Antwort als minderwertig gekennzeichnet wurde: Obwohl sie die gestellte Frage nicht strikt beantwortet, geht sie auf das Gesamtbild ein, warum man ein solches Benennungsschema und einen besseren Weg zur Erfüllung derselben Aufgabe verwenden möchte. Ich habe bei der Flaggenbewertung mit "sieht OK aus" abgestimmt und eine positive Bewertung hinzugefügt.
Danke, @Snowman. Es liegt in der Natur des Menschen, in einem unbekannten Bereich eine Frage zu formulieren, die auf Ihrer eigenen (unerfahrenen) Denkweise basiert. Ja, obwohl ich die eigentliche Frage nicht beantwortet habe, beruhte meine Annahme, was wirklich gefragt wurde, auf anderen Hinweisen in der Frage. Die Pluralformen, denen ich am häufigsten begegnet bin, stammen aus Tools zur Codegenerierung, z. B. XSD-zu-POJO, Hibernate / JPA-Reverse Engineering aus der Datenbank usw. Im Wesentlichen, wenn diese Pluralformen im Code enthalten sind und der Autor die Auswahl nicht mochte Pluralformen, dann wurden sie höchstwahrscheinlich nicht vom Autor geschrieben und eher automatisch generiert.
Javabeano
-9

Ja! Ja! Ja! Das macht durchaus Sinn. Und ich mache es seit Jahren.

Offenlegung 1: Englisch ist nicht meine Muttersprache.

Offenlegung 2: Meine Kenntnisse der englischen Grammatik sind erheblich besser als die eines durchschnittlichen Muttersprachlers.

Offenlegung 3: Wenn es um die Kommunikation mit Menschen geht, bin ich ein vehementer Grammatik-Nazi.

Und jetzt, da diese Angaben nicht im Weg sind, möchte ich feststellen, dass die englische Grammatik keinen Platz im Code hat. Sie sehen, deshalb heißt es Code und nicht Prosa . Es soll eine gewisse Ähnlichkeit mit einer Sprache haben, die vom Menschen zum Zweck der Lesbarkeit verstanden wird, aber abgesehen davon brauchen wir vom Code meistens nicht die Eigenschaften der Prosa; Es sind andere, eher technische Eigenschaften wie Präzision , Eindeutigkeit und Knappheit . Deshalb ist die C - Syntax if( x != y ) y++;ist viel besser, die IF X IS NOT EQUAL TO Y THEN ADD 1 TO Y END-IF.Syntax von Cobol. Die angebliche Wünschbarkeit von Compilern, die natürliche Sprache verstehen, ist ein Trugschluss, und nehmen Sie nicht mein Wort dafür, sehen Sie, was ol'Edsger dazu zu sagen hat:Edsger W. Dijkstra, Über die Dummheit der "Programmierung natürlicher Sprache" .

Eine weitere wichtige Qualität ist die Berechenbarkeit von Bezeichnern . Die Tatsache, dass eine aufgerufene Eigenschaft Colorimmer über eine aufgerufene Methode gelesen und über eine aufgerufene Methode getColor()geschrieben werden kann, setColor()ist von größter Bedeutung. Diese Kennungen können aus dem Namen der Eigenschaft berechnet werden, sodass Sie sie nicht auswendig müssen. Wenn ein Programmierer ein Methodenpaar wählen würde getColor(), colorize()das einerseits aufgerufen wird, andererseits aber , würden seine Kollegen diese Sabotage zu Recht in Betracht ziehen. So wichtig ist die Berechenbarkeit von Bezeichnern.

Außerdem können Programmierwerkzeuge geschrieben werden (und viele davon wurden tatsächlich geschrieben, z. B. Hibernate ), mit denen diese Namen berechnet werden können. Ohne Berechenbarkeit des Bezeichnernamens müssten Sie zusätzliche Syntax verwenden (z. B. im Ruhezustand zusätzliche Anmerkungen), um jedem Tool genau anzugeben, wie jeder einzelne Bezeichnername erstellt werden soll oder welchen Ad-hoc-Namen Sie jeder Entität genau gegeben haben.

Daher ist die Berechenbarkeit von Bezeichnern wichtig, während gleichzeitig die englische Grammatik irrelevant ist (da wir keine Programmierung in natürlicher Sprache durchführen), um den Namen einer Sammlung von Entitäten berechnen zu können, indem immer "s" an den Namen angehängt wird von einer einzelnen Instanz macht vollkommen Sinn, egal, dass es die Empfindlichkeiten der meisten Menschen (meine eingeschlossen) in englischer Sprache verletzt.

Und ob es uns gefällt oder nicht, das ist der Trend der Zukunft. Die Muttersprache der meisten Programmierer auf dem Planeten ist nicht mehr Englisch, und der Trend geht dahin, in dieser Richtung weiterhin sehr stark zu sein. (Außerdem wäre ich nicht einmal bereit, Geld auf den Vorschlag zu setzen, dass Englisch die Muttersprache der Mehrheit der Programmierer ist, die derzeit in den USA arbeiten.) Dies sind Personen, die zu einem großen Teil versuchen, den Namen zu berechnen einer Sammlung aus dem Namen einer einzelnen Instanz von "Unternehmen" wird einfach ein "s" anhängen, und die Form "Unternehmen" wird ihnen nicht einmal in den Sinn kommen. Für einen großen und ständig wachsenden Prozentsatz von Programmierern auf der Welt bedeutet die Kenntnis der Besonderheiten der englischen Sprache keinen Mehrwert für ihre Arbeit, sondern macht sie nur geringfügig schwieriger.

Mike Nakis
quelle
7
1. Indizes und Indizes sind beide gültige Pluralformen des Index. Sie irren sich in Ihrer Überzeugung, dass nur eine richtig ist, siehe z . B. oxforddictionaries.com/definition/english/index . 2. Ein privates X, das über getX gelesen und über setX beschrieben werden kann, ist nicht privat. Es ist ein öffentlicher Wert. 3. Code ist ein Designdokument. Es informiert einen Compiler darüber, wie "Maschinencode" generiert wird, aber was noch wichtiger ist, es beschreibt dieses Design auf eine Weise, die andere Leute leicht lesen können. Die Lesbarkeit ist einer der beiden wichtigsten Aspekte des Codes (die Testbarkeit ist der andere).
David Arno
3
Code wird aus zwei Gründen geschrieben: zum Lesen durch Menschen und zum Ausführen von Computern. Einige würden sagen, dass Quellcode hauptsächlich für Menschen zum Lesen geschrieben wurde, da der größte Teil sofort in Bytecode kompiliert wird, bevor der Computer ihn ausführt. Während sich die Computer möglicherweise nicht um die richtige Grammatik kümmern, tun dies die Menschen mit Sicherheit.
Eric King
3
Während Englisch möglicherweise nicht Ihre Muttersprache ist, ist es möglicherweise die nächste Person, die Ihren Code liest. Es wird wahrscheinlich auch andere Ihrer Muttersprache verwirren, die Englisch gelernt haben.
Andy
2
oder du wirst nur diejenigen verletzen, die doppelt nehmen, Companyswenn es sein sollte Companies. Schließlich besteht der gesamte Sinn des Codes, den wir normalerweise schreiben, darin, ihn der natürlichen Sprache näher zu bringen.
Andy
2
Wie auch immer, ich finde das Papier voller Scheiße. Code ist zwischen natürlicher Sprache und Bytecode. Ohne das Verständnis des Menschen für Code würde es keinen Grund geben, den Bytecode nicht direkt einzugeben.
Andy