stringtranslate.com

Шаблонный код

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

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

Также возможно переместить шаблонный код в абстрактный класс , чтобы его могли наследовать любые конкретные классы . Другим вариантом было бы переместить его в подпрограмму, чтобы его можно было вызывать вместо дублирования.

Источник

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

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

Преамбула

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

#!/usr/bin/perl использовать предупреждения ; использовать строгий ;  

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

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

#ifndef МОЙИНТЕРФЕЙС_H #define МОЙИНТЕРФЕЙС_H...#endif

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

В Java и подобных платформах

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

Ява

public class Pet { private String name ; private Person owner ;          public Pet ( Имя строки , Владелец человека ) { this.name = имя ; this.owner = владелец ; }             public String getName () { return name ; }       public void setName ( имя строки ) { this.name = имя ; }         public Person getOwner () { return owner ; }       public void setOwner ( Person owner ) { this . owner = owner ; } }        

Большая часть шаблона в этом примере существует для выполнения требований JavaBeans . Если бы имя переменной и владелец были объявлены как public , методы доступа и мутатора не понадобились бы.

В Java 14 для борьбы с этой проблемой были добавлены классы записей. [4] [5] [6]

Чтобы сократить количество шаблонного кода, было разработано много фреймворков, например Lombok для Java. [7] Тот же код, что и выше, автоматически генерируется Lombok с использованием аннотаций Java , что является формой метапрограммирования :

@AllArgsConstructor @Getter @Setter public class Pet { private String name ; private Person owner ; }         

Скала

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

класс случая Pet ( имя переменной : String , владелец переменной : Person )       

С#

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

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

Начиная с C# 9.0 появилась возможность использовать записи, которые автоматически генерируют классы со свойствами:

публичная запись Домашнее животное ( строка Имя , Лицо Владелец );     

Метод шаблона

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

HTML

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

<!DOCTYPE html> < html  lang = "en" > < head >  < meta  charset = "UTF-8" />  < title > Тест </ title > </ head > < body ></ тело > </ html >

WHATWG HTML Living Standard определяет, что теги<html> , <head>и <body>могут быть безопасно опущены в большинстве случаев. [9] Тег технически избыточен, когда поступает напрямую с веб-сервера, настроенного на отправку кодировки символов в заголовке HTTP, хотя он становится полезным, когда ответ HTML сохраняется в файле, кэше или веб-архиве. [10] Руководство по стилю HTML/CSS от Google рекомендует опускать все необязательные теги, [11] что приводит к гораздо меньшему количеству шаблонов. Консорциум Всемирной паутины утверждает, что элемент не должен быть пустым: [12]<meta charset="UTF-8">.html <title>

<!DOCTYPE html> < title > Тест </ title >

Питон

В Python следующий шаблонный код можно использовать для изменения того, может ли код выполняться только в контексте модуля или вне его.

если  __name__  ==  '__main__' :  # Все, что здесь размещено, никогда не будет выполнено в контексте модуля.  passесли  __name__  !=  '__main__' :  # Все, что здесь размещено, будет выполнено только в контексте модуля.  pass

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

Ссылки

  1. ^ Лэммель, Ральф; Джонс, Саймон Пейтон (2003). «Scrap your boilerplate: a practical design pattern for generic programming». Труды Международного семинара ACM SIGPLAN 2003 года по типам в проектировании и реализации языков . TLDI '03. Нью-Йорк: ACM . С. 26–37. doi :10.1145/604174.604179. ISBN 9781581136494. S2CID  9472305.
  2. ^ "Boilerplate". Dictionary.com . Получено 2018-01-27 .
  3. ^ "Boilerplate". Merriam-Webster . Получено 27.01.2018 .
  4. ^ "Классы записей". docs.oracle.com .
  5. ^ "JEP 395: Запись" . openjdk.org .
  6. ^ Эванс, Бен (01.11.2020). «Записи приходят в Java». blogs.oracle.com .
  7. ^ Франкель, Николас (2009-12-07). "Lombok сокращает ваш шаблонный код". DZone.com . Получено 2017-08-02 .
  8. ^ Мартин Велес; Дун Цю; Ю Чжоу; Эрл Т. Барр; Чжэндун Су (5 февраля 2015 г.). «О лексической различимости исходного кода [было: Исследование «пшеницы» и «мякины» в исходном коде]». arXiv : 1502.01410 [cs].
  9. ^ "Стандарт HTML - Синтаксис HTML - Необязательные теги". WHATWG . 2017-05-05 . Получено 2017-05-05 .
  10. ^ "Требуется ли метатег charset в HTML5?". stackoverflow.com . Получено 05.05.2017 .
  11. ^ "Руководство по стилю HTML/CSS от Google". google.github.io . Получено 05.05.2017 .
  12. ^ "HTML-страница имеет непустой заголовок". www.w3.org . Получено 22 июля 2021 г. .