Boilerplate-Code
# Boilerplate-Code

In der Softwareentwicklung ist Boilerplate-Code (oder einfach nur Boilerplate) die Bezeichnung für Code-Segmente, die an mehreren Stellen mit geringen bis keinen Änderungen wiederholt werden. Bei der Verwendung von Sprachen, die als wortreich (verbose) gelten, muss der Programmierer viel Code schreiben, um nur geringfügige Funktionalitäten zu implementieren. Ein solcher Code wird als Boilerplate bezeichnet.

Der Bedarf an Boilerplate-Code kann durch übergeordnete Mechanismen wie Metaprogrammierung (bei der der Computer den erforderlichen Boilerplate-Code automatisch schreibt oder beim Kompilieren einfügt), Konvention über Konfiguration (die gute Standardwerte liefert, und die Notwendigkeit der Programm-Details in jedem Projekt verringert) und modellgetriebenes Engineering (das Modelle und Modell-zu-Code-Generatoren verwendet, sodass kein manueller Code für das Boilerplate erforderlich ist) verringert werden.

## Begriff

Der Begriff entstand aus dem Zeitungsdruck. Spalten und andere Stücke, die von Druckkonsortien verteilt wurden, wurden in Form von vorbereiteten Druckplatten an abonnierende Zeitungen geschickt. Aufgrund ihrer Ähnlichkeit mit den bei der Herstellung von Kesseln verwendeten Metallplatten wurden sie als „Kesselplatten“ und der daraus resultierende Text „Kesselplatten-Text“ bekannt. Da die Geschichten, die von Kesselplatten verbreitet wurden, normalerweise eher „Füllstoffe“ als „ernsthafte“ Nachrichten waren, wurde der Begriff zum Synonym für unoriginalen, wiederholten Text.

Ein verwandter Begriff ist Buchhaltungscode, der sich auf Code bezieht, der nicht Teil der Geschäftslogik ist, aber mit diesem verschachtelt ist, um Datenstrukturen auf dem neuesten Stand zu halten oder sekundäre Aspekte des Programms zu behandeln.

## Vorwort

Eine Form von Boilerplate-Code besteht aus Deklarationen, die zwar nicht Teil der Programmlogik oder der wesentlichen Syntax der Sprache sind, jedoch benutzerdefiniert am Anfang einer Quelltextdatei hinzugefügt werden. Das folgende Perl-Beispiel zeigt das Boilerplate:

Die erste Zeile ist ein Shebang, der die Datei als Perl-Skript identifiziert, das direkt in der Befehlszeile (auf Unix / Linux-Systemen) ausgeführt werden kann. Die anderen beiden sind Compiler-Anweisungen, die Warnungen aktivieren, und der strenge Modus, die von modischem Perl vorgeschrieben werden Programmierstil.

Dieses Beispiel ist ein C/C++ Programmiersprache boilerplate, #include Include-Guard.

Dadurch wird ein globales Flag überprüft und eingerichtet, um dem Compiler mitzuteilen, ob die Datei myinterface.h bereits enthalten ist. Da möglicherweise viele voneinander abhängige Dateien an der Kompilierung eines Moduls beteiligt sind, wird vermieden, dass derselbe Header mehrmals verarbeitet wird (was aufgrund mehrerer Definitionen mit demselben Namen zu Fehlern führen würde).

## In objekt-orientierter Programmierung (OOP)

In objektorientierten Programmen werden Klassen häufig mit Methoden zum Abrufen und Festlegen von Instanzvariablen bereitgestellt. Die Definitionen dieser Methoden können häufig als Boilerplate angesehen werden. Obwohl der Code von Klasse zu Klasse unterschiedlich ist, ist seine Struktur ausreichend stereotyp, sodass er besser automatisch generiert als von Hand geschrieben wird. In der folgenden Java-Klasse, die ein Haustier darstellt, ist beispielsweise fast der gesamte Code mit Ausnahme der Deklarationen von Haustier, Name und Eigentümer ein Boilerplate:

Der größte Teil der Boilerplate-Code in diesem Beispiel dient zur Kapselung. Wenn die Variablen name und der owner als öffentlich deklariert wären, wären die set- und get-Methoden nicht erforderlich.

Um die Menge an Boilerplate-Code zu reduzieren, wurden viele Frameworks entwickelt, z. B. Lombok für Java. Der gleiche Code wie oben wird von Lombok mithilfe von Java-Annotations automatisch generiert, welche eine Art Metaprogrammierung ist:

In einigen anderen Programmiersprachen ist es möglicherweise möglich, dasselbe mit weniger Boilerplate-Code zu erreichen, wenn die Sprache solche gängigen Konstrukte unterstützt. Zum Beispiel kann das Äquivalent des obigen Java-Code in Scala mit nur einer Codezeile ausgedrückt werden:

Oder in C# mithilfe der automatischen Eigenschaften (auto properties) mit vom Compiler generierten Sicherungsfeldern:

### Methoden-Boilerplate

Neben Deklarationen tragen auch Methoden in OOP-Sprachen zur Menge der Boilerplate-Code bei. Eine Studie aus dem Jahr 2015 zu beliebten Java-Projekten zeigt, dass 60 % der Methoden durch das Auftreten von 4,6 % ihrer Token eindeutig identifiziert werden können, sodass die verbleibenden 95,4 % der Boilerplate für die Logik irrelevant sind. Die Forscher glauben, dass dieses Ergebnis im Allgemeinen in Unterprogramme in prozedurale Programmiersprachen übersetzt werden würde.

## HTML

In HTML wird der folgende Boilerplate-Code als grundlegende leere Vorlage verwendet und ist auf den meisten Webseiten vorhanden:

Der WHATWG HTML Living Standard definiert, dass die Tags <html>, <head> und <body> unter den meisten Umständen sicher weggelassen werden können. Das <meta charset="UTF-8"> Tag kann auch weggelassen werden, wenn der Webserver so konfiguriert ist, dass die Zeichenkodierung zusammen mit dem Inhaltstyp gesendet wird. Der HTML/CSS-Style-Guide von Google empfiehlt, alle optionalen Tags wegzulassen, was zu einem viel kompakteren Boilerplate-Code führt:

## Minimierung von Boilerplate-Code in Java, C# und Kotlin

Verschiedene Programmiersprachen versuchen durch ihre Syntax Boilerplate-Code zu verhindern beziehungsweise zu minimieren. Hier sind drei Beispiele einer Daten-Klasse Book (siehe auch Transferobjekt, kurz: DTO sowie Plain Old Java Object, kurz: POJO sowie Plain old CLR object, kurz POCO).

Daten-Klasse Book in Java:

Daten-Klasse Book in C#:

Daten-Klasse Book in Kotlin:

