Lesbare Boolsche Argumente

Das Problem mit Boolschen Methoden Argumenten ist, dass der Kontext fehlt. Was sagt true oder false aus?

Problematisches Beispiel

Beispielhaft soll hier Module#constants(inherit) herhalten. Die Methode erwartet einen Boolschen Wert (inherit) als Argument. Der default-Wert ist true:

File.constants.size
# => 49

Zurück kommen alle in der Klasse (File) verfügbaren Konstanten. Aber was passiert, wenn explizit false übergeben wird:

File.constants(false).size
# => 6

Offensichtlich werden weniger Konstanten zurückgegeben. Aber warum? Dann hilft nur ein Blick in die Methodendokumentation (wenn sie denn verständlich ist). Das muss nicht sein.

Lesbare Alternative

Guter Code erleichtert Lesern einen möglichst leichten Zugang zum Verständnis der Implementierung, um zukünftige Kosten zu minimieren (Debugging, Einarbeitung neuer Entwickler, …). Sicher kann das durch umfangreiche Dokumentation erreicht werden. Das Problem mit Dokumentation ist nur, dass sie tendenziell veraltet ist. Das Lesbarkeitsproblem von Boolschen Arguementen läßt sich aber sehr einfach im Code lösen:

File.constants(_including_ancestors = false).size
# => 6

Aha: es handelt sich also um alle Konstanten, die lediglich in File definiert sind. Problem gelöst.