"A", "an" und "the" in Methoden- und Funktionsnamen: Was halten Sie davon? [geschlossen]


16

Ich bin sicher, dass viele von uns an der einen oder anderen Stelle solche Methodennamen gesehen haben:

  • UploadTheFileToTheServerPlease
  • CreateATemporaryFile
  • WriteTheRecordToTheDatabase
  • ResetTheSystemClock

Das heißt, Methodennamen, die auch grammatikalisch korrekte englische Sätze enthalten und zusätzliche Wörter enthalten, damit sie wie Prosa gelesen werden. Persönlich bin ich kein großer Fan von solchen "wörtlichen" Methodennamen und bevorzuge es, prägnant zu sein, während ich immer noch so klar wie möglich bin. Für mich sehen Wörter wie "a", "an" und "the" in Methodennamen einfach unangenehm aus, und Methodennamen werden unnötig lang, ohne dass wirklich etwas Nützliches hinzugefügt wird. Ich würde die folgenden Methodennamen für die vorherigen Beispiele bevorzugen:

  • UploadFileToServer
  • CreateTemporaryFile
  • WriteOutRecord
  • ResetSystemClock

Nach meiner Erfahrung ist dies weitaus häufiger als der andere Ansatz, die längeren Namen zu schreiben, aber ich habe beide Stile gesehen und war gespannt, was die Gedanken anderer Leute über diese beiden Ansätze waren.

Befinden Sie sich also im Camp "Methodennamen, die sich wie Prosa lesen" oder in dem Camp "Methodennamen, die sagen, was ich meine, aber wie eine schlechte Übersetzung von Fremdsprache in Englisch laut vorlesen"?


7
Ich habe noch nie Methoden mit Namen wie gesehen WriteTheRecordToTheDatabase. Wenn jemand dies eincheckte, wurde er ernsthaft angesprochen.
Tim Robinson

13
" Please"? Wow
Konfigurator

3
Ich möchte nur hinzufügen, dass WordPress Template-Hilfsfunktionen wie "the_contents ()", "get_the_post ()" usw. hat. Es nervt mich.
Carson Myers

1
@Carson Myers Hah, das ist ein perfektes Beispiel aus der Praxis. Ich muss die Erinnerungen an das letzte Mal, als ich mir WordPress-Code ansah, unterdrückt haben :-)
Mike Spross

Antworten:


21

Ich werde zustimmen, dass Prosa-Methoden mit einer Ausnahme saugen:

Unit-Testfälle

Diese werden in Ihrem Code in der Regel nie aufgerufen und in Testberichten angezeigt. Daher ist es praktisch, Auslesungen mit etwas mehr Prosa zu haben:

  • Hinzufügen von ACustomerOrderFailWhenCustomersIdIsInvalid: Fehlgeschlagen
  • OutOfBoundsPriceReturnsAnError: Bestanden
  • CanDeleteAnEventFromASeason: Bestanden

Auch dies sollte sparsam geschehen, aber ich kann es als mindestens einen Fall ansehen, in dem grammatische Ergänzungen es ein wenig einfacher machen können, auszudrücken, was bestanden hat und was nicht. Dies ist natürlich so, es sei denn, Ihre Sprache / Ihr Framework bietet einen guten Mechanismus für Testbeschreibungen in der Testanzeige außer Methodennamen. Ignorieren Sie in diesem Fall auch diesen.


1
+1 für ein gutes Beispiel, wo Prosa-Methodennamen tatsächlich von Vorteil sein können. Es ist schon komisch, denn jetzt, wo du es erwähnst, ich habe dies ausdrücklich getan beim Schreiben Unit - Test - Namen, und zwar so wusste ich , was zum Teufel des Test tut, als ich sie später lief.
Mike Spross

Das ist nützlich und passt in die von Roy Osherove vorgeschlagene MethodUnderTest_Condition_ExpectedBehaviour Namenskonvention für Komponententests . zB AddOrder_WithInvalidCustomerId_Fails, CreateItem_WithOutOfBoundsPrice_ReturnsErrorundDeleteEvent_EventExistsInSeason_Succeeds
StuperUser

@StuperUser für das erwartete Verhalten, du hast tatsächlich das erwartete Testergebnis angegeben und daher habe ich keine Ahnung, was die Methode zurückgeben soll.
essbarer Code

@danRhul Fair point, ich war nicht klar genug; .._AdditionFailsund .._DeletionSucceedssollte besser sein. Ich habe das Ergebnis der Methode angegeben, aber Sie weisen darauf hin, dass sie mit dem Testen der Terminologie für Bestehen / Nichtbestehen verwechselt werden können.
StuperUser

10

Lawrence aus dem Büro umschreiben ...

