Skip to content

Styleguide

Lukas Radermacher edited this page Jun 13, 2022 · 10 revisions

Allgemein

  • An den Linter-Tests orientieren
  • Kein defensives Klammern
  • Methodenkategorien und -benennung überdenken
  • Messages in camelCase benennen
  • Parameter nach dem Schema a(n)Type benennen
  • Über Accessoren auf Instanzvariablen zugreifen. Direkter Zugriff nur aus den Accessoren
  • In Iiteratoren domänenspezifische Namen verwenden (zum Beispiel points do: [:point | ...] statt points do: [:each | ...]
  • Wenn Kaskaden als Wert verwendet werden, ; yourself am Ende verwenden
    ^ self createSomething
        applySomething: 'Hello';
        applySomethingElse: 'World';
        yourself
  • Auch auf Klassenseite überprüfen
  • Auch automatisch generierten Code (insbesondere Accessoren) entsprechend anpassen

Formatierung

Aufbau einer Methode

  • Erste Zeile: Methodenname und Parameter
  • Zweite Zeile: Kommentar (bei Bedarf)
  • Eine freie Zeile, bevor der Methodenkörper beginnt. Der Kommentar steht, falls vorhanden, oberhalb der freien Zeile, die lokalen Variablen unterhalb der freien Zeile
  • Alles außer dem Methodennamen ist eingerückt
someMessageToProcess: anObject
    "This comment explains the purpose of this method"

    |local1 local2|
    self doSomething.
    ^ self

Leerzeichen

  • Keine trailing whitespaces
  • Punkte mit Leerzeichen um das @ angeben: x @ y
  • Ebenso Leerzeichen um alle binären Operatoren (1 + 2 etc.)
  • Leerzeichen zwischen ^ und dem zurückzugebenden Ausdruck
  • Keine Leerzeichen auf den Innenseiten von Klammern
    • [:parameter | self doSomethingWith: parameter] statt [ :parameter | self doSomethingWith: parameter ]
    • (1 + 2) * 3 statt ( 1 + 2 ) * 3
    • entsprechend für weitere Klammern
    • Diese Regel gilt auch für die |-Symbole für lokale Variablen

Einrückung & Newlines

  • Nicht mehrere leere Zeilen in Folge
  • Keine Newline am Ende der Methode
  • Nie mehr als ein Statement in einer Zeile
  • if-branches (ifTrue:, ifFalse:, ...) eingerückt in einer neuen Zeile platzieren
    self evaluateCondition
        ifTrue: [self doSomething]
  • Schleife mit nur einem Statement in einer Zeile schreiben, zum Beispiel xy do: [:entity | entity]
  • Kaskadierung: Falls mehrere Nachrichten an das gleiche Objekt gesendet werden, Kaskaden nutzen. Dabei jede Nachricht eingerückt in eine eigene Zeile, keine Nachricht in der gleichen Zeile wie der Receiver:
    receiver
        message1;
        message2;
        message3

Punkte

  • Das letzte Statement einer Methode wird nicht mit einem Punkt abgeschlossen
  • Ebenso besitzt das letzte Statement eines Blocks kein Punkt
Clone this wiki locally