Jump to content

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

(Перенаправлено из фрагментов кода )
Пример фрагмента кода.

Фрагмент — это программный термин, обозначающий небольшую область повторно используемого исходного кода , машинного кода или текста. Обычно это формально определенные оперативные единицы, которые можно включить в более крупные программные модули . Управление фрагментами является функцией некоторых текстовых редакторов , редакторов исходного кода программ , 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. Предполагая слабую типизацию и не обращая внимания на конфликт имен, это представлено кодом:

temp = x
x = y
y = temp

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

temp = foo
foo = bar
bar = temp

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

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

temp = $1
$1 = $2
$2 = temp

Конвенции

[ редактировать ]

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

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

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

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


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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

Hello {%first_name%} {%last_name%},

Your shipment of {%item%} is now ready to pick up.

Thanks {%first_name%}!

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

Hello ${1:first_name} ${2:last_name},

Your shipment of ${3:item} is now ready to pick up.

Thanks ${4:first_name}!

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

См. также

[ редактировать ]
  • Автозаполнение — вычислительная функция, предсказывающая окончание слова, которое набирает пользователь.
  • База кода — коллекция исходного кода, используемая для создания системы, приложения или компонента.
  • Рефакторинг кода – реструктуризация существующего компьютерного кода без изменения его внешнего поведения.
  • Управление контентом – процесс управления информацией или опытом, построенный с учетом аудитории.
  • Pastebin - тип службы хостинга онлайн-контента, где пользователи могут хранить простой текст.
  • Scrapbook (Mac OS) – программное обеспечение для компьютера Macintosh.
  • Контроль версий – деятельность по управлению версиями файлов.
  • Веб-виджет — апплет, предназначенный для использования на веб-страницах.
  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. ^ Его Величество ЛЕ, ТРИЕТ; ЧЕН, ХАО; АЛИ БАБАР, МУХАММАД (2021). «Глубокое обучение для моделирования и генерации исходного кода». Обзоры вычислительной техники ACM . 53 (3). Университет Аделаиды: 1–38. arXiv : 2002.05442 . дои : 10.1145/3383458 . S2CID   211096967 .
  4. ^ «GitHub представляет новый инструмент искусственного интеллекта, который дает рекомендации по кодированию» . ТехКранч . Проверено 25 июля 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bfc4e90b0176e2829fda9c8729d7f0dd__1721959740
URL1:https://arc.ask3.ru/arc/aa/bf/dd/bfc4e90b0176e2829fda9c8729d7f0dd.html
Заголовок, (Title) документа по адресу, URL1:
Snippet (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)