Nein, nein, Mann, ich glaube, wenn jemand, mit dem ich hier zusammengearbeitet habe, die Funktion 'UploadTheFileToTheServerPlease' hat, wird er umgehauen, Mann.


10

Solche "langen" Namen klingen nicht nach Prosa . Wenn sie alleine sind - vielleicht, aber zusammen mit dem Rest des Codes -, machen sie einfach mehr Chaos. Hör zu:

bool ResultOfTheUpload
      = UploadTheFileToTheServerPlease(TheNameOfTheFile, TheServersAddress);

Yuuuuk! ..

Dies ist kein gültiger englischer Text, und in keiner Programmiersprache sieht er so aus. Es macht also keinen Sinn, Bytes für Artikel auszugeben.


1
Ein gutes Beispiel dafür, warum ich diesen Ansatz nicht so sehr mag! Als ich die Frage schrieb, konzentrierte ich mich nur auf die Methodennamen, die sich wie Prosa anhörten, aber ich stimme Ihnen zu: Es ist ziemlich schwierig, den aufrufenden Code tatsächlich wie Prosa zu lesen, daher macht es keinen Sinn, einzelne Funktionsnamen so klingen zu lassen, als wären sie geschrieben Englisch.
Mike Spross

3
Ich schlage vorbool ResultOfTheGentlyUploadOfTheFileToTheServer
Wizard79

Ich habe mit einer Person zusammengearbeitet, die Unternehmensstandards erstellt hat, bei denen 'theVariable' und 'aMethod' befolgt werden mussten. Dieselbe Person mochte es auch, wenn alle Codezeilen vertikal ausgerichtet waren.
Chris

7

Aus Sicht des Programmierers ist "UploadFileToServer" sinnvoller und leichter zu lesen und zu verstehen als "UploadTheFileToTheServerPlease".

Mehr als nur englische Grammatik, Lesbarkeit und Verständlichkeit spielen beim Programmieren eine wichtige Rolle!


Stimme voll und ganz zu. Wenn ich den Code lese, der ein paar Tage im ersten Stil geschrieben wurde, bin ich sicher, dass er mich verrückt machen wird.
Naveen

@Naveen: Ich habe mit Code wie diesem gearbeitet und die erste Chance, die ich bekam, all diese Methoden umbenannt. Und ich bin mir nicht sicher, ob es nur der Entwickler war oder nicht, aber ich glaube, es gibt eine Tendenz, Funktionen dazu zu bringen, mehrere Dinge zu tun, wenn Sie sie als Sätze schreiben, dh UploadTheFileAndProcessItAndEmailTheOrdersToTheCustomersobwohl es im wirklichen Leben hoffentlich nicht ganz so schlimm ist.
Mike Spross

@ Mike Dann würde ich die Methode auf 2 verschiedene Methoden umgestalten;)
Gopi

2

Angesichts der vielen Tippfehler in meinem Leben würde ich damit enden

* UploadTehFileToTehServerPleaz
* WriteTehRecordToTehDatabase
* ResetTehSystemClock
* ICanHazTehCheezburger

Im Ernst, ich würde mir sogar ansehen, wie mein Klassenname lautete. Wenn meine Klasse "Datei" hieße, würde ich wahrscheinlich einfach mitgehen

*UploadToServer
*DownloadFromServer

So würde es sein

   File file = new file;
   file.UploadtoServer(ServerAddress);

Nur ein einfaches Beispiel, aber das ist hoffentlich illustrativ genug.


Hehe Ich habe tatsächlich gesehen, wie "Teh" sich in Methodennamen eingeschlichen hat, die dem "Englisch-ähnlichen" Namensmuster folgen. Was Ihren zweiten Punkt betrifft: Ich stimme vollkommen zu, dass die Redundanz bei Methodennamen eine weitere Ausnahme von mir ist ( File.UploadFileToServer... ugh).
Mike Spross

0

Es ist mir persönlich egal. Ich habe sie gesehen und sie stören mich nicht. Ich habe nicht einmal über sie nachgedacht, bis ein anderer Programmierer über sie geschimpft hat. Ich fand es schockierend, dass sich jemand so sehr für etwas interessiert, das so wenig zählt. Ich meine, er war wirklich wütend darüber. Aber das war zu Beginn meiner Karriere, vor ungefähr elf Jahren, und seitdem habe ich festgestellt, dass Entwickler, die sich über Kleinigkeiten ärgern, eigentlich ziemlich häufig sind. Deshalb werden Manager von Entwicklern so gut bezahlt. Sie müssen täglich mit Entwicklern umgehen.

Und das würde ich lieber sehen als "UL_FlToSrv".

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.