Код шаблона - Boilerplate code

В компьютерном программировании шаблонный код или просто шаблонный код - это участки кода, которые повторяются в нескольких местах с небольшими вариациями или без них. При использовании языков, которые считаются многословными , программист должен писать много кода для выполнения лишь незначительных функций. Такой код называется шаблонным .

Потребность в шаблонном коде может быть уменьшена с помощью высокоуровневых механизмов, таких как метапрограммирование (при котором компьютер автоматически записывает необходимый шаблонный код или вставляет его во время компиляции ), соглашение по конфигурации (которое обеспечивает хорошие значения по умолчанию, уменьшая необходимость указывать программу. детали в каждом проекте) и проектирование на основе моделей (в котором используются модели и генераторы преобразования модели в код, что устраняет необходимость в ручном стандартном коде).

Источник

Термин возник из газетного бизнеса. Колонки и другие материалы, которые распространялись печатными синдикатами, были отправлены подписавшимся газетам в виде подготовленных печатных форм . Из-за их сходства с металлическими пластинами, используемыми при изготовлении котлов , они стали известны как «котельные пластины», а полученный в результате текст - «шаблонный текст». Поскольку истории, которые распространялись котельными, обычно были « наполнителями », а не «серьезными» новостями, этот термин стал синонимом неоригинального, повторяющегося текста.

Связанный термин - это бухгалтерский код , относящийся к коду, который не является частью бизнес-логики, но чередуется с ней, чтобы обновлять структуры данных или обрабатывать второстепенные аспекты программы.

Преамбула

Одна из форм шаблона состоит из объявлений, которые, хотя и не являются частью логики программы или основного синтаксиса языка , добавляются в начало исходного файла по желанию. Следующий пример Perl демонстрирует шаблон:

#!/usr/bin/perl
use warnings;
use strict;

Первая строка - это шебанг , который идентифицирует файл как сценарий Perl, который может быть выполнен непосредственно в командной строке (в системах Unix / Linux). Два других - это прагмы, включающие предупреждения и строгий режим, которые требуются модным Perl. стиль программирования .

Следующий пример - шаблон языка программирования C / C ++ , #includeguard .

#ifndef MYINTERFACE_H
#define MYINTERFACE_H

...

#endif

Это проверяет и устанавливает глобальный флаг, чтобы сообщить компилятору, был ли уже включен файл myinterface.h. Поскольку в компиляцию модуля может быть вовлечено множество взаимозависимых файлов, это позволяет избежать многократной обработки одного и того же заголовка (что может привести к ошибкам из-за нескольких определений с одним и тем же именем).

В объектно-ориентированном программировании

В объектно-ориентированных программах классы часто снабжены методами для получения и установки переменных экземпляра. Определения этих методов часто можно рассматривать как шаблонные. Хотя код будет отличаться от одного класса к другому, он достаточно стереотипен по структуре, поэтому его лучше сгенерировать автоматически, чем написать вручную. Например, в следующем Java класс , представляющий собой домашнее животное, почти весь код шаблонного за исключением заявлений о Pet , имя и владельца :

Джава

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;
}

Scala

В некоторых других языках программирования может быть возможно достичь того же с меньшим количеством шаблонов, когда язык имеет встроенную поддержку таких общих конструкций. Например, эквивалент приведенного выше кода Java можно выразить на Scala, используя всего одну строку кода:

case class Pet(var name: String, var owner: Person)

C #

Или в C # с использованием автоматических свойств с полями поддержки, созданными компилятором:

public class Pet
{
    public string Name { get; set; }
    public Person Owner { get; set; }
}

Шаблон метода

В дополнение к объявлениям, методы на языках ООП также вносят свой вклад в количество шаблонов. Исследование популярных Java-проектов в 2015 году показывает, что 60% методов можно однозначно идентифицировать по появлению 4,6% их токенов, в результате чего оставшиеся 95,4% шаблонов не имеют отношения к логике. Исследователи полагают, что этот результат можно применить к подпрограммам процедурных языков в целом.

HTML

В HTML следующий шаблон используется как базовый пустой шаблон и присутствует на большинстве веб-страниц:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <title>Test</title>
</head>
<body>

</body>
</html>

WHATWG HTML Living стандарт определяет , что <html>, <head>и <body>теги могут быть безопасно опущены в большинстве случаев. <meta charset="UTF-8">Тег технически излишний , когда приходит непосредственно с вебом - сервера , выполненным с возможностью отправки кодировки в HTTP - заголовке, хотя он становится полезным , когда ответ HTML сохраняется в .htmlфайл, кэше или веб - архиве. Руководство по стилям HTML / CSS от Google рекомендует опустить все необязательные теги, что приведет к гораздо меньшему количеству шаблонов. World Wide Web Consortium заявляет , что элемент <title>не должен быть пустым:

<!DOCTYPE html>
<title>Test</title>

Смотрите также

  • Директива (программирование)  - языковая конструкция, указывающая, как компилятор должен обрабатывать ввод.
  • Макропроцессор общего назначения  - Макропроцессор, который не привязан к определенному языку или части программного обеспечения или не интегрирован с ним.
  • "Привет, мир!" program  - Традиционная компьютерная программа для начинающих.
  • Библиотека (вычисления)  - Коллекция энергонезависимых ресурсов, используемых компьютерными программами, часто для разработки программного обеспечения.
  • Макро (информатика)  - в информатике, краткое представление шаблона.
  • Препроцессор  - программа, которая обрабатывает ввод для другой программы.
  • Scaffold (программирование)  - метод генерации кода или метод генерации проекта.
  • Фрагмент (программирование)  - небольшая область повторно используемого исходного кода, машинного кода или текста.
  • Обработчик шаблонов  - программное обеспечение, предназначенное для объединения шаблонов с моделью данных для создания результирующих документов.
  • Система веб-шаблонов  - система веб-публикаций, которая позволяет веб-дизайнерам и разработчикам работать с веб-шаблонами для автоматического создания настраиваемых веб-страниц.

использованная литература