Java эквивалентно #region в C #


489

Я хочу использовать регионы для свертывания кода в Eclipse ; как это можно сделать в Java?

Пример использования в C # :

#region name
//code
#endregion

@MichaelLaVoie: ответ был удален. Есть ли шанс, что он был перенесен на другой сайт SE?
Адам Паркин

1
programmers.stackexchange.com/questions/53086/… кажется похожим по духу.
Адам Паркин

Я присоединился к вечеринке поздно. Я согласен с И.Кашефом, что есть и другие варианты, на которые текущий избранный ответит. Ответ Якуба Ахмада спас мне жизнь. Мне не нужно было загружать Intelligent IDE. Я скачал упомянутый плагин CoffeeBytes из комментария cking24343, применил конфигурацию 'null n void' и хорошо работал в Luna. Вам нужно перезапустить после применения конфигурации
Maximus Decimus

3
начать //region [Description] и закончить//endregion
Амир Зиарати

Ответы:


216

Там нет такого стандартного эквивалента. Некоторые IDE, например Intellij или Eclipse, могут сворачиваться в зависимости от используемых типов кода (конструкторы, импорт и т. Д.), Но ничего подобного нет #region.


30
На самом деле это может быть достигнуто. Если вы прокрутите вниз по этому сообщению, «Якуб Ахмад» объяснит, как получить эту функциональность. Также здесь есть ссылка ( kosiara87.blogspot.com/2011/12/… ), которая показывает, как добавить ее в существующую среду затмения ... чрезвычайно полезно!
cking24343

14
Конечно. Но нет ничего стандартного . Он выполняется в среде IDE, а не с языковой (или текстовой) конструкцией
Брайан Агнью,

2
@ lKashef - так что же тогда является стандартным эквивалентом? Все, что указано ниже, относится к конкретной IDE, не так ли?
Брайан Агнью

4
@BrianAgnew, ОП не упомянул ничего о стандартах, вместо этого он просто хочет иметь возможность иметь блоки, подобные регионам, в своем коде. Например, вы сказали «но нет ничего лучше #region». в IDEA, например, // region .. // endregion работает точно так же, как #region. Во-первых, стандартного способа сделать это вообще не существует, поскольку это зависит от самой IDE или плагина. Разработчики с опытом работы в Microsoft всегда будут видеть MS Visual Studio как «IDE», но на самом деле это всего лишь один из вариантов, а другая IDE может реализовывать или не реализовывать такую ​​функциональность.
Мазен Элькашеф

4
@BrianAgnew, я почти сдался, пока не увидел ответы других людей, которые помогли больше, чем ваши. Серьезно, никаких неприятных ощущений здесь нет. Мы все здесь, чтобы учиться и делиться своими знаниями, и я констатирую тот факт, что я был введен в заблуждение вашим ответом, возможно, он был удачным еще в 2010 году, но не сегодня. Я надеюсь, вы поняли мою точку зрения.
Мазен Элькашеф

476

Jet Brains IDEA имеет эту функцию. Вы можете использовать горячие клавиши для этого (Ctrl + Alt + T). Это просто особенность ИДЕИ.

Регионы там выглядят так:

//region Description

Some code

//endregion

3
Спасибо за это! Отлично работает на Android Studio.
rogcg

2
Вопрос явно требует решения для Eclipse.
Дункан Джонс

5
@Duncan 1. Ничего плохого, чтобы показать людям, что есть альтернативы. 2. Я гуглю для регионов под Intellij и нашел его.
BHuelse

2
В Linux эта горячая клавиша запускает терминал
user1209216

1
Только что попробовал, и кажется, что IntelliJ поддерживает и вложенные регионы! Жаль, что это не стандартно.
Грубер

209

С Android Studio попробуйте это:

//region VARIABLES
private String _sMyVar1;
private String _sMyVar2;
//endregion

Осторожно: без пробела после // региона ...

И вы получите:


Прошел все ответы и понял, так как Android Studio основана на IntelliJ, то это должно быть поддержано. хорошая вещь, чтобы указать на это, хотя!
серин

5
Бумми, я пробовал это в 0.4.2 с пустой строкой и до сих пор работает
серин

2
Просто комментарий / совет (и ни в коем случае не ответ на ваш вопрос). Широко распространено мнение, что регионов следует избегать, поскольку они позволяют скрывать сложность классов, а не работать над вашим стилем кодирования. Вместо огромных классов, где каждый класс отвечает за большую функциональность, вместо этого работайте над разбиением вашего кода на более мелкие классы. Это облегчит управление вашим кодом с течением времени. Подробнее читайте здесь: blog.codinghorror.com/the-problem-with-code-folding
Даниэль Саиди,

5
@DanielSaidi О, ужас! :) Парень в статье « Я ничего не вижу! Я должен вручную развернуть эти разделы, чтобы просмотреть любой код в этом классе». ... потому что он слишком ленив, чтобы нажать клавишу (это разворачивает все разделы в файле), эта функция не должна использоваться - это супер замечательная функция. Прямо сейчас я использую его, чтобы один за другим скрыть методы, которые я проверял, потокобезопасны в классе, в котором я работаю, это действительно помогает сохранять организованность. Конечно, время от времени я задавался вопросом, где что-то такое Я думал, что был там, но это небольшая цена, чтобы заплатить ...
Ycomp

4
@DanielSaidi Речь идет не о сокрытии сложности, а о сокрытии обыденного кода, такого как объявления переменных, геттеры, код инициализации и так далее. Также обратите внимание, что вам НЕ требуется #regions, чтобы свернуть «сложный код», обнаруженный в функциях и классах. То, что программисты неправильно используют инструмент, не означает «инструмент плох».
user1567453

96

Нет эквивалента в языке ... На основе IDE ...

Например, в NetBeans:

NetBeans / Creator поддерживает этот синтаксис:

// <editor-fold defaultstate="collapsed" desc="Your Fold Comment">
...
// </editor-fold>

http://forums.java.net/jive/thread.jspa?threadID=1311


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

Есть ли ярлык, который может автоматически заполнить эту строку?
Пини Чейни

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html имеет ярлыки для свертывания ....
Кевин ЛаБранш,

@JadChahine: ОП спрашивал об Eclipse, но согласен, что это хорошо работает для NetBeans. Синтаксис немного неуклюж, но копирование-вставка делает его достаточно простым.
AlainD

50

7
+1 спасибо за эту информацию. Так как оригинальный сайт разработчика плагина больше не доступен в 2012 году - я нашел краткое описание для установки и использования .
k3b

кто-нибудь нашел альтернативу intelliJ?
philx_x

Ссылка для скачивания больше не существует.
derHugo

49

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

Это проверено на работу с затмением Луны и Юноны. Вот шаги

  1. Загрузите плагин отсюда

  2. Извлечь содержимое архива

  3. Скопируйте и вставьте содержимое папки с плагинами и функциями в одноименную папку в каталоге установки eclipse
  4. Перезапустите затмение
  5. Navigate Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    введите описание изображения здесь

  6. Создайте новый регион, как показано:

    введите описание изображения здесь

  7. Перезапустите Затмение.

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

    введите описание изображения здесь

    введите описание изображения здесь

Вы можете скачать архив и найти шаги в этом блоге .


2
не работает для меня на Eclipse Neon: копирование и вставка ничего не сделал: единственное, что изменилось было в Marketplace >> Установленные плагины >> Обновление. Я обновил плагин coffeeScript, но у меня не было опции «Выбрать фальцовку для использования» под java >> редактор >> сворачивание
Angelo Oparah

Он работал в Eclipse Oxygen, однако вам нужно снова запустить Eclipse. Значок, отображаемый для меня, был красным значком, поэтому я изменил конфигурацию: « Окно» → «Настройки» → «Java» → «Редактор» → « Свернуть », щелкните вкладку « Дополнительно » и измените тему значка на « Современный»
Michieru

38

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

// <editor-fold defaultstate="collapsed" desc="user-description">
  ...any code...
// </editor-fold>

Как отмечается в статье, это может поддерживаться и другими редакторами, но нет никаких гарантий.


В Android-студии, по крайней мере, вы не можете сложить часть блока. Если спецификация сгиба начинается вне блока и заканчивается внутри блока, она не активируется.
Профессор фон Лемонгаргл

30

самый быстрый способ Android Studio(или IntelliJ IDEA)

  1. highlight the code ты хочешь окружить это
  2. нажмите ctrl+ alt+t
  3. нажмите c==> затем введите описание
  4. наслаждаться

// region <name> Ваш код ... // endregion Более эффективен и прост! хе-хе; P
diegodsp

30

AndroidStudioрегион
Создать регион

