stringtranslate.com

Фрагмент (программирование)

Пример фрагмента кода.

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

Определение

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

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

Обзор

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

Фрагменты в текстовых редакторах

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

Фрагменты в IDE

Некоторые программные приложения, такие как Eclipse , NetBeans и Visual Studio от Microsoft (использующие фрагменты, вдохновленные TextMate ), а также другие IDE включают встроенные части структуры для упрощения кодирования.

Другие приложения, такие как Macromedia Dreamweaver, также используют эти фрагменты кода для веб-разработки .

Фрагменты в JIT-компиляторах

Компиляторы Just-in-time ( JIT ) могут «склеивать» предварительно скомпилированные разделы кода в более длинные сегменты объектного кода / машинного кода . Это значительно сокращает время интерпретации и одновременно ускоряет выполнение.

Анимированный пример, демонстрирующий использование фрагмента в PowerShell ISE

Фрагменты в оболочках

Фрагменты могут использоваться внутри интерфейсов командной строки, таких как bash, zsh ( GNU Linux /Unix-like) или powershell ( MS Windows ). Такие функции, как автодополнение и замена заполнителей, могут поддерживаться или не поддерживаться.

Пример

Рассмотрим процесс обмена значениями двух переменных x и y. Предполагая слабую типизацию и не беспокоясь о конфликте имен, это представлено кодом:

темп = хх = уу = температура

При вставке фрагмента программисту предлагается ввести значения двух параметров. Предполагая, что это type fooи bar, которые являются фактическими именами переменных, которые они хотят поменять местами, это даст код:

темп = фуфу = барбар = температура

Если фрагмент впоследствии будет изменен, например, для использования __tempвместо temp, это не изменит уже вставленный код, но будет использовано при последующих вставках фрагмента.

Фрагмент этого можно представить так:

темп = 1 доллар1 доллар = 2 доллара$2 = временный

Конвенции

В дополнение к базовым возможностям управления, описанным ранее, функции управления фрагментами можно классифицировать в соответствии с объемом интерактивности между фрагментами и текстовым редактором или приложением, в котором они размещены.

Эти группы функций фрагментов включают в себя:

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

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


Заполнители фрагментов

Заполнители — это элементы внутри фрагмента, которые оставлены для предоставления пользователем или другим внешним процессом. Значения для заполнителей не определяются, пока текст фрагмента не будет вставлен во время сеанса редактирования.

Заполнители могут иметь специальный синтаксис разметки , который позволяет редактору определять границы заполнителей относительно остального текста в текущем буфере редактирования.

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

Идентификаторы заполнителей

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

В следующем примере используются идентификаторы first_name, last_name, и item:

Привет {% имя %} {% фамилия %} , Ваш груз {% item %} теперь готов к отправке.Спасибо {% first_name %} !

Пример фрагмента в синтаксисе TexMate :

Привет ${ 1 : имя } ${ 2 : фамилия } ,  Ваш  груз  стоимостью $ { 3 : item } теперь готов к отправке .       Спасибо ${ 4 : first_name } ! 

Дублирование заполнителя

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

Трансформация заполнителя

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

Возможности программирования сниппетов

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

Обычный текст

Хотя простой текст является основополагающей функцией, включенной даже в приложения, поддерживающие только непрограммируемые «статичные» фрагменты, программируемые фрагменты также используются для работы с простым текстом.

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

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

Константы и переменные

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

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

Интерпретируемый код

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

Альтернативы

Самая простая альтернатива фрагментам кода — это подпрограммы в библиотеках. Подпрограммы могут быть включены в повторно используемую библиотеку программного обеспечения и совместно использоваться несколькими проектами программирования.

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

Однако недостатком этого подхода является то, что сложнее запомнить шаблон или документацию.

Помощь с программным обеспечением

В 2021 году появились некоторые сложные инструменты глубокого обучения , которые могут помочь вывести определенную функциональность из текста, читаемого человеком, и сгенерировать соответствующие фрагменты исходного кода (например, GitHub Copilot ). [3] [4]

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

Ссылки

  1. ^ "Gedit/Plugins/Snippets". Архивировано из оригинала 2012-08-25 . Получено 2010-01-09 .Пример функции в редакторе Gedit.
  2. ^ Ким, Мирёнг; Бергман, Лоуренс; Лау, Тесса; Ноткин, Дэвид (2004). «Этнографическое исследование практик копирования и вставки в программировании OOPL» (PDF) . Труды: 2004 Международный симпозиум по эмпирической программной инженерии, ISESE 2004: 19–20 августа 2004 г., Редондо-Бич, Калифорния . Лос-Аламитос, Калифорния: IEEE . стр. 83–92. ISBN 978-0-7695-2165-7. OCLC  326620442. Архивировано из оригинала (PDF) 19 октября 2016 г. . Получено 18 октября 2016 г. Для каждого экземпляра C&P мы также отметили связь между скопированным фрагментом кода и кодом в другом месте кодовой базы.
  3. ^ HM LE, TRIET; CHEN, HAO; ALI BABAR, MUHAMMAD (2021). «Глубокое обучение для моделирования и генерации исходного кода». ACM Computing Surveys . 53 (3). Университет Аделаиды: 1–38. arXiv : 2002.05442 . doi : 10.1145/3383458. S2CID  211096967.
  4. ^ "GitHub представляет новый инструмент ИИ, который дает рекомендации по кодированию". TechCrunch . 29 июня 2021 г. Получено 25 июля 2021 г.