Jump to content

Складывание кода

(Перенаправлено из «Сворачивание текста »)
Пример свертывания кода PHP- кода с помощью Vim

кода или Складывание текста , или реже голофрастирование , [1] — это функция некоторых графических пользовательских интерфейсов , которая позволяет пользователю выборочно скрывать («сворачивать») или отображать («разворачивать») части документа. Это позволяет пользователю управлять большими объемами текста, просматривая только те подразделы, которые в данный момент интересны. Обычно он используется с документами, имеющими естественную древовидную структуру, состоящую из вложенных элементов. Другие названия этих функций включают развертывание и свертывание , скрытие кода и структурирование . В Microsoft Word эта функция называется «разборное структурирование».

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

Свертывание кода встречается в текстовых редакторах , редакторах исходного кода и IDE . Структура свертывания обычно соответствует синтаксическому дереву программы, определенному компьютерным языком . Он также может определяться уровнями отступов или указываться явно с использованием внутриполосного маркера (сохраненного как часть исходного кода) или внеполосного.

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

Свертывание данных встречается в некоторых шестнадцатеричных редакторах и используется для структурирования двоичного файла или сокрытия недоступных разделов данных. [2]

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

Самый ранний известный пример свертывания кода в редакторе — NLS . [3] Вероятно, первым широко доступным складным редактором был редактор Structured Programming Facility (SPF) 1974 года для мэйнфреймов IBM 370 , который мог скрывать строки в зависимости от их отступов. Он отображается на терминалах 3270 с символьным отображением. [4] Это было очень полезно для таких многословных языков, как COBOL . Он превратился в Центр повышения производительности интерактивных систем ( ISPF ).

Использовать

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

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

Изложение

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

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

Скрытие шаблонного кода

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

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

Например, в Java для одного частного поля с геттером и сеттером требуется как минимум 3 строки, если каждая находится на отдельной строке:

private String name = null;
public String getName() { return name; }
public void setName(String name) { this.name = name; }

Это расширяется до 10 строк с обычными разрывами строк функций и интервалами между функциями (включая завершающую новую строку):

private String name = null;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

Документация с Javadoc расширяет это до 20 строк:

/**
 * Property <code>name</code>  readable/writable.
 */
private String name = null;

/**
 * Getter for property <code>name</code>
 */
public String getName() {
    return name;
}

/**
 * Setter for property <code>name</code>.
 * @param name
 */
public void setName(String name) {
    this.name = name;
}

Если таких полей много, результатом могут легко стать сотни строк кода с очень небольшим количеством «интересного» контента — свертывание кода может уменьшить его до одной строки для каждого поля или даже до одной строки для всех полей. Кроме того, если все стандартные поля свернуты, а нестандартные поля (где метод получения или установки не просто возвращает или присваивает частное поле) не свернуты, становится легче увидеть основной код.

Свертывание метаданных

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

Метаданные могут быть длинными и, как правило, менее важны, чем данные, которые они описывают. Свертывание метаданных позволяет в первую очередь сосредоточиться на данных, а не на метаданных. Например, длинный список атрибутов в C# можно свернуть вручную следующим образом: [6]

#region Attributes
[Browsable(false)]
[MergableProperty(false)]
[DefaultValue(null)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(MyType))]
[TemplateInstance(TemplateInstance.Single)] 
#endregion
public ITemplate ContentTemplate { get; set; }

Результирующий код отображается как:

Attributes
public ITemplate ContentTemplate { get; set; }

Сворачивание комментариев

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

Комментарии представляют собой форму удобочитаемых метаданных, а длинные комментарии могут нарушить поток кода. Это может быть либо длинный комментарий к короткому разделу кода, например абзац для объяснения одной строки, либо комментарии для генераторов документации , таких как Javadoc или XML Documentation . Свертывание кода позволяет иметь длинные комментарии, но отображать их только при необходимости. В тех случаях, когда длинный комментарий имеет одну строку сводки, например в строках документации Python, сводку все равно можно отобразить, когда раздел свернут, что позволяет просмотреть сводку или подробное описание.

Отображение структуры или сэндвич-кода в структурированном программировании

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

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

Код группировки

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

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

Скрытие устаревшего кода

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

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

Скрытие таблиц исходных данных

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

Конвенции

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

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

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

Синтаксис-зависимый

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

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

На основе отступов

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

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

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

На основе токенов

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

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

Еще одним примечательным признаком является #region ( директивы C# ), соответственно #Region ( директивы Visual Basic ), используемые в Microsoft Visual Studio редакторе кода . Синтаксически они рассматриваются как директивы компилятора , но не влияют на компиляцию.

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

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

Определяется пользователем

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

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

Следующий документ содержит складные жетоны ( {{{ ... }}}):

 Heading 1
 {{{
 Body
 }}}

 Heading 2
 {{{
 Body
 }}}

 Heading 3
 {{{
 Body
 }}}

При загрузке в редактор фальцевания будет показана контурная структура:

 Heading 1
 {{{ ...

 Heading 2
 {{{ ...

 Heading 3
 {{{ ...

Обычно нажимая на {{{ отметки приводят к появлению соответствующего основного текста.

Программное обеспечение с возможностью свертывания кода

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

Одним из первых складных редакторов был STET , редактор, написанный для операционной системы VM/CMS в 1977 году Майком Коулишоу . СТЕТ — текстовый редактор (документации, программ и т.п.), сворачивающий файлы на основе блоков строк; любой блок строк можно свернуть и заменить строкой имени (которая, в свою очередь, может быть частью блока, который затем можно свернуть).

появился складной редактор 1983 году в occam IDE Примерно в , который назывался Inmos Transputer Development System (TDS). [7] , . [8] Редактор «f» (в списке ниже), вероятно, является наиболее нетронутым наследием этой работы.

Исторически на компьютере Macintosh было несколько редакторов исходного кода , которые «сворачивали» части кода с помощью « треугольников раскрытия ». Frontier Программный продукт UserLand представляет собой среду сценариев, обладающую такой возможностью. [9]

Свертывание обеспечивается многими современными текстовыми редакторами, а свертывание на основе синтаксиса или семантики теперь является компонентом многих сред разработки программного обеспечения . Редакторы включают в себя:

Имя Токен Отступ Синтаксис Пользователь
ABAP-редактор Да ? Да ?
SinglePad ? ? Да ?
Анюта ИДЕТ ? Да Да ?
Атом [а] ? Да ? Да
BBEредактировать ? ? Да ?
Кронштейны Плагин Да Да Нет
Коденигде Да Да Да ?
Коденви Да Да Да ?
Код::Блокирует IDE Да Да Да Да
Кубическая IDE Да Да Да Да
КудаТекст ? ? ? ?
Делфи IDE Да ? Да ?
Ткач снов ? ? ? Да
Затмение ? ? Да ?
EditPlus Нет Да Нет Нет
Эмакс Да [б] ? [с] Да [д] Да [и]
EmEditor Профессиональный ? Да Да ?
FlashDevelop IDE ? ? Да ?
гени ? Да Да ?
гедит Да Да Да ?
ISPF ? Да ? Да
ДЖЕД Да Да [ф] ? Нет
jПравить Да Да Да Да
Кейт Да Да Да Да
МАТЛАБ Нет Нет Да Нет
MS Visual Studio Да Да Да Да
NetBeans IDE Да Да Да Да
Блокнот++ ? Да Да Да
Нусфера PHPEd ? ? Да Да
Создатель Qt ? ? Да ?
Ты знаешь Да Да Да ?
СТОЯТЬ [г] ? ? ? ?
ТекстМейт Да Да Да Да
УльтраПравить Нет Нет Да Да
Почему Да Да Да Да
Визуальный эксперт ? ? Да ?
Код Visual Studio Да Да Да Нет
Xcode Да Да Да Да
Отправить студию ? ? ? ?


Другие редакторы

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

См. также

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

Примечания

[ редактировать ]
  1. ^ http://flight-manual.atom.io/using-atom/sections/folding/
  2. ^ Сворачивание на основе токенов реализуется с помощью свертывания второстепенного режима . Также можно использовать второстепенные режимы структуры и выделения для секционирования исходных кодов программы.
  3. ^ Можно использовать set-selective-display функция в Emacs для скрытия строк в зависимости от уровня отступа, как предложено в примечании к универсальному коду .
  4. ^ Синтаксически-зависимое свертывание поддерживается в контура и выделения режимах . для специального описания - синтаксисы; второстепенным режимом Hideshow для некоторых языков программирования; а также сворачивания семантических тегов и второстепенным режимом senator-fold-tag команда для синтаксисов, поддерживаемых семантикой (компонент CEDET) , а также режимом документа для комментариев JavaDoc или Doxygen , режимом TeX-fold-mode , sgml-fold-element команда, nxml-outln в соответствующих режимах, зависящих от языка, и, возможно, в других режимах для определенных синтаксисов. стандартный второстепенный режим простого контура Иногда для имитации свертывания на основе синтаксиса используется , ср. использование его его в исходном коде Emacs Lisp с правильными отступами, использование (см. в конце страницы) для HTML с правильными отступами. Несколько механизмов складывания объединены интерфейсомfold-dwim . См. также CategoryHideStuff .
  5. ^ Свертывание выбранных пользователем регионов в Emacs реализуется с помощью hide-region-hide команда.
  6. ^ set_selective_display Функция может использоваться для скрытия строк с отступом, превышающим указанную величину.
  7. ^ STET, возможно, был первым текстовым редактором, поддерживавшим свертывание. [ нужна ссылка ]
  1. ^ Саймон Говен, Омид Баньясад, «Прозрачность, голофрастирование и автоматическая компоновка, применяемые к структурам управления для языков программирования визуальных потоков данных», в материалах симпозиума ACM 2006 года по визуализации программного обеспечения , стр. 67–75
  2. ^ «HxD — бесплатный шестнадцатеричный редактор и редактор дисков» . мх-связь . Проверено 30 апреля 2007 г.
  3. ^ Марсель (9 июля 2012 г.), «Мать всех демонстраций, представленная Дугласом Энгельбартом (1968)» , YouTube , получено 29 декабря 2019 г.
  4. ^ Сен-Флур, Жильбер (25 июня 1998 г.). «История ИСПФ» . Планета МВС . Проверено 27 октября 2015 г.
  5. ^ Этвуд 2008 .
  6. ^ Роб (19 марта 2014 г.). «Это интересно, потому что я больше склонен использовать #region, чтобы СКРЫТЬ ДЕРЬМО (XML-документацию и т. д., длинный список атрибутов и т. д.), чтобы было легче увидеть важный код…» . Проблема со сворачиванием кода . Обсуждение ужасов кодирования. Архивировано из оригинала 6 августа 2020 г.
  7. ^ Североамериканская группа пользователей транспьютеров. Конференция (2-я: 1989 г.: Дарем, Северная Каролина) (1990 г.). Исследования и применения транспьютеров, 2: NATUG-2, материалы Второй конференции Североамериканской группы пользователей транспьютеров, 18-19 октября 1989 г., Дарем, Северная Каролина . Совет, Джон А., Университет Дьюка. Амстердам: IOS Press. п. 85. ИСБН  9051990278 . OCLC   35478471 . {{cite book}}: CS1 maint: числовые имена: список авторов ( ссылка )
  8. ^ Корми, Дэвид (1986). «Техническое примечание INMOS 03 — Начало работы с TDS» (PDF) . Transputer.net . Проверено 19 июля 2019 г.
  9. ^ «Аутлайнеры.com» . Архивировано из оригинала 23 декабря 2006 г. Проверено 27 декабря 2006 г.
  10. ^ LEXX - Программируемый структурированный редактор IBM Journal of Research and Development , Том 31, № 1, 1987, номер заказа IBM Reprint G322-0151
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 05b93bbcdefb502c10093f5ebb80b466__1717140360
URL1:https://arc.ask3.ru/arc/aa/05/66/05b93bbcdefb502c10093f5ebb80b466.html
Заголовок, (Title) документа по адресу, URL1:
Code folding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)