Java odpowiednik #region w C #


488

Chcę używać regionów do zwijania kodu w Eclipse ; jak można to zrobić w Javie?

Przykładowe użycie w C # :

#region name
//code
#endregion

@MichaelLaVoie: odpowiedź została usunięta. Czy jest jakaś szansa, że ​​została przeniesiona na inną stronę SE?
Adam Parkin


Dołączyłem do imprezy późno. Zgadzam się z IKashef, że istnieją inne opcje, które aktualnie wybrana odpowiedź. Odpowiedź Yaquba Ahmada uratowała mi życie. Nie musiałem pobierać Intellig IDE. Pobrałem wspomnianą wtyczkę CoffeeBytes z komentarza cking24343, zastosowałem konfigurację „null n void” i działałem dobrze w Luna. Musisz ponownie uruchomić po zastosowaniu konfiguracji
Maximus Decimus

3
zaczynają się //region [Description] i kończą na//endregion
Amir Ziarati

Odpowiedzi:


215

Nie ma takiego standardowego odpowiednika. Niektóre środowiska IDE - na przykład Intellij lub Eclipse - mogą się spasować w zależności od zaangażowanych typów kodu (konstruktory, import itp.), Ale nic podobnego #region.


30
W rzeczywistości można to osiągnąć. Jeśli przewiniesz ten post w dół, „Yaqub Ahmad” wyjaśni, jak uzyskać tę funkcjonalność. Również tutaj jest link ( kosiara87.blogspot.com/2011/12/… ), który pokazuje, jak dodać go do istniejącego środowiska zaćmienia ... niezwykle przydatne!
cking24343

14
Pewnie. Ale nie ma nic standardowego . Jest wykonywany w IDE, a nie w konstrukcji językowej (lub tekstowej)
Brian Agnew

2
@lKashef - więc jaki jest zatem standardowy odpowiednik? Wszystko, co podano poniżej, odnosi się do konkretnego IDE, prawda?
Brian Agnew

4
@BrianAgnew, OP nie wspomniał nic o standardach, po prostu chce mieć w swoim kodzie bloki regionów. Na przykład powiedziałeś „ale nie ma nic takiego jak #region”. w IDEA na przykład // region .. // endregion działa dokładnie tak jak #region. Po pierwsze, nie ma żadnego standardowego sposobu, aby to zrobić, ponieważ zależy to od samego IDE lub wtyczki. Programiści z tłem Microsoft zawsze widzą MS Visual Studio jako „The” IDE, ale w rzeczywistości jest to tylko jedna z opcji, a inne IDE może, ale nie musi, implementować taką funkcjonalność.
Mazen Elkashef

4
@BrianAgnew, prawie się poddałem, dopóki nie zobaczyłem odpowiedzi innych ludzi, które pomogły bardziej niż twoja. Poważnie, nie czujemy się tutaj zbyt ciężko. Wszyscy jesteśmy tutaj, aby uczyć się i dzielić naszą wiedzą, i stwierdzam, że twoja odpowiedź wprowadziła mnie w błąd, może była to dobra sytuacja w 2010 roku, ale nie dzisiaj. Mam nadzieję, że rozumiesz.
Mazen Elkashef

476

Jet Brains IDEA ma tę funkcję. Możesz użyć do tego skrótu klawiszowego (ctrl + alt + T). To tylko funkcja IDEA.

Regiony tam wyglądają następująco:

//region Description

Some code

//endregion

3
Dziękuję za to! Działa idealnie w Android Studio.
rogcg

2
Pytanie wyraźnie wymaga rozwiązania dla Eclipse.
Duncan Jones

5
@ Duncan 1. Nic złego, aby pokazać ludziom, że istnieją alternatywy. 2. Google szukam regionów pod Intellij i znalazłem to.
BHuelse

2
W systemie Linux ten skrót klawiszowy uruchamia terminal
użytkownik1209216,

1
Właśnie wypróbowałem i wygląda na to, że IntelliJ obsługuje również regiony zagnieżdżone! Szkoda, że ​​to nie jest standardowe.
Gruber

209

W Android Studio spróbuj tego:

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

Ostrożnie: brak pustej linii po // regionie ...

I dostaniesz:


przechodził wszystkie odpowiedzi i domyślił się, ponieważ Android Studio jest oparty na IntelliJ, więc to musi być obsługiwane. Warto jednak to podkreślić!
seryna

5
bummi, wypróbowałem to w wersji 0.4.2 z pustą linią i nadal działa
sery

2
Tylko komentarz / rada (i w żadnym wypadku nie odpowiedź na twoje pytanie). Powszechnie uważa się, że należy unikać regionów, ponieważ pozwalają one ukryć złożoność klas zamiast pracować nad stylem kodowania. Zamiast wielkich klas, w których każda klasa odpowiada za wiele funkcji, zamiast tego pracuj nad podziałem kodu na mniejsze klasy. Z czasem twój kod będzie łatwiejszy do zarządzania. Przeczytaj więcej tutaj: blog.codinghorror.com/the-problem-with-code-folding
Daniel Saidi

5
@DanielSaidi oh, horror! :) facet w artykule „ Nic nie widzę! Muszę ręcznie rozwinąć te sekcje, aby przeglądać dowolny kod w tej klasie. ” ... dlatego, że jest zbyt leniwy, aby nacisnąć klawisz (to by rozwinąć wszystkie sekcje w pliku), funkcja nie może być używana - jest to super cudowna funkcja. W tej chwili używam tego do ukrywania metod jeden po drugim. Metody, które sprawdziłem, są bezpieczne w klasie, w której pracuję, to naprawdę pomaga utrzymać porządek. Pewnie od czasu do czasu zastanawiałem się, gdzie coś takiego jest Myślałem, że tam jest, ale to niewielka cena do zapłacenia ...
ycomp 18.10.15

4
@DanielSaidi Nie chodzi o ukrywanie złożoności, ale ukrywanie przyziemnego kodu, takiego jak deklaracje zmiennych, metody pobierające, kod inicjujący i tak dalej. Należy również pamiętać, że NIE wymaga się #regions, aby zwinąć „złożony kod” znaleziony w funkcjach i klasach. Wołowina z programistami niepoprawnie używającymi narzędzia nie oznacza „narzędzie jest złe”.
user1567453

96

Brak odpowiednika w języku ... Na podstawie IDE ...

Na przykład w fasolkach sieciowych:

NetBeans / Creator obsługuje tę składnię:

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

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


1
Mimo że nie jest to składanie specyficzne dla języka, ale pomogło mi w NetBeans. Dokładnie to, co chciałem osiągnąć. Po prostu chcę, aby mój kod był dla mnie bardziej przydatny i zorganizowany.
Indygo

Czy jest jakiś skrót, który może automatycznie wypełnić tę linię?
Pini Cheyni

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html ma dostępne skróty do składania ....
Kevin LaBranche

@JadChahine: OP zapytał o Eclipse, ale zgadza się, że działa to dobrze dla NetBeans. Składnia jest nieco niezdarna, ale kopiowanie i wklejanie ułatwia.
AlainD


49

Niestandardową funkcję składania kodu można dodać do środowiska Eclipse za pomocą wtyczki do składania kodu CoffeeScript.

Jest to testowane pod kątem współpracy z zaćmieniem Luna i Juno. Oto kroki

  1. Pobierz wtyczkę stąd

  2. Wyodrębnij zawartość archiwum

  3. Skopiuj wklej zawartość wtyczki i folderu funkcji do tego samego nazwanego folderu w katalogu instalacyjnym Eclipse
  4. Uruchom ponownie zaćmienie
  5. Nawigować Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    wprowadź opis zdjęcia tutaj

  6. Utwórz nowy region, jak pokazano:

    wprowadź opis zdjęcia tutaj

  7. Uruchom ponownie środowisko Eclipse.

  8. Wypróbuj, jeśli składanie działa z komentarzami poprzedzonymi określonymi identyfikatorami początkowymi i końcowymi

    wprowadź opis zdjęcia tutaj

    wprowadź opis zdjęcia tutaj

Możesz pobrać archiwum i znaleźć kroki na tym blogu .


2
nie działa dla mnie na eclipse neon: kopiowanie i wklejanie nic nie zrobiło: jedyne co się zmieniło to w sklepie >> zainstalowane wtyczki >> aktualizacja. Zaktualizowałem wtyczkę CoffeeScript, ale nie dostałem opcji „Wybierz składanie do użycia” w java >> edytor >> składanie
Angelo Oparah

Działało w Eclipse Oxygen, jednak musisz ponownie uruchomić zaćmienie. Ikona, która była mi wyświetlana, była czerwoną ikoną, więc zmieniłem konfigurację, Okno → Preferencje → Java → Edytor → Folding, kliknij zakładkę Zaawansowane i zmień zestaw ikon na Nowoczesny
Michieru

38

To bardziej funkcja IDE niż funkcja języka. Netbeans pozwala zdefiniować własne definicje składania przy użyciu następującej definicji:

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

Jak wspomniano w artykule, mogą to być również obsługiwane przez innych redaktorów, ale nie ma żadnych gwarancji.


W Android Studio przynajmniej nie można złożyć części bloku. Jeśli specyfikacja foldowania rozpoczyna się poza blokiem i kończy w bloku, nie zostanie aktywowana.
Prof Von Lemongargle

30

najszybszy sposób w Android Studio(lub IntelliJ IDEA)

  1. highlight the code chcesz go otoczyć
  2. naciśnij ctrl+ alt+t
  3. naciśnij c==> następnie wprowadź opis
  4. cieszyć się

// region <nazwa> Twój kod ... // endregion Jest bardziej wydajny i prosty! hehe; P
diegodsp

30

AndroidStudioregion
Utwórz region

Najpierw znajdź (i w razie potrzeby zdefiniuj skrót) dla Surround Withmenu wprowadź opis zdjęcia tutaj

Następnie wybierz kod, naciśnij Ctrl+Alt+Semicolon-> wybierzregion..endregion...
wprowadź opis zdjęcia tutaj

Idź do regionu

Najpierw znajdź Custom Foldingskrót
wprowadź opis zdjęcia tutaj Po drugie, z dowolnego miejsca w kodzie naciśnijCtrl+Alt+Period('>' on keyboard) wprowadź opis zdjęcia tutaj


20

W przeciwieństwie do tego, co większość publikuje, NIE jest to IDE. To jest kwestia języka. #Region to instrukcja w języku C #.


55
Najbardziej publikuje się to, że w JAVA jest to funkcja IDE.
WhyNotHugo

1
Widzę 2 najpopularniejsze odpowiedzi, które mówią, że nie ma takiej funkcji językowej. -1.
Mohayemin,

23
W języku C # jest to częściowo IDE, a częściowo język. Język obsługuje dyrektywy preprocesora, ale preprocesor po prostu je ignoruje (w ten sam sposób procesor ignoruje komentarze). IDE (Visual Studio) używa ich do składania kodu.
ADTC

Java nie określiła składania kodu tylko IDE (Netbeans), Netbeans ma więcej specjalnych komentarzy, takich jak „TODO” i więcej. Są bardzo przydatne do śledzenia postępów w procesie rozwoju projektu SW
Pini Cheyni

17

Przybyłem z języka C # do Javy i miałem ten sam problem, a najlepsza i dokładna alternatywa dla regionu jest podobna do poniższej (praca w Android Studio, nie wiem o intelliJ):

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

skrót jest jak poniżej:

1- wybierz kod

2- naciśnij ctrl+ alt+t

3- naciśnij ci napisz swój opis


W AndroidStudio w wersji 2.3.1 składa się. Nie wiem, kiedy zaczęło się składać.
MiguelSlv

Dzięki. Działa doskonale w Android Studio 3.0 beta 2. Z ciekawości wypróbowałem w Eclipse Oxygen, domyślnie nie działa, ale nie szukałem dalej.
Laurent,

15

Najlepszym sposobem

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

Wskazówka: wpisz „;” na końcu „regionu”


1
Zaćmienie nie składa kodu, jakiego IDE używasz?
Ohad Cohen

Działa z Android Studio i IntelliJ IDEA (oba są wykonane z tej samej bazy
kodowej


12

Jeśli ktoś jest zainteresowany, w Eclipse możesz zwinąć wszystkie swoje metody itp. Za jednym razem, po prostu kliknij prawym przyciskiem myszy, gdy normalnie wstawisz punkt przerwania, kliknij „Składanie”> „Zwiń wszystko”. Wie, że nie jest to odpowiedź na pytanie, ale stanowi jedynie alternatywę dla szybkiego zwijania kodu.


1
Możesz także włączyć automatyczne zwijanie wszystkiego w Eclipse podczas otwierania pliku kodu źródłowego. Preferencje> Java> Edytor> Składanie> „Wstępnie złóż te elementy” (zaznacz wszystko na liście). Uważam, że wygodnie jest skupić się tylko na tym, czego potrzebuję, szczególnie w długich plikach źródłowych.
ADTC

@ ADTC - Dzięki - tyle razy setki razy robiłem to ręcznie za każdym razem, gdy otwieram plik - nigdy więcej !!
ToolmakerSteve

@ToolmakerSteve Jeśli możesz zrobić cokolwiek powtarzalnego ręcznie na komputerze, musi istnieć sposób na zautomatyzowanie go. = D
ADTC

8
#region

// code

#endregion

Naprawdę daje ci tylko korzyści w IDE. W Javie nie ma ustalonego standardu w IDE, więc tak naprawdę nie ma standardu równoległego #region.


3
Cóż, jeśli istnieje standard region, możemy być pewni, że IDE Java będzie obsługiwać, prawda?
Pacerier,

@Pacerier, jeśli obsługują ten standard, tak. Myślę, że #region jest bardziej funkcją IDE niż standardem. Teoretycznie środowiska IDE Java mogą implementować to zachowanie i uczynić go de facto standardem
El Mac

4

Oto przykład:

//region regionName
//code
//endregion

100% działa w Android Studio


Nie wiem, dlaczego zostałeś odrzucony, tak naprawdę działa w Android Studio bez potrzeby jakiejkolwiek konfiguracji!
maxdelia

2

Zazwyczaj potrzebuję tego do skomentowanego kodu, więc używam nawiasów klamrowych na początku i na końcu.

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

Może być używany do fragmentów kodu, ale może powodować problemy w niektórych kodach, ponieważ zmienia zakres zmiennej.


1

Właściwie John, #oznacza, że ​​jest to dyrektywa preprocesorowa, co w zasadzie oznacza, że ​​mówi IDE, co ma robić.

W przypadku użycia #regioniw #endregionkodzie NIE ma znaczenia, czy kod końcowy jest obecny, czy nie. Czy naprawdę można nazwać go elementem języka, jeśli jego użycie niczego nie zmienia?

Poza tym java nie ma dyrektyw preprocesora, co oznacza, że ​​opcja składania kodu jest definiowana na podstawie idei, w netbeans na przykład za pomocą instrukcji // <code-fold>


1
czy naprawdę można nazwać go elementem języka, jeśli jego użycie niczego nie zmienia? - co powiesz na komentarze?
epeleg

2
Słyszałem wcześniej argument, że nie jest to funkcja języka. I to pytanie „Czy naprawdę można nazwać go elementem językowym, jeśli jego użycie niczego nie zmienia?” jest niedorzeczny. Refaktoryzacja przez długi czas sprawia, że ​​kod jest łatwiejszy do odczytania dla ludzi i nie robi nic (mam nadzieję) wpływając na funkcję kodu.
Menefee

1

Na komputerach Mac i Android Studio wykonaj następującą sekwencję:

  1. Podświetl kod źródłowy, który chcesz złożyć
  2. Naciśnij Alt+ Command+t
  3. Wybierz <editor-fold>

Możesz także wybrać inne opcje:

wprowadź opis zdjęcia tutaj


-1

W środowisku Eclipse można zwinąć nawiasy zawijające blok regionu zmiennego. Najbliższe jest zrobienie czegoś takiego:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
To jest bezużyteczne. Nie działa wewnątrz metody, a ponadto ZŁAMUJE KOD! (Zmienne prywatne będą narzekać, że chcą być ostateczne. Zmienna bez definicji zakresu nie będzie dostępna poza wewnętrznymi nawiasami!)
ADTC

1
Nie podoba mi się ta metoda, dodaje zbyt wiele nawiasów klamrowych. Może to prowadzić do mylącego kodu :(
Broken_Window


-12

Istnieje kilka opcji, aby osiągnąć to samo. Postępuj zgodnie z poniższymi punktami.

1) Otwórz Eksploratora makr:

2) Utwórz nowe makro:

3) Nazwij go „OutlineRegions” (lub cokolwiek chcesz)

4) Kliknij prawym przyciskiem myszy opcję „OutlineRegions” (wyświetlana w Eksploratorze makr), wybierz opcję „Edytuj” i wklej do niej następujący kod 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) Zapisz makro i zamknij edytor.

6) Teraz przypiszmy skrót do makra. Przejdź do Narzędzia-> Opcje-> Środowisko-> Klawiatura i wyszukaj swoje makro w polu tekstowym „pokaż polecenia zawierające” (wpisz: Makro w polu tekstowym, zasugeruje nazwę makra, wybierz swoją).

7) teraz w polu tekstowym pod „Naciśnij klawisze skrótu” możesz wprowadzić żądany skrót. Używam Ctrl + M + N.

Posługiwać się:

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

8) Naciśnij zapisany klawisz skrótu

Zobacz wynik poniżej:

wprowadź opis zdjęcia tutaj


Gdzie jest Macro Explorer? Korzystam z Eclipse 4.3.1 i nie mogę go znaleźć.
Mohamed El-Nakib,

1
To nawet nie jest Java?
Burak Karakuş

@CJBS - re: This code seems to be for Visual Basic.NETco sugeruje, że IDE jest Visual Studio.
Jesse Chisholm

@JesseChisholm - o to mi chodziło. OP chce Java, a nie VB, i celuje w Eclipse IDE, a nie VS.
CJBS

1
Odpowiedź RIP. Gdyby korzystał ze studia wizualnego, mógłby po prostu użyć #regioni#endregion
PNDA
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.