Java, еквівалентна #region в C #


488

Я хочу використовувати регіони для складання коду в Eclipse ; як це можна зробити на Java?

Приклад використання в C # :

#region name
//code
#endregion

@MichaelLaVoie: відповідь видалено. Чи є шанс перенести його на інший веб-сайт SE?
Адам Паркін

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

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

3
Почніть з //region [Description] кінця і //endregion
закінчуйте

Відповіді:


215

Немає такого стандартного еквівалента. Деякі IDE - наприклад, Intellij або Eclipse - можуть складатися залежно від типів коду (конструктори, імпорт тощо), але нічого подібного немає #region.


30
Насправді цього можна досягти. Якщо ви прокрутите вниз по цій публікації, "Yaqub Ahmad" пояснює, як отримати цю функціональність. Також тут є посилання ( kosiara87.blogspot.com/2011/12/… ), яке показує, як додати його до вашого існуючого середовища затемнення ... надзвичайно корисно!
cking24343

14
Звичайно. Але немає нічого стандартного . Він виконується в IDE, а не з мовної (або текстової) конструкції
Brian Agnew

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

4
@BrianAgnew, ОП нічого не згадувало про стандарти, натомість він просто хоче мати можливість блоків, що нагадують регіони, у своєму коді. Наприклад, ви сказали, "але немає нічого, як #region." наприклад IDEA // region .. // endregion працює точно так само, як #region. Узагалі немає стандартного способу зробити це, оскільки це залежить від самої IDE або плагіна. Розробники з мікрософт-фоном завжди будуть бачити MS Visual Studio як "The" IDE, але насправді це лише один із варіантів, і інша IDE може або не може реалізувати таку функціональність.
Мазен Елькашеф

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

476

Jet Brains IDEA має цю особливість. Для цього можна використовувати об'єм гарячої клавіші (ctrl + alt + T). Це лише функція IDEA.

Регіони там виглядають так:

//region Description

Some code

//endregion

3
Дякую за це! Відмінно працює на Android Studio.
rogcg

2
Питання чітко вимагає вирішення проблеми Eclipse.
Дункан Джонс

5
@Duncan 1. Нічого поганого, щоб показати людям, що є альтернативи. 2. Я google для регіонів під Intellij і знайшов його.
БХуельсе

2
На Linux ця гаряча клавіша запускає термінал
user1209216

1
Щойно спробував це, схоже, IntelliJ також підтримує вкладені регіони! Шкода, що це не стандарт.
Грубер

209

За допомогою Android Studio спробуйте це:

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

Обережно: немає порожнього рядка після // регіону ...

І ви отримаєте:


переглядав усі відповіді і розумів, оскільки Android Studio базується на IntelliJ, тоді це потрібно підтримувати. Хороша річ, щоб це зазначити, хоча!
серин

5
bummi, я спробував це в 0.4.2 з порожнім рядком і досі працює
серин

2
Просто коментар / порада (і аж ніяк не відповідь на ваше запитання). Поширена думка, що регіонів слід уникати, оскільки вони дозволяють приховати складність класу, а не працювати над вашим стилем кодування. Замість величезних класів, де кожен клас відповідає за багато функціональності, працюйте над тим, щоб розбити код на менші класи. Це полегшить керування кодом з часом. Детальніше читайте тут: blog.codinghorror.com/the-problem-with-code-folding
Daniel

5
@DanielSaidi о, жах! :) хлопець в статті « Я не можу побачити що - небудь! Я повинен вручну розгортати ті розділи , щоб переглянути будь-який код в цьому класі. » ... так , тому що він занадто ледачий , щоб натиснути клавішу (що woulld розгорнути всі розділи у файлі) функцію використовувати не слід - це надзвичайно чудова функція. Зараз я використовую його по одному приховати методи, які я перевірив, є безпечними для ниток у класі, над яким я працюю, це дійсно допомагає бути організованим. Звичайно, раз у раз я замислювався, де щось таке Я думав, що там є, але це невелика ціна, яку потрібно заплатити ...
ycomp

4
@DanielSaidi Йдеться не про приховування складності, а про приховування мирського коду, такого як оголошення змінних, getters, код ініціалізації тощо. Також зауважте, що вам НЕ потрібні #regions для згортання "складного коду", знайденого у функціях та класах. Яловичина з програмістами, які неправильно використовують інструмент, не означає "інструмент поганий".
користувач1567453

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. Навігація Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

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

  6. Створіть новий регіон, як показано:

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

  7. Перезапустіть Eclipse.

  8. Перевірте, чи працює складання з коментарями з попередньою позначкою початкових та кінцевих ідентифікаторів

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

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

Ви також можете завантажити архів і знайти кроки в цьому блозі .


2
не працює для мене на eclipse neon: копіювати та вставляти нічого не робилося: єдине, що змінилося, було під маркером >> встановлені плагіни >> оновлення. Я оновив плагін CoffeeScript, але не отримав опцію "Вибрати складку для використання" під редактором java >> >> folding
Angelo Oparah

Він працював у Eclipse Oxygen, однак вам потрібно знову запустити затемнення. Показаний мені значок був червоним значком, тому я змінив конфігурацію, Вікно → Налаштування → Ява → Редактор → Складка натисніть на вкладку « Додатково » та змініть тему Ікони, встановлену на Модерн
Мічіру

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. насолоджуватися

// регіон <ім'я> Ваш код ... // endregion Більш ефективний і простий! hehe; P
діегосп

30

AndroidStudioрегіон
Створити регіон

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

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

Перейти до регіону

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


20

Всупереч тому, що більшість публікує, це НЕ ІДЕ. Це мова мова. #Region - це твердження C #.


55
Що найбільше публікує, це те, що IN JAVA - це функція IDE.
WhyNotHugo

1
Я бачу 2 найпопулярніших відповіді, які говорять про відсутність такої мовної функції. -1.
Mohayemin

23
У C # це частково IDE, частково мова. Мова підтримує директиви препроцесора, але препроцесор їх просто ігнорує (так само процесор ігнорує коментарі). IDE (Visual Studio) використовує їх для складання коду.
ADTC

У Java немає вказаного коду, який складається лише у IDE (Netbeans), у Netbeans є більше спеціальних коментарів, таких як "TODO" та багато іншого. Вони дуже корисні для відстеження вашого прогресу в процесі розробки проектів SW
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
затемнення не складайте код, що використовуєте IDE?
Охад Коен

Він працює з Android Studio і IntelliJ IDEA (обидва зроблені з однієї бази даних JetBrains)
prashu132

IDE виступає за "інтегроване середовище розвитку"
Піні Чейні

12

Якщо хтось зацікавлений, у програмі Eclipse ви зможете за один раз згорнути всі ваші методи тощо. Просто клацніть правою кнопкою миші, коли ви зазвичай вставляєте точку розриву, натисніть "Розгортання"> "Згорнути все". Він знає, що це не відповідь на питання, а просто надання альтернативи швидкому складенню коду.


1
Ви також можете мати Eclipse автоматично згортати все під час відкриття файлу вихідного коду. Налаштування> Java> Редактор> Складання> "Спочатку складіть ці елементи" (перевірте всі у списку). Мені зручно зосередитись лише на тому, що мені потрібно, особливо у довгих файлах вихідного коду.
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

Насправді Джоанн, the # вказує те, що це препроцесорна директива, що в основному означає, що вона говорить IDE, що робити.

У разі використання #regionі#endregion у вашому коді, він не має різниці у кінцевому коді, є він чи ні. Ви дійсно можете назвати його мовним елементом, якщо використання його нічого не змінює?

Крім того, java не має директив препроцесора, а це означає, що опція складання коду визначається на основі ідеї, наприклад, в netbeans, з заявою // <code-fold>


1
чи дійсно можна назвати його мовним елементом, якщо використання його нічого не змінює? - як щодо коментарів ?!
epeleg

2
Я чула аргумент раніше, що це не функція мови. І це питання "Чи можете ви дійсно назвати його мовним елементом, якщо за допомогою нього нічого не змінюється?" смішно. Багато часу рефакторинг робить полегшеним читати код для людей і нічого не робить (сподіваємось), щоб вплинути на функцію коду.
Менефі

1

На Mac і Android Studio дотримуйтесь цієї послідовності:

  1. Виділіть вихідний код для складання
  2. Натисніть Alt+ Command+t
  3. Виберіть <editor-fold>

Також ви можете вибрати інші варіанти:

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


-1

У Eclipse ви можете згортати дужки, що обгортають блок змінної області. Найближчим є зробити щось подібне:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
Це марно. Він не працює всередині методу, а також BREAKS CODE! (Приватні змінні будуть скаржитися, що вони хочуть бути остаточними. Змінна без визначення області не буде доступна поза внутрішніми дужками!)
ADTC

1
Мені цей метод не подобається, додає занадто багато фігурних брекетів. Це може призвести до заплутаного коду :(
Broken_Window


-12

Існує деякий варіант досягти того ж. Дотримуйтесь наведених нижче пунктів.

1) Відкрийте Провідник макросів:

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.
Jesse Chisholm

@JesseChisholm - це був мій погляд. ОП хоче Java, а не VB, і орієнтована на IDE Eclipse, а не на VS.
CJBS

1
RIP відповідь. Якби він використовував візуальну студію, він міг би просто скористатися #regionі#endregion
PNDA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.