Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wie man Dinge gut benennt

Wie man Dinge gut benennt

Geschichte der gesprochenen Sprache und der Programmiersprache
Viele Empfehlungen zur Benennung von Variablen, Funktionen und Klassen
Einige Tipps und Tricks wie man daran herangehen kann gut Namen zu finden

Anne-Julia Seitz

October 26, 2018
Tweet

More Decks by Anne-Julia Seitz

Other Decks in Programming

Transcript

  1. Wie man Dinge Wie man Dinge gut benennt gut benennt

    Naming things considered hard Naming things considered hard Symfony Live Berlin 2018 Symfony Live Berlin 2018
  2. Anne-Julia Seitz Anne-Julia Seitz Schreibe Software seit über 15 Jahren

    Beraterin und Entwicklerin bei PortZero GmbH Habe das meiste was ich zeige so gesehen
  3. Geschichte der Sprache Geschichte der Programmiersprache Allgemeine Empfehlungen zur Benennung

    Empfehlungen zur Benennung von Variablen, Funktionen und Klassen Tipps und Tricks
  4. Assembler Assembler .START ST ST: MOV R1,#2 MOV R2,#1 M1:

    CMP R2,#20 BGT M2 MUL R1,R2 INI R2 JMP M1 M2: JSR PRINT .END
  5. Programmiere auf englisch Programmiere auf englisch unratsam: unratsam: gut beraten:

    gut beraten: $obst = "Apfel;Himbeere;Traube"; $obstListe = explode(";", $obst); //Ausschließlich (amerikanisches) englisch, ohne Ausnahme! $fruits = "Apfel;Himbeere;Traube"; $fruitList = explode(";", $fruits);
  6. Vermeide Zungenbrecher Vermeide Zungenbrecher wie spricht man das? wie spricht

    man das? aussprechbar: aussprechbar: class DtaRcrd102 { private $genymdhms; private $modymdhms; } class Customer { private $generationTimestamp; private $modificationTimestamp; }
  7. 1337 SP34K ist nicht cool 1337 SP34K ist nicht cool

    n0pe: n0pe: am besten: am besten: UberController $obj->f1nd4ll3n3mi3s(); $numb3r Only english without exceptions!1!11!!!
  8. Benutze kein Unicode Benutze kein Unicode schlecht: schlecht: genauso schlecht:

    genauso schlecht: क = 1; कु ल = 0; जब तक क छोटा है 10 से { कु ल += क; } छापो कु ल; public enum Товары { Тетради = 2,Карандаши = 4, Всё = Тетради | Карандаши }
  9. Versuche es kurz zu halten Versuche es kurz zu halten

    ProjectContractChargingPeriodProjectAccountReferenceVM $countriesFromAsiaWhereAreTheMostPlanesAndBoats $countriesFromAfricaWhereAreTheMostCars renderHTMLViewFromTemplateObject()
  10. Faustregel für Länge Faustregel für Länge 1 Buchstabe für Schleifenzähler

    1 Wort für Konditionen und Schleifenvariablen 1-2 Wörter für Methoden 2-3 Wörter für Klassen 3-4 Wörter für globale Konstanten
  11. Vermeide Abkürzungen Vermeide Abkürzungen undeutlich: undeutlich: gut: gut: SrvMgrInstanceDescriptorFactory $ctrl,

    $ctr $tmpl $list->srt(); SrvMgrInstanceDescriptorFactory $controller $template $list->sort();
  12. Nullwörter Nullwörter zu unspezifisch: zu unspezifisch: gut: gut: ConnectionManager, XmlHelper

    ObjectDataHandlerManagerBuilderHelperFactory $tmp, $temp, $data, $var, $array, $key, $index ... Connection XmlDocument, XmlNode
  13. Lösche unbenutzten Code Lösche unbenutzten Code kann das weg? kann

    das weg? ja: ja: NewHandler $obj->buildContextFaster(); // use the vcs!!1!11
  14. Benutze suchbare Begriffe Benutze suchbare Begriffe unauffindbar: unauffindbar: gut zu

    finden: gut zu finden: for ($j = 0; $j < 34; $j++) { $s += ($t[$j] * 4) / 5; } const WORK_DAYS_PER_WEEK = 5; $realDaysPerIdealDay = 4; $sum = 0; for ($j = 0; $j < NUMBER_OF_TASKS; $j++) { $realTaskDays = $taskEstimate[$j] * $realDaysPerIdealDay; $realTaskWeeks = ($realTaskDays / WORK_DAYS_PER_WEEK); $sum += realTaskWeeks; }
  15. Sei Konsistent beim Stil Sei Konsistent beim Stil Stile: Stile:

    das Auge stolpert: das Auge stolpert: UpperCamelCase lowerCamelCase snake_case displayText_label_maxDiff public function setAccessArguments(array $access_arguments) {}
  16. Bleibe bei einer Schreibweise Bleibe bei einer Schreibweise public function

    getUsername(): string { return $this->userName; }
  17. Benutze keine Ein-Buchstaben Benutze keine Ein-Buchstaben Variablen Variablen ohne Aussage:

    ohne Aussage: besser: besser: ok in Loops: ok in Loops: $t; // elapsed time in days $elapsedTimeInDays; // in einem for- oder foreach-loops for ($i = 0; $i < 10; $i++) {} // besser ein benannter index: foreach($cars as $carKey => $car) {}
  18. Variablen werden nicht Variablen werden nicht inkrementiert inkrementiert zu ähnlich

    und uneindeutig: zu ähnlich und uneindeutig: gut: gut: $account1 $account2 $account $accountFromOtherCompany 1 2 1 2
  19. Vermeide zusammengesetzte Vermeide zusammengesetzte Namen Namen kann gekürzt werden: kann

    gekürzt werden: kurz: kurz: $shipmentOrder $treeLeaf $order $leaf 1 2 1 2
  20. Benutze Verben als Benutze Verben als Funktionsnamen Funktionsnamen schlecht: schlecht:

    gut: gut: $list->refCount(); $list->clear(); $list->sort(); $obj->addReference();
  21. Versuche es kurz zu halten Versuche es kurz zu halten

    schlecht: schlecht: gut: gut: $list->getNumberOfItems(); $list->count();
  22. Aber nicht zu kurz Aber nicht zu kurz schlecht: schlecht:

    gut: gut: $list->verify(); $list->containsNull();
  23. Fragen für booleans Fragen für booleans schlecht: schlecht: gut: gut:

    $list->empty(); $list->isEmpty(); $list->contains($item);
  24. Vermeide Redundanz mit Vermeide Redundanz mit Funktionsparametern Funktionsparametern schlecht: schlecht:

    gut: gut: $list->addItem($item); $handler->receiveMessage($message); $list->add($item); $handler->receive($message);
  25. Benutz kein Benutz kein And And oder oder Or Or

    in in Funktionsnamen Funktionsnamen schlecht: schlecht: gut: gut: $mail->verifyAddressAndSendStatus(); $mail->verifyAddress(); $mail->sendStatus();
  26. Wähle ein Wort für ein Konzept Wähle ein Wort für

    ein Konzept holen: holen: erstellen: erstellen: löschen: löschen: fetch, retrieve, get create, insert, put, add remove, delete, prune
  27. Benutze auch Namespaces Benutze auch Namespaces lang: lang: nutzt Namespaces:

    nutzt Namespaces: SystemOnlineMessage System\Online\Message 1 1
  28. Wenn nichts sich richtig anfühlt Wenn nichts sich richtig anfühlt

    Frage was es tun soll. Finde mehr über die Business-Domäne heraus. Frage einen Kollegen was er denkt wie es heißen kann. Schau auf GitHub nach ähnlichem Code. Entscheide für das offensichtlichste.
  29. Eine kleine Formel Eine kleine Formel für Service-Klassen: für Service-Klassen:

    Nomen + Verb + “er”|“or” Nomen + Verb + “er”|“or”
  30. Sammlung Hauptwörter Sammlung Hauptwörter Attribute, Base, Bridge, Bucket, Chain, Collection,

    Configuration, Context, Command, Composite, Element, Entity, Exception, Field, Flag, Flyweight, Identity, Info, Item, Key, Method, Node, NullObject, Option, Proxy, Protocol, Peer, Query Record, Service, Strategy, Style, State, Target, Template ethod, Type, Unit
  31. Sammlung Verben Sammlung Verben (nominalisiert) (nominalisiert) Adapter, Adjuster, Attacher, Binder,

    Builder, Calculator, Coordinator, Container, Converter, Controller, Connector, Collector, Configurer, Constructor, Composer, Commander, Creater, Debugger, Decorator, Decider, Designer, Delegator, Destroyer, Dispatcher, Dumper, Editor, Executor, Exporter, Extractor, Factory, Filter, Formatter, Generator, Initializer, Identifier, Interpreter, Inserter, Informer, Importer, Iterator, Listener, Limiter, Machine, Marker, Mediator, Memento, Matcher, Mapper, Messenger, Mover, Observer, Parser, Presenter, Provider, Preparer, Printer, Processor, Receiver, Reader, Recorder, Remover, Resolver, Sanitizer, Selector, Scheduler, Sender, Serializer, Sorter, Standardizer, Supporter, Synchronizer, Tokenizer, Tracer, Tracker, Validator, Viewer, Visitor, Writer
  32. Quellen Quellen Bild Höhlenkunst: Bild Binärcode: Assembler Gif: C code:

    Bild Rechtschreibprüfung: Wikimedia ELECTRÓNICA, INFORMÁTICA Sector Wars - a previously unrelease 8-bit video game programiz.com PhpStorm Hilfe https://medium.com/coding-skills/clean-code-101- meaningful-names-and-functions-bf450456d90c https://de.wikipedia.org/wiki/Höhere_Programmiers