Boilerplate code
Происхождение | |
Преамбула | |
В объектно-ориентированном программировании | |
метод boilerplate | |
HTML |
В компьютерном программировании шаблонный код -это разделы кода,
которые повторяются в нескольких местах практически без изменений.
При использовании языков, которые считаются многословными, программист
должен написать много кода, чтобы выполнить только незначительную функциональность.
Такой код называется шаблонным.
Потребность в шаблонном коде может быть уменьшена с помощью высокоуровневых
механизмов, таких как:
- метапрограммирование (при котором компьютер автоматически записывает необходимый шаблонный код или вставляет его во время компиляции)
- соглашение о конфигурации (которое обеспечивает хорошие значения по умолчанию, уменьшая необходимость указывать детали программы в каждом проекте)
- проектирование на основе моделей (которое использует модели и генераторы моделей в код, устраняя необходимость в ручном шаблонном коде).
Происхождение | |
Преамбула | |
В объектно-ориентированном программировании | |
метод boilerplate | |
HTML | |
См. также | |
Ссылки |
Происхождение
Дополнительная информация: Boilerplate - Шаблон (текст)
Термин возник из газетного бизнеса. Колонки и другие материалы, распространявшиеся печатными синдикатами, рассылались подписным газетам в виде готовых печатных форм. Из - за их сходства с металлическими пластинами, используемыми при изготовлении котлов (boiler - котёл), они стали известны как "котловые пластины", а их результирующий текст - "шаблонный текст". Поскольку рассказы, которые распространяли бойлеры, обычно были "наполнителями", а не "серьезными" новостями, этот термин стал синонимом неоригинального, повторяющегося текста.
Родственным термином является бухгалтерский код, относящийся к коду, который не является частью бизнес-логики, но перемежается с ней для того, чтобы обновлять структуры данных или обрабатывать вторичные аспекты программы.
Преамбула
Одна из форм шаблонного кода состоит из объявлений, которые, хотя и не являются частью логики программы или основного синтаксиса языка, добавляются в начало исходного файла как обычай. Следующий пример Perl демонстрирует шаблонный шаблон:
#!/usr/bin/perl
use warnings;
use strict;
Первая строка-это shebang, который идентифицирует файл как Perl-скрипт,
который может быть выполнен непосредственно в командной строке
(в системах Unix/Linux.)
Два других-это прагмы (директивы), включающие предупреждения и строгий режим,
которые предписаны модным стилем программирования Perl.
Следующий пример-шаблонный шаблон языка программирования
C/C++, #include guard.
#ifndef MYINTERFACE_H
#define MYINTERFACE_H
...
#endif
Это проверяет и устанавливает глобальный флаг, чтобы
сообщить компилятору, является ли файл
myinterface.h уже был включен.
Поскольку в компиляции модуля может быть задействовано много взаимозаменяемых файлов, это позволяет избежать многократной обработки одного и того же заголовка (что привело бы к ошибкам из-за нескольких определений с одним и тем же именем).
В объектно-ориентированном программировании
В объектно-ориентированных программах классы часто снабжаются методами
получения и установки переменных экземпляра.
Определения этих методов часто можно рассматривать как шаблонные.
Хотя код будет варьироваться от одного класса к другому, он
достаточно стереотипен по структуре, чтобы его лучше генерировать автоматически,
чем писать от руки.
Например, в следующем классе
Java
, представляющем домашнее животное, почти весь код является шаблонным,
за исключением объявлений Pet, name и owner:
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;
}
}
Большая часть шаблона в этом примере существует для обеспечения инкапсуляции.
Если бы имя переменных и владелец были объявлены общедоступными, методы
доступа и мутатора не были бы нужны.
Чтобы уменьшить количество шаблонных шаблонов, было разработано много
фреймворков, например Lombok для Java.
Тот же код, что и выше, автоматически генерируется фреймворком Lombok с использованием
аннотаций Java, что является формой метапрограммирования:
@AllArgsConstructor
@Getter
@Setter
public class Pet {
private String name;
private Person owner;
}
В некоторых других языках программирования можно добиться того же с меньшим
шаблоном, когда язык имеет встроенную поддержку таких общих конструкций.
Например, эквивалент приведенного выше кода Java может быть выражен в Scala,
используя только одну строку кода:
case class Pet(var name: String, var owner: Person)
Или в
C#
с использованием автоматических свойств с созданными компилятором резервными полями:
public class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}
Шаблонный метод
В дополнение к объявлениям, методы в языках ООП также вносят свой вклад
в количество шаблонов.
Проведенное в 2015 году исследование популярных Java-проектов показывает,
что 60% методов могут быть однозначно идентифицированы по появлению
4,6% его токенов, что делает оставшиеся 95,4% шаблонных неуместными для логики.
Исследователи полагают, что этот результат будет переведен в подпрограммы на
процедурных языках в целом.
HTML
В HTML следующий шаблонный шаблон используется в качестве базового пустого шаблона и присутствует на большинстве веб-страниц:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title></title>
</head>
<body>
</body>
</html>
Рабочая группа по вебу, гипертексту, приложениям и технологиям
(WHATWG) в своём HTML Living Standard определяет,
что <html>, <head> и <body>
теги могут быть безопасно опущены в большинстве случаев.
Тег <meta charset="UTF-8">
также может быть опущен, если веб-сервер правильно настроен для отправки
кодировки символов вместе с типом контента.
Руководство по стилю HTML/CSS Google рекомендует опустить все необязательные
теги, что приводит к гораздо более компактному шаблону:
<!DOCTYPE html>
<title<>/title>
Программирование | |
C | |
C++ | |
Bash | |
Python | |
PHP | |
JavaScript | |
Ruby | |
GIT | |
Docker |