Сначала найдите (и определите короткий путь, если необходимо) для Surround Withменю введите описание изображения здесь

Затем выберите код, нажмите Ctrl+Alt+Semicolon-> выберитеregion..endregion...
введите описание изображения здесь

Перейти в регион

Во-первых, найдите Custom Foldingкороткий путь.
введите описание изображения здесь Во-вторых, в любом месте вашего кода нажмитеCtrl+Alt+Period('>' on keyboard) введите описание изображения здесь


20

Вопреки тому, что большинство публикует, это НЕ вещь IDE. Это языковая вещь. #Region - это оператор C #.


55
Больше всего публикуется то, что в JAVA это особенность IDE.
WhyNotHugo

1
Я вижу 2 самых популярных ответа о том, что такой языковой функции нет. -1.
Мохаймин

23
В C # это частично IDE, частично язык. Язык поддерживает директивы препроцессора, но препроцессор просто игнорирует их (так же, как процессор игнорирует комментарии). IDE (Visual Studio) использует их для свертывания кода.
ADTC

В Java не указано свертывание кода, которое есть только в IDE (Netbeans), в Netbeans есть более специальные комментарии, такие как «TODO» и другие. Они очень полезны для отслеживания вашего прогресса в процессе разработки проекта ПО
Pini Cheyni

17

Я приходил из C # в java и имел ту же проблему, и лучшая и точная альтернатива для региона - что-то вроде ниже (работая в Android Studio, не знаю насчет intelliJ):

 //region [Description]
 int a;
 int b;
 int c;
//endregion

ярлык, как показано ниже:

1- выберите код

2- нажмите ctrl+ alt+t

3- нажмите cи напишите ваше описание


В AndroidStudio версии 2.3.1 он складывается. Я не знаю, когда это начало складываться.
MiguelSlv

Спасибо. Отлично работает в Android Studio 3.0 beta 2. По любопытству я попробовал в Eclipse Oxygen, по умолчанию он не работает, но поиск не ведется.
Лоран

15

Лучший путь

//region DESCRIPTION_REGION
int x = 22;
// Comments
String s = "SomeString";
//endregion;

Совет: поставьте ";" в конце "эндрегиона"


1
eclipse не сворачивайте код, какую IDE вы используете?
Охад Коэн

Он работает с Android Studio и IntelliJ IDEA (оба сделаны из одной и той же кодовой базы JetBrains)
prashu132


12

Если кому-то интересно, в Eclipse вы можете свернуть все свои методы и т. Д. За один раз, просто щелкните правой кнопкой мыши, когда вы обычно вставляете точку останова, нажмите «Свернуть»> «Свернуть все». Он знает, что это не ответ на вопрос, а просто альтернатива быстрому свертыванию кода.


1
Eclipse также может автоматически все свернуть при открытии файла исходного кода. Preferences> Java> Editor> Folding> «Изначально сложить эти элементы» (отметьте все в списке). Я считаю удобным сосредоточиться только на том, что мне нужно, особенно в длинных файлах исходного кода.
ADTC

@ADTC - Спасибо - так много сотен раз я делал это вручную каждый раз, когда открываю файл - никогда больше !!
ToolmakerSteve

@ToolmakerSteve Если вы можете сделать что-нибудь повторяющееся вручную на компьютере, просто должен быть способ автоматизировать это. = D
ADTC

8
#region

// code

#endregion

На самом деле только получает какую-либо выгоду в IDE. В Java нет установленного стандарта в IDE, поэтому на самом деле нет стандарта для параллели #region.


3
Хорошо , если есть стандарт region, то мы можем быть уверены , что Java IDE, будет поддерживать его, не так ли?
Pacerier

@Pacerier, если они поддерживают этот стандарт, да. Я думаю, что #region - это скорее функция IDE, чем стандарт. Теоретически, Java IDE могли бы реализовать это поведение и сделать его стандартом де-факто
El Mac

4

вот пример:

//region regionName
//code
//endregion

100% работает в Android студии


Я не знаю, почему за вас проголосовали, это на самом деле работает в Android Studio без какой-либо настройки!
Maxdelia

2

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

{
// Code
// Code
// Code
// Code
}

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


1

На самом деле Иоганн, # указывает, что это директива препроцессора, что в основном означает, что она сообщает IDE, что делать.

В случае использования #regionи#endregion в вашем коде, это не имеет значения в конечном коде, есть ли он или нет. Вы действительно можете назвать это языковым элементом, если его использование ничего не меняет?

Кроме того, java не имеет директив препроцессора, что означает, что опция свертывания кода определяется отдельно для каждой идеи, например, в NetBeans с помощью оператора // <code-fold>


1
Вы действительно можете назвать это языковым элементом, если его использование ничего не меняет? - как насчет комментариев ?!
epeleg

2
До этого я слышал аргумент, что это не функция языка. И этот вопрос "Можете ли вы назвать это языковым элементом, если его использование ничего не меняет?" смешно Много времени рефакторинг делает код более простым для чтения для людей и ничего не делает (надеюсь), чтобы повлиять на функцию кода.
Menefee

1

На Mac и Android Studio выполните следующую последовательность действий:

  1. Выделите исходный код, чтобы сложить
  2. Нажмите Alt+ Command+t
  3. Выбрать <editor-fold>

Также вы можете выбрать другие варианты:

введите описание изображения здесь


-1

В Eclipse вы можете свернуть в скобки переменную область блока. Наиболее близким является сделать что-то вроде этого:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
Это бесполезно. Он не работает внутри метода, плюс он ломает код! (Закрытые переменные будут жаловаться, что хотят быть окончательными. Переменная без определения области действия не будет доступна вне внутренних скобок!)
ADTC

1
Мне не нравится этот метод, добавляет слишком много фигурных скобок. Это может привести к путанице в коде :(
Broken_Window


-12

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

1) Открыть Macro Explorer:

2) Создать новый макрос:

3) Назовите его «OutlineRegions» (или как хотите)

4) Щелкните правой кнопкой мыши «OutlineRegions» (отображается в Macro Explorer), выберите параметр «Редактировать» и вставьте в него следующий код VB:

    Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Collections

Public Module OutlineRegions

    Sub OutlineRegions()
        Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection

        Const REGION_START As String = "//#region"
        Const REGION_END As String = "//#endregion"

        selection.SelectAll()
        Dim text As String = selection.Text
        selection.StartOfDocument(True)

        Dim startIndex As Integer
        Dim endIndex As Integer
        Dim lastIndex As Integer = 0
        Dim startRegions As Stack = New Stack()

        Do
            startIndex = text.IndexOf(REGION_START, lastIndex)
            endIndex = text.IndexOf(REGION_END, lastIndex)

            If startIndex = -1 AndAlso endIndex = -1 Then
                Exit Do
            End If

            If startIndex <> -1 AndAlso startIndex < endIndex Then
                startRegions.Push(startIndex)
                lastIndex = startIndex + 1
            Else
                ' Outline region ...
                selection.MoveToLineAndOffset(CalcLineNumber(text, CInt(startRegions.Pop())), 1)
                selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
                selection.OutlineSection()

                lastIndex = endIndex + 1
            End If
        Loop

        selection.StartOfDocument()
    End Sub

    Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer)
        Dim lineNumber As Integer = 1
        Dim i As Integer = 0

        While i < index
            If text.Chars(i) = vbCr Then
                lineNumber += 1
                i += 1
            End If

            i += 1
        End While

        Return lineNumber
    End Function
End Module

5) Сохраните макрос и закройте редактор.

6) Теперь давайте назначим ярлык макросу. Перейдите в Инструменты-> Параметры-> Среда-> Клавиатура и найдите свой макрос в текстовом поле «Показать команды, содержащее» (введите: Макрос в текстовое поле, в нем будет предложено имя макроса, выберите свое).

7) Теперь в текстовом поле под «Нажатием клавиш быстрого доступа» вы можете ввести нужный ярлык. Я использую Ctrl + M + N.

Использование:

return
{
//Properties
//#region
Name:null,
Address:null
//#endregion
}

8) Нажмите сохраненную горячую клавишу

Смотрите ниже результат:

введите описание изображения здесь


Где находится Macro Explorer? Я использую Eclipse 4.3.1 и не могу его найти.
Мохаммед Эль-Накиб

1
Это даже не Java?
Бурак Каракуш

@CJBS - re: This code seems to be for Visual Basic.NETчто говорит о том, что IDE есть Visual Studio.
Джесси Чизхольм

@JesseChisholm - это была моя точка зрения. OP хочет Java, а не VB, и нацелен на Eclipse IDE, а не VS.
CJBS

1
RIP ответ. Если бы он использовал Visual Studio, он мог бы просто использовать #regionи#endregion
PNDA
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.