stringtranslate.com

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

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

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

Определение

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

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

Обзор

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

Сниппеты в текстовых редакторах

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

Фрагменты в IDE

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

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

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

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:

Здравствуйте , {% first_name %} {% Last_name %} , Ваша партия {% item %} теперь готова к выдаче.Спасибо {% first_name %} !

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

Здравствуйте, ${ 1 : first_name } ${ 2 : Last_name } ,  Ваш  груз  стоимостью $ { 3 : item } готов к выдаче . _       Спасибо ${ 4 : first_name } ! 

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

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

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

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

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

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

Простой текст

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ «Gedit/Плагины/Фрагменты». Архивировано из оригинала 25 августа 2012 г. Проверено 9 января 2010 г.Пример функции в редакторе 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, ТРИЕТ; ЧЕН, ХАО; АЛИ БАБАР, МУХАММАД (2021). «Глубокое обучение для моделирования и генерации исходного кода». Обзоры вычислительной техники ACM . Университет Аделаиды. 53 (3): 1–38. arXiv : 2002.05442 . дои : 10.1145/3383458. S2CID  211096967.
  4. ^ «GitHub представляет новый инструмент искусственного интеллекта, который дает предложения по кодированию» . ТехКранч . Проверено 25 июля 2021 г.