Из Википедии, бесплатной энциклопедии
  (Перенаправлено из свертывания текста )
Перейти к навигации Перейти к поиску
Пример сворачивания кода на PHP с vim .

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

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

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

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

История [ править ]

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

Используйте [ редактировать ]

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

Наброски [ править ]

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

Скрытие шаблонного кода [ править ]

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

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

частная  строка  name  =  null ; общедоступная  строка  getName ()  {  возвращаемое  имя ;  } public  void  setName ( имя строки  ) { this . name = name ; }     

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

частная  строка  name  =  null ;общедоступная  строка  getName ()  {  возвращаемое  имя ; }public  void  setName ( String  name )  {  this . name  =  name ; }

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

/ ** * Свойство <code> name </code> доступно для чтения / записи. * / private  String  name  =  null ;/ ** * Получатель для свойства <code> name </code> * / public  String  getName ()  {  return  name ; }/ ** * Установщик для свойства <code> name </code>. * @param name * / public  void  setName ( String  name )  {  this . name  =  name ; }

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

Сворачивание метаданных [ править ]

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

#region Attributes [Browsable (false)] [MergableProperty (false)] [DefaultValue (null)] [PersistenceMode (PersistenceMode.InnerProperty)] [TemplateContainer (typeof (MyType))] [TemplateInstance (TemplateInstance.Single)]  #endregion public  ITemplate  ContentTemplate {  get  {  return  _temp ;  }  установить  {  _temp  =  значение ;  } }

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

Атрибутыобщедоступный ITemplate ContentTemplate{ получить {return _temp; } установить {_temp = значение; }}

Сворачивание комментариев [ править ]

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

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

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

Код группировки [ править ]

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

Скрытие устаревшего кода [ править ]

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

Скрытие таблиц исходных данных [ править ]

Соглашения [ править ]

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

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

Зависит от синтаксиса [ править ]

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

На основе отступов [ править ]

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

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

На основе токенов [ править ]

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

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

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

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

Указано пользователем [ править ]

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

Примеры [ править ]

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

 Заголовок 1 {{{ Тело }}} Заголовок 2 {{{ Тело }}} Заголовок 3 {{{ Тело }}}

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

 Заголовок 1 {{{... Заголовок 2 {{{... Заголовок 3 {{{...

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

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

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

Раскладной редактор появился в Оккама IDE около 1983, которая была названа система Inmos транспьютерных развития (TDS) [6] , . [7] Редактор "f" (в списке ниже), вероятно, является наиболее сохранившимся наследием этой работы.

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

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


Другие редакторы [ править ]

  • aoeui, редактор, оптимизированный для Дворжака
  • Программное обеспечение Author-it для корпоративной разработки и управления компонентным контентом
  • Bluefish
  • Delphi
  • Emacs
  • f (псевдоним xf, Winf, Winf32)
  • Складной текстовый редактор
  • GFA BASIC
  • Блокнот GridinSoft
  • IntelliJ IDEA (и другая IDE JetBrains )
  • Основной доклад
  • Комодо Править
  • Kwrite
  • Лео
  • LEXX / LPEX (редактор OED ) [9]
  • MonoDevelop
  • NoteTab Pro
  • Падре
  • Текстовый редактор RJ
  • Смултрон
  • Редактор Hessling
  • Visual Studio
  • WinShell (с версии 3.30)
  • XEDIT (однако его сворачивание осуществляется скриптами)
  • Зевс

Заметки [ править ]

  1. ^ http://flight-manual.atom.io/using-atom/sections/folding/
  2. ^ Сворачивание на основе токенов реализуется второстепенным режимом сворачивания . Можно также использоватьрежимы схемы и полного второстепенного режима для разделения исходных текстов программ.
  3. ^ Можно использоватьset-selective-displayфункцию в Emacs, чтобы скрыть строки на основе уровня отступа, как это предлагается впримечании о свертывании универсального кода .
  4. ^ Зависящее от синтаксиса сворачивание поддерживаетсярежимами контура и спуска для специальных выделенныхсинтаксисов контура ; в hideshow режиме малой для некоторых языков программирования; такжевторостепенным режимом семантического сворачивания тегов иsenator-fold-tagкомандой для синтаксисов, поддерживаемых семантикой (компонент CEDET) , а также doc-mode длякомментариев JavaDoc или Doxygen , TeX-fold-mode ,sgml-fold-elementcommand, nxml- превзойтибиблиотека в соответствующих языковых режимах и, возможно, в других режимах для определенных синтаксисов. Иногда стандартный второстепенный режим простой схемы используется для имитации сворачивания на основе синтаксиса, ср. использование его в правильно отступе исходного кода Emacs Lisp, то использование его (см в конце страницы) для правильного отступа HTML. Несколько механизмов складывания объединены интерфейсом fold-dwim . См. Также CategoryHideStuff .
  5. ^ Сворачивание выбранных пользователем регионов в Emacs осуществляетсяhide-region-hideкомандой.
  6. ^ Функция может быть использована для скрытия строкотступом за определенную сумму.set_selective_display
  7. ^ STET, возможно, был первым текстовым редактором, который поддерживал сворачивание [ необходима ссылка ]

См. Также [ править ]

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

Ссылки [ править ]

  1. ^ «Сворачивание данных в шестнадцатеричном редакторе HxD (перечислено как функция RAM-Editor)» . Проверено 30 апреля 2007 . CS1 maint: discouraged parameter (link)
  2. The Mother of All Demos, представленная Дугласом Энгельбартом (1968) , получено 29 декабря 2019 г.
  3. ^ «История ISPF» . Проверено 27 октября 2015 .
  4. ^ Этвуд 2008 .
  5. ^ Сообщение № 31 , Роб, июль 2008 г.
  6. ^ Североамериканская группа пользователей Transputer. Конференция (2: 1989: Дарем, Северная Каролина) (1990). Транспьютерные исследования и приложения, 2: NATUG-2, материалы Второй конференции Североамериканской группы пользователей транспьютеров, 18-19 октября 1989 г., Дарем, Северная Каролина . Правление, Джон А., Университет Дьюка. Амстердам: IOS Press. п. 85. ISBN 9051990278. OCLC  35478471 .
  7. ^ Корми, Дэвид (1986). «Техническое примечание 03 INMOS - Начало работы с TDS» (PDF) . transputer.net . Проверено 19 июля 2019 .
  8. ^ "Outliners.com" . Архивировано из оригинала на 2006-12-23 . Проверено 27 декабря 2006 . CS1 maint: discouraged parameter (link)
  9. ^ LEXX - Программируемый структурированный редактор IBM Journal of Research and Development , Том 31, № 1, 1987, номер заказа на переиздание IBM G322-0151
  • Этвуд, Джефф (6 июля 2008 г.). «Проблема сворачивания кода» . Coding Horror - критика сворачивания кода, подробные комментарии по использованию. CS1 maint: discouraged parameter (link) CS1 maint: postscript (link)

Внешние ссылки [ править ]

  • Что такое фальцевальный редактор? Автор feредакции.
  • Описание редактора фальцовки, используемого в occam .