Boilerplate code
Em programação de computadores, código boilerplate ou boilerplate se refere a seções de código que devem ser incluídas em muitos lugares com pouca ou nenhuma alteração. Ele é muitas vezes usado quando se refere a linguagens que são consideradas detalhadas, onde o programador deve escrever muito código para fazer tarefas mínimas.
A necessidade de boilerplate pode ser reduzida por meio de mecanismos de alto nível, tais como a metaprogramação (que faz o computador escrever automaticamente o código de boilerplate necessário ou inseri-lo no tempo de compilação), convenção sobre configuração (que fornece bons valores padrão, reduzindo a necessidade de especificar os detalhes do programa em cada projeto) e engenharia guiada por modelos (que usa modelos e geradores model-to-code, eliminando a necessidade de escrever boilerplate manualmente).
Origem
[editar | editar código-fonte]O termo surgiu no ramo jornalístico. Colunas e outras peças que eram enviadas para jornais inscritos na forma de uma esteira (ou seja, uma matriz). Uma vez recebida, chumbo em ebulição era derramado nesta esteira para criar a chapa que seria utilizada para imprimir a peça, daí o nome "boilerplate," que significa "chapa de ebulição" em tradução livre. Como o artigo impresso em uma boilerplate não podia ser alterado, o termo passou a ser usado pelos advogados para se referir às partes de um contrato que não são alteradas através de usos repetidos em diferentes aplicações, e, finalmente, à linguagem em geral que pode ser usada repetidamente em vários documentos sem alterações.[1]
Um termo relacionado é bookkeeping code, referindo-se ao código que não faz parte da lógica de negócio, mas é intercalada com ele, a fim de manter estruturas de dados atualizadas ou lidar com aspectos secundários do programa.
Preâmbulo
[editar | editar código-fonte]Uma forma de boilerplate consiste de declarações que, embora não façam parte da lógica do programa ou da sintaxe essencial da linguagem, são adicionadas no início de um arquivo de origem como uma questão de costume. O seguinte exemplo em Perl demonstra boilerplate:
#!/usr/bin/perl
use warnings;
use strict;
A primeira linha é um shebang, que identifica o arquivo como um arquivo de script em Perl que pode ser executado diretamente na linha de comando (em sistemas Unix/Linux.) As outras duas são pragmas ligando avisos e modo estrito, que são comuns no estilo de programação de Perl.
O próximo exemplo é uma boilerplate na linguagem de programação C/C++, include guard.
#ifndef MYINTERFACE_H
#define MYINTERFACE_H
...
#endif
Isso configura, e verifica, um sinalizador global para dizer ao compilador se o arquivo myinterface.h já foi incluído. Como muitos arquivos interdependentes podem estar envolvidos na compilação de um módulo, isto evita o processamento do mesmo cabeçalho várias vezes (o que poderia levar a erros devido a várias definições com o mesmo nome).
Na programação orientada a objetos
[editar | editar código-fonte]Na Programação orientada a objetos, classes são muitas vezes oferecidas com métodos para obter e definir variáveis. As definições destes métodos podem ser frequentemente consideradas boilerplate. Embora o código varie de uma classe para outra, sua estrutura é tão estereotipada que seria melhor gerá-lo automaticamente do que escrever a mão. Por exemplo, na seguinte classe em Java que representa um animal de estimação (pet), quase todo o código é boilerplate, exceto as declarações de Pet, name (nome) e owner (dono):
public class Pet {
private String name;
private Person owner;
public Pet(String name, Person owner) {
this.name = name;
this.owner = owner;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getOwner() {
return owner;
}
public void setOwner(Person owner) {
this.owner = owner;
}
}
Observe que a maioria da boilerplate neste exemplo existe para fornecer o encapsulamento. Se as variáveis name e owner fossem declaradas como públicas, os métodos não seriam necessários.
Em algumas outras linguagens de programação pode ser possível conseguir o mesmo resultado com menos boilerplate, quando a linguagem já vem com suporte para tais construções. Por exemplo, o equivalente ao código acima pode ser expresso em Scala utilizando apenas uma linha de código:
class Pet(var name: String, var owner: Person)
Ou em C# usando propriedades automáticas com campos gerados automaticamente pelo compilador:
public class Pet
{
public String Name { get; set; }
public Person Owner { get; set; }
}
HTML
[editar | editar código-fonte]Em HTML, a seguinte boilerplate é usada como um template básico vazio e está presente na maioria das páginas da web.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title></title>
</head>
<body>
</body>
</html>