Шаблонный код
Эта статья нуждается в дополнительных ссылок для проверки . ( май 2017 г. ) |
В компьютерном программировании шаблонный код или просто шаблонный код — это разделы кода, которые повторяются в нескольких местах практически без изменений. При использовании языков, которые считаются многословными , программисту приходится писать много шаблонного кода для выполнения лишь незначительной функциональности. [1]
Потребность в шаблонном коде можно уменьшить с помощью механизмов высокого уровня, таких как метапрограммирование (при котором компьютер автоматически записывает необходимый шаблонный код или вставляет его во время компиляции ), соглашение по конфигурации (которое обеспечивает хорошие значения по умолчанию, уменьшая необходимость указывать программу). детали в каждом проекте) и проектирование на основе моделей (при котором используются модели и генераторы кода, что устраняет необходимость в ручном шаблонном коде).
Также возможно переместить шаблонный код в абстрактный класс , чтобы его можно было унаследовать любым количеством конкретных классов . Другой вариант — переместить его в подпрограмму, чтобы его можно было вызывать, а не дублировать.
Происхождение [ править ]
Термин возник из газетного бизнеса. Колонки и другие материалы, распространяемые печатными синдикатами , рассылались газетам-подписчикам в виде подготовленных печатных форм . Из-за их сходства с металлическими пластинами, используемыми при изготовлении котлов , они стали известны как «котловые плиты», а полученный в результате текст — «шаблоновый текст». Поскольку истории, которые распространялись через стандартные шаблоны, обычно представляли собой « вставки », а не «серьезные» новости, этот термин стал синонимом неоригинального, повторяющегося текста. [2] [3]
Родственный термин — «код бухгалтерского учета» , относящийся к коду, который не является частью бизнес-логики , но чередуется с ней, чтобы поддерживать обновление структур данных или обрабатывать второстепенные аспекты программы.
Преамбула [ править ]
языка Одна из форм шаблона состоит из объявлений, которые, хотя и не являются частью логики программы или основного синтаксиса , добавляются в начало исходного файла по привычке. Следующий пример Perl демонстрирует шаблон:
#!/usr/bin/perl
использовать предупреждения ;
используйте строгий ;
Первая строка — это shebang , который идентифицирует файл как сценарий Perl, который можно выполнить непосредственно из командной строки в системах Unix/Linux. Два других — это прагмы, включающие предупреждения и строгий режим, которые диктуются модным стилем программирования Perl .
Следующий пример представляет собой шаблон языка программирования C/C++ . #include
сторожить .
#ifndef MYINTERFACE_H
#define MYINTERFACE_H
...
#endif
При этом проверяется и устанавливается глобальный флаг, сообщающий компилятору, включен ли уже файл myinterface.h. Поскольку в компиляции модуля может участвовать множество взаимозависимых файлов, это позволяет избежать многократной обработки одного и того же заголовка (что может привести к ошибкам из-за нескольких определений с одним и тем же именем).
На Java и подобных платформах [ править ]
В Java программах классы DTO часто предоставляют методы для получения и установки переменных экземпляра. Определения этих методов часто можно рассматривать как шаблонные. Хотя код будет варьироваться от одного класса к другому, он достаточно стереотипен по структуре, поэтому его лучше генерировать автоматически, чем писать вручную. Например, в следующем классе Java , представляющем домашнее животное, почти весь код является шаблонным, за объявлений Pet исключением , name и Owner :
Ява [ править ]
общественный класс Pet {
частное строки имя ;
частное лицо- собственник ;
public Pet ( строковое имя , лица владелец ) {
this . имя = имя ;
этот . владелец = владелец ;
}
Public String getName () {
возвращенное имя ;
}
Public void setName ( строковое имя ) {
this . имя = имя ;
}
Public Person getOwner () {
вернуть владельца ;
}
Public void setOwner ( человека Владелец ) {
this . владелец = владелец ;
}
}
Большая часть шаблона в этом примере существует для удовлетворения требований JavaBeans . переменной Если бы имя и владелец были объявлены как public , методы доступа и мутатора не потребовались бы.
В Java 14 для решения этой проблемы были добавлены классы записей. [4] [5] [6]
Чтобы уменьшить количество шаблонов, было разработано множество фреймворков, например Lombok для Java. [7] Тот же код, что и выше, автоматически генерируется Lombok с использованием аннотаций Java , что является формой метапрограммирования :
@AllArgsConstructor
@Getter
@Setter
public class Pet {
частной строки имя ;
частное лицо- собственник ;
}
Скала [ править ]
В некоторых других языках программирования можно добиться того же с меньшим количеством шаблонов, если язык имеет встроенную поддержку таких распространенных конструкций. Например, эквивалент приведенного выше кода Java можно выразить на Scala, используя всего одну строку кода:
случая класс Pet ( переменной имя : String , переменной владелец : Person )
С# [ править ]
Или в С#, используя автоматические свойства с полями поддержки, созданными компилятором:
общественный класс Pet
{
общественная строка Name { get ; набор ; }
публичного лица Владелец { get ; набор ; }
}
Начиная с C# 9.0 появилась возможность использовать записи, которые автоматически генерируют классы со свойствами:
общедоступная запись Pet ( строка Имя , Владелец ) ;
Шаблон метода [ править ]
Помимо объявлений, методы ООП-языков также увеличивают количество шаблонов. Исследование популярных проектов Java, проведенное в 2015 году, показывает, что 60% методов можно однозначно идентифицировать по появлению 4,6% их токенов, в результате чего оставшиеся 95,4% шаблонов не имеют отношения к логике. Исследователи полагают, что этот результат применим к подпрограммам процедурных языков в целом. [8]
HTML [ править ]
В HTML следующий шаблон используется в качестве базового пустого шаблона и присутствует на большинстве веб-страниц:
<!DOCTYPE html>
< html lang = "en" >
< head >
< Meta charset = "UTF-8" />
< title > Test </ title >
</ head >
< body >
</ body >
</ html >
Стандарт жизни HTML WHATWG определяет, что <html>
, <head>
и <body>
в большинстве случаев теги можно безопасно опускать. [9] <meta charset="UTF-8">
технически избыточен, когда поступает непосредственно с веб-сервера, настроенного на отправку кодировки символов в заголовке HTTP, однако он становится полезным, когда ответ HTML сохраняется в .html
файл, кэш или веб-архив. [10] Руководство по стилю HTML/CSS Google рекомендует опускать все необязательные теги. [11] в результате получается гораздо меньше шаблонов. Консорциум Всемирной паутины утверждает, что элемент <title>
не должно быть пустым: [12]
html
<title> Тест > </title> < ! DOCTYPE
Питон [ править ]
В Python следующий шаблонный код можно использовать для изменения того, может ли код выполняться только в контексте модуля или вне его.
if __name__ == '__main__' :
# Все, что размещено здесь, никогда не будет выполнено в контексте модуля.
pass
if __name__ != '__main__' :
# Все, что размещено здесь, будет выполняться только в контексте модуля.
проходить
См. также [ править ]
- Директива (программирование) — языковая конструкция, определяющая, как компилятор должен обрабатывать вводимые данные.
- Макропроцессор общего назначения — макропроцессор, который не привязан и не интегрирован с конкретным языком или частью программного обеспечения.
- "Привет, мир!" программа - традиционный первый пример языка программирования.
- Библиотека (вычисления) - совокупность ресурсов, используемых для разработки компьютерной программы.
- Макрос (информатика) - правило замены заданного ввода заданным выходом.
- Препроцессор — программа, обрабатывающая входные данные для другой программы.
- Scaffold (программирование) - метод генерации кода или метод генерации проекта.
- Фрагмент (программирование) — небольшая область повторно используемого исходного кода, машинного кода или текста.
- Процессор шаблонов — программное обеспечение, предназначенное для объединения шаблонов с моделью данных для создания результирующих документов.
- Система веб-шаблонов - Система веб-публикаций.
Ссылки [ править ]
- ^ Ламмель, Ральф; Джонс, Саймон Пейтон (2003). «Откажитесь от шаблонного шаблона: практический шаблон проектирования для универсального программирования» . Материалы международного семинара ACM SIGPLAN 2003 г. по типам в проектировании и реализации языков . ТЛДИ '03. Нью-Йорк: ACM . стр. 26–37. дои : 10.1145/604174.604179 . ISBN 9781581136494 . S2CID 9472305 .
- ^ «Шаблон» . Словарь.com . Проверено 27 января 2018 г.
- ^ «Шаблон» . Мерриам-Вебстер . Проверено 27 января 2018 г.
- ^ «Рекордные занятия» . docs.oracle.com .
- ^ «JEP 395: Запись» . openjdk.org .
- ^ Эванс, Бен (01 ноября 2020 г.). «Рекорды приходят на Яву» . blogs.oracle.com .
- ^ Франкель, Николас (07 декабря 2009 г.). «Ломбок сокращает ваш шаблонный код» . DZone.com . Проверено 2 августа 2017 г.
- ^ Мартин Велес; Донг Цю; Ю Чжоу; Эрл Т. Барр; Чжендун Су (5 февраля 2015 г.). «О лексической различимости исходного кода [было: Исследование «пшеницы» и «мякины» в исходном коде]». arXiv : 1502.01410 [ CS ].
- ^ «Стандарт HTML — Синтаксис HTML — Дополнительные теги» . ЧТОРГ . 05 мая 2017 г. Проверено 5 мая 2017 г.
- ^ «Требуется ли метатег charset для HTML5?» . stackoverflow.com . Проверено 5 мая 2017 г.
- ^ «Руководство по стилю Google HTML/CSS» . google.github.io . Проверено 5 мая 2017 г.
- ^ «HTML-страница имеет непустой заголовок» . www.w3.org . Проверено 22 июля 2021 г.