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
Pentium10
źródło
@MichaelLaVoie: odpowiedź została usunięta. Czy jest jakaś szansa, że ​​została przeniesiona na inną stronę SE?
Adam Parkin
1
programmers.stackexchange.com/questions/53086/... wydaje się podobny duchowo.
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.

Brian Agnew
źródło
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
Alexander Bezrodniy
źródło
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:

Cyril Jacquart
źródło
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

Kevin LaBranche
źródło
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 .

DeltaCap019
źródło
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.

ciężki
źródło
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ę
Basheer AL-MOMANI
źródło
// 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

Phan Van Linh
źródło
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 #.

Johann
źródło
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

Amir Ziarati
źródło
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”

Taddeo
źródło
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
Skrót
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.

Ricky
źródło
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.

Justin Niessner
źródło
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

Coder123
źródło
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.

Yawar
źródło
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>

siriusblack
źródło
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

Victor Ruiz.
źródło
-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;

    }
}
Dennis
źródło
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
-3

Wystarczy zainstalować i włączyć wtyczkę Coffee-Bytes (Eclipse)

acmoune
źródło
Jest to nie tylko wspomniane we wcześniejszej odpowiedzi , ale nawet nie podałeś żadnych użytecznych informacji na ten temat.
Xynariz,
-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

Abhishek
źródło
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