Further information: Boilerplate (text)
The term arose from the newspaper business. Columns and other pieces that were distributed by print syndicates were sent to subscribing newspapers in the form of prepared printing plates. Because of their resemblance to the metal plates used in the making of boilers, they became known as "boiler plates", and their resulting text—"boilerplate text". As the stories that were distributed by boiler plates were usually "fillers" rather than "serious" news, the term became synonymous with unoriginal, repeated text.23
A related term is bookkeeping code, referring to code that is not part of the business logic but is interleaved with it in order to keep data structures updated or handle secondary aspects of the program.
One form of boilerplate consists of declarations which, while not part of the program logic or the language's essential syntax, are added to the start of a source file as a matter of custom. The following Perl example demonstrates boilerplate:
The first line is a shebang, which identifies the file as a Perl script that can be executed directly on the command line on Unix/Linux systems. The other two are pragmas turning on warnings and strict mode, which are mandated by fashionable Perl programming style.
This next example is a C/C++ programming language boilerplate, #include guard.
This checks, and sets up, a global flag to tell the compiler whether the file myinterface.h has already been included. As many interdepending files may be involved in the compilation of a module, this avoids processing the same header multiple times, (which would lead to errors due to multiple definitions with the same name).
In Java programs, DTO classes are often provided with methods for getting and setting instance variables. The definitions of these methods can frequently be regarded as boilerplate. Although the code will vary from one class to another, it is sufficiently stereotypical in structure that it would be better generated automatically than written by hand. For example, in the following Java class representing a pet, almost all the code is boilerplate except for the declarations of Pet, name, and owner:
Most of the boilerplate in this example exists to fulfill requirements of JavaBeans. If the variable's name and owner were declared as public, the accessor and mutator methods would not be needed.
In Java 14, record classes were added to fight with this issue.456
To reduce the amount of boilerplate, many frameworks have been developed, e.g. Lombok for Java.7 The same code as above is auto-generated by Lombok using Java annotations, which is a form of metaprogramming:
In some other programming languages it may be possible to achieve the same thing with less boilerplate, when the language has built-in support for such common constructs. For example, the equivalent of the above Java code can be expressed in Scala using just one line of code:
Or in C# using automatic properties with compiler generated backing fields:
Starting with C# 9.0 there is an opportunity to use Records which generate classes with Properties automatically:
In addition to declarations, methods in OOP languages also contribute to the amount of boilerplate. A 2015 study on popular Java projects shows that 60% of methods can be uniquely identified by the occurrence of 4.6% of its tokens, making the remaining 95.4% boilerplate irrelevant to logic. The researchers believe this result would translate to subroutines in procedural languages in general.8
In HTML, the following boilerplate is used as a basic empty template and is present in most web pages:
The WHATWG HTML Living Standard defines that the <html>, <head> and <body> tags may be safely omitted under most circumstances.9 The <meta charset="UTF-8"> tag is technically redundant when coming directly from a web server configured to send the character encoding in an HTTP header, though it becomes useful when the HTML response is saved in an .html file, cache, or web archive.10 Google's HTML/CSS style guide recommends that all optional tags be omitted,11 resulting in much less boilerplate. The World Wide Web Consortium states that the element <title> must not be empty:12
In Python, the following boilerplate code can be used to modify if code can only be executed in or out of a module context.
Lämmel, Ralf; Jones, Simon Peyton (2003). "Scrap your boilerplate: a practical design pattern for generic programming". Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation. TLDI '03. New York: ACM. pp. 26–37. doi:10.1145/604174.604179. ISBN 9781581136494. S2CID 9472305. 9781581136494 ↩
"Boilerplate". Dictionary.com. Retrieved 2018-01-27. https://www.dictionary.com/browse/boilerplate ↩
"Boilerplate". Merriam-Webster. Retrieved 2018-01-27. https://www.merriam-webster.com/dictionary/boilerplate ↩
"Record Classes". docs.oracle.com. https://docs.oracle.com/en/java/javase/20/language/records.html ↩
"JEP 395: Record". openjdk.org. https://openjdk.org/jeps/395 ↩
Evans, Ben (2020-11-01). "Records Come to Java". blogs.oracle.com. https://blogs.oracle.com/javamagazine/post/records-come-to-java ↩
Frankel, Nicolas (2009-12-07). "Lombok reduces your boilerplate code". DZone.com. Retrieved 2017-08-02. https://dzone.com/articles/lombok-reduces-your ↩
Martin Velez; Dong Qiu; You Zhou; Earl T. Barr; Zhendong Su (5 Feb 2015). "On the Lexical Distinguishability of Source Code [was: A Study of "Wheat" and "Chaff" in Source Code]". arXiv:1502.01410 [cs]. /wiki/ArXiv_(identifier) ↩
"HTML Standard - The HTML syntax - Optional tags". WHATWG. 2017-05-05. Retrieved 2017-05-05. https://html.spec.whatwg.org/multipage/syntax.html#syntax-tag-omission ↩
"Is the charset meta tag required with HTML5?". stackoverflow.com. Retrieved 2017-05-05. https://stackoverflow.com/q/14669352 ↩
"Google HTML/CSS Style Guide". google.github.io. Retrieved 2017-05-05. https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags ↩
"HTML page has non-empty title". www.w3.org. Retrieved 22 July 2021. https://www.w3.org/WAI/standards-guidelines/act/rules/html-page-non-empty-title-2779a5 ↩