C # içindeki #region ile eşdeğer Java


489

Kod katlama için bölgeleri kullanmak istiyorum Eclipse ; Java ile bu nasıl yapılabilir?

C # 'da örnek kullanım :

#region name
//code
#endregion

@MichaelLaVoie: cevap silindi. Farklı bir SE sitesine taşınması ihtimali var mı?
Adam Parkin


Partiye geç katıldım. IKashef ile mevcut seçili cevabın başka seçenekleri olduğu konusunda hemfikirim. Yaqub Ahmad'ın cevabı hayatımı kurtardı. Intellig IDE'yi indirmem gerekmiyordu. Bahsedilen CoffeeBytes eklentisini cking24343 yorumundan indirdim, 'null n void' yapılandırmasını uyguladım ve Luna'da iyi çalıştım. Yapılandırmayı uyguladıktan sonra yeniden başlatmanız gerekiyor
Maximus Decimus

3
ile başlayan //region [Description] ve ile biten//endregion
Amir Ziarati

Yanıtlar:


216

Böyle standart bir eşdeğeri yok. Bazı IDE'ler - örneğin Intellij veya Eclipse - dahil olan kod türlerine (yapıcılar, ithalatlar vb.) Bağlı olarak katlanabilir, ancak buna benzer bir şey yoktur #region.


30
Aslında bu elde edilebilir. Eğer bu yazıyı aşağı kaydırırsanız "Yaqub Ahmad" bu işlevi nasıl alacağınızı açıklar. Ayrıca , mevcut tutulma ortamınıza nasıl ekleyeceğinizi gösteren bir bağlantı ( kosiara87.blogspot.com/2011/12/… ) ... son derece yararlı!
cking24343

14
Elbette. Ama standart bir şey yok . Bir dil (veya metin) yapısı yerine IDE'lerde gerçekleştirilir
Brian Agnew

2
@lKashef - o zaman standart eşdeğeri nedir? Aşağıda belirtilen her şey belirli bir IDE ile ilgilidir, değil mi?
Brian Agnew

4
@BrianAgnew, OP standartlar hakkında hiçbir şey söylemedi, bunun yerine kodunda bölgelere benzer bloklar olmasını istiyordu. Örneğin, "fakat #region gibi bir şey yok" dediniz. IDEA'da örneğin // bölge .. // endregion tam olarak #region gibi çalışır. IDE'nin kendisine veya bir eklentiye bağlı olduğu için bunu ilk olarak yapmanın standart bir yolu yoktur. Microsoft arka planına sahip geliştiriciler MS Visual Studio'yu her zaman "IDE" olarak görürler, ancak aslında bu seçeneklerden sadece biridir ve başka bir IDE bu tür işlevleri uygulayabilir veya uygulamıyor olabilir.
Mazen Elkashef

4
@BrianAgnew, diğer insanların yanıtlarını sizinkinden daha fazla yardımcı olana kadar neredeyse vazgeçtim. Burada ciddi bir his yok, hepimiz bilgimizi öğrenmek ve paylaşmak için buradayız ve cevabınızla yanıltıcı olduğumu söylüyorum, belki 2010'da iyi bir şeydi ama bugün değil. Umarım anladım.
Mazen Elkashef

476

Jet Brains IDEA bu ​​özelliğe sahiptir. Bunun için kısayol tuşu surround tuşunu kullanabilirsiniz (ctrl + alt + T). Sadece IDEA özelliği.

Oradaki bölgeler şöyle:

//region Description

Some code

//endregion

3
Bunun için teşekkürler! Android Studio'da mükemmel çalışır.
rogcg

2
Soru, Eclipse için açıkça bir çözüm talep ediyor.
Duncan Jones

5
@Duncan 1. İnsanlara alternatifler olduğunu göstermek yanlış olmaz. 2. Intellij altındaki bölgeler için Google'ı buldum ve buldum.
BHuelse

2
Linux'ta bu kısayol terminali çalıştırır
user1209216

1
Sadece denedim ve IntelliJ iç içe bölgeleri de destekliyor gibi görünüyor! Çok kötü bu standart değil.
Gruber

209

Android Studio ile şunu deneyin:

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

Dikkatli: // bölgeden sonra boş satır yok ...

Ve alacaksınız:


tüm yanıtlar üzerinden geçiyordu ve Android Studio'nun IntelliJ'e dayandığı için bu durumda desteklenmesi gerekiyor. olsa işaret etmek iyi bir şey!
serin

5
bummi, boş bir çizgi ile 0.4.2'de denedim ve hala çalışıyor
serin

2
Sadece bir yorum / tavsiye (ve hiçbir şekilde sorunuza bir cevap). Kodlama stiliniz üzerinde çalışmak yerine sınıf karmaşıklığını gizlemenize izin verdiği için bölgelerin kaçınılması gerektiği yaygın bir görüştür. Her sınıfın çok fazla işlevsellikten sorumlu olduğu dev sınıflar yerine, kodunuzu daha küçük sınıflara ayırmaya çalışın. Kodunuzun zaman içinde yönetilmesini kolaylaştıracaktır. Daha fazla bilgiyi
Daniel Saidi

5
@DanielSaidi oh, korku! :) Makaledeki adam " Hiçbir şey göremiyorum! Bu sınıftaki kodlardan herhangi birine göz atmak için bu bölümleri manuel olarak genişletmeliyim. " ... çünkü bir tuşa basamayacak kadar tembel olduğu için bölümler), özellik kullanılmamalıdır - süper harika bir özellik. Şu anda tek tek kullanıyorum, doğruladığım yöntemleri saklıyorum, çalıştığım sınıfta iş parçacığı güvenli, gerçekten düzenli kalmaya yardımcı oluyor.Bir arada bir şeyin nerede olduğunu merak ettim Ben orada olduğunu düşündüm, ama bu ödemek için küçük bir fiyat ...
ycomp

4
@DanielSaidi Bu, karmaşıklığı gizlemek değil, değişken bildirimler, alıcılar, başlatma kodu ve benzeri gibi sıradan kodları gizlemekle ilgilidir. Ayrıca, işlevlerde ve sınıflarda bulunan "karmaşık kodu" daraltmak için #regions GEREKMEZ OLMADIĞINI unutmayın. Bir aracı yanlış bir şekilde kullanan programcılar ile yapılan sığır eti "takım kötü" anlamına gelmez.
user1567453

96

Dilde karşılığı yok ... IDE'lere dayanarak ...

Örneğin netbeans'te:

NetBeans / Creator bu sözdizimini destekler:

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

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


1
Her ne kadar dile özgü bir katlama olmasa da NetBeans'te hala bana yardımcı oldu. Tam olarak ne elde etmek istediğimi. Kodumun benim için daha kullanışlı ve düzenli olmasını istiyorum.
Indigo

Bu satırı otomatik olarak doldurabilecek herhangi bir kısayol var mı?
Pini Cheyni

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html , katlama için kısayollara sahip ....
Kevin LaBranche

@JadChahine: OP Eclipse'i sordu, ancak NetBeans için bu işe yarar. Sözdizimi biraz sakar ama kopyala yapıştır yeterince kolay.
AlainD


49

CoffeeScript kod katlama eklentisi kullanılarak tutulmaya özel kod katlama özelliği eklenebilir.

Tutulma Luna ve Juno ile çalıştığı test edilmiştir. İşte adımlar

  1. Eklentiyi buradan indirin

  2. Arşiv içeriğini çıkart

  3. Eklenti ve özellikler klasörünün içeriğini eclipse kurulum dizini içindeki aynı adlı klasöre kopyalayın
  4. Tutulmayı yeniden başlatın
  5. Gezin Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    resim açıklamasını buraya girin

  6. Gösterildiği gibi yeni bölge oluşturun:

    resim açıklamasını buraya girin

  7. Eclipse'i yeniden başlatın.

  8. Katlamanın, belirtilen başlangıç ​​ve bitiş tanımlayıcılarıyla ön ekli yorumlarla çalışıp çalışmadığını deneyin

    resim açıklamasını buraya girin

    resim açıklamasını buraya girin

Bu Blog'da da arşiv indirebilir ve adımlar bulabilirsiniz .


2
tutulma neon benim için çalışmıyor: kopyala ve yapıştır hiçbir şey yapmadı: değişen tek şey pazar >> altında eklentiler >> güncelleme altındaydı. CoffeeScript eklentisini güncelledim, ancak java >> editor >> folding
Angelo Oparah

Eclipse Oxygen'te çalıştı, ancak eclipse'yi yeniden başlatmanız gerekiyor. Bana görüntülenen simge kırmızı bir simgeydi, bu yüzden yapılandırmada değiştirdim, Pencere → Tercih → Java → Editör → Gelişmiş sekmesinde Katlama tıklaması ve Modern
Michieru

38

Bu, bir dil özelliğinden çok bir IDE özelliğidir. Netbeans , aşağıdaki tanımı kullanarak kendi katlama tanımlarınızı tanımlamanıza izin verir :

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

Makalede belirtildiği gibi, bu diğer editörler tarafından da desteklenebilir, ancak garanti yoktur.


Android stüdyosunda, en azından bir bloğun bir kısmını katlayamazsınız. Katlama spesifikasyonu bir bloğun dışında başlar ve bir bloğun içinde biterse, etkinleşmez.
Prof Von Lemongargle

30

Android Studio(veya IntelliJ IDEA) içinde en hızlı yol

  1. highlight the code onu çevrelemek istiyorsun
  2. ctrl+ alt+ tuşlarına basınt
  3. c==> tuşuna basın ve açıklamayı girin
  4. zevk almak

// bölge <ad> Kodunuz ... // endregion Daha verimli ve basit! hehe; P
diegodsp

30

AndroidStudiobölge Bölge
oluştur

ÖnceSurround With menü için bulun (ve gerekirse kısayolu tanımlayın)resim açıklamasını buraya girin

Ardından kodu seçin, Ctrl+Alt+Semicolon-> tuşuna basın.region..endregion...
resim açıklamasını buraya girin

Bölgeye git

İlk olarak, Custom Foldingkısayolu bulun
resim açıklamasını buraya girin İkinci olarak, kodunuzun herhangi bir yerinden,Ctrl+Alt+Period('>' on keyboard) resim açıklamasını buraya girin


20

Çoğu gönderinin aksine, bu bir IDE şey DEĞİLDİR. Bu bir dil şeyidir. #Region bir C # ifadesidir.


55
En çok yayınladığı şey IN JAVA bu bir IDE özelliği olmasıdır.
WhyNotHugo

1
Böyle bir dil özelliği olmadığını söyleyen en popüler 2 yanıtı görüyorum. -1.
Mohayemin

23
C # 'da kısmen IDE, kısmen dildir. Dil önişlemci yönergelerini destekler, ancak önişlemci bunları basitçe yok sayar (işlemcinin yorumları görmezden geldiği gibi). IDE (Visual Studio) bunları kod katlama yapmak için kullanır.
ADTC

Java sadece IDE (Netbeans) sahip kod katlama belirtmedi, Netbeans "TODO" ve daha fazlası gibi daha özel yorumlar var. SW proje geliştirme sürecindeki ilerlemenizi takip etmek için çok faydalılar
Pini Cheyni

17

C # dan java geliyordu ve aynı sorunu vardı ve bölge için en iyi ve kesin alternatif aşağıdaki gibi bir şeydir (Android Studio'da çalışma, intelliJ hakkında bilmiyorum):

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

kısayol aşağıdaki gibidir:

1- kodu seçin

2- ctrl+ alt+ tuşlarına basınt

3- Basın cve açıklamanızı yazın


AndroidStudio sürüm 2.3.1'de katlanır. Ne zaman katlanmaya başladığını bilmiyorum.
MiguelSlv

Teşekkürler. Android Studio 3.0 beta 2'de mükemmel çalışır. Eclipse Oxygen'te denediğim merakla, varsayılan olarak çalışmıyor, ancak daha fazla arama yapmadı.
Laurent

15

En iyi yol

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

İpucu: ";" "son bölge" nin sonunda


1
tutulma kodu katlamayın, hangi IDE kullanıyorsunuz?
Ohad Cohen

Android Studio ve IntelliJ IDEA ile çalışır (her ikisi de JetBrains tarafından aynı kod tabanından yapılır)
prashu132

IDE "entegre geliştirme ortamı" anlamına geliyor
Pini Cheyni

12

Herkes ilgileniyorsa, Eclipse'de tüm yöntemlerinizi vb. Tek seferde daraltabilirsiniz, normalde bir kırılma noktası eklediğinizde sağ tıklayın, 'Katlama'> 'Tümünü Daralt'ı tıklayın. Bunun sorunun cevabı olmadığını, sadece hızlı kod katlama alternatifi olduğunu biliyor.


1
Ayrıca bir kaynak kodu dosyasını açarken Eclipse'in her şeyi otomatik olarak daraltmasını sağlayabilirsiniz. Tercihler> Java> Editör> Katlama> "Başlangıçta bu öğeleri katla" (listedeki tümünü kontrol et). Özellikle uzun kaynak kod dosyalarında ihtiyacım olan şeylere odaklanmayı uygun buluyorum.
ADTC

@ADTC - Teşekkürler - yüzlerce kez bir dosyayı her açışımda manuel olarak yaptım - bir daha asla!
ToolmakerSteve

Bir bilgisayarda elle şey tekrarlayan yapabiliyorsa @ToolmakerSteve, sadece orada vardır bunu otomatik hale getirmek için bir yol olarak. = D
ADTC

8
#region

// code

#endregion

Gerçekten sadece IDE size herhangi bir yarar sağlar. Java ile IDE'de belirlenmiş bir standart yoktur, bu yüzden buna paralel bir standart yoktur #region.


3
Peki bir standart varsa region, java IDE'lerin bunu destekleyeceğinden emin olabilir miyiz ?
Pacerier

@Pacerier bu standardı destekliyorlarsa, evet. Bence #region bir standarttan çok bir IDE özelliği. Teoride java IDE'ler bu davranışı uygulayabilir ve fiili bir standart haline getirebilir
El Mac

4

işte bir örnek:

//region regionName
//code
//endregion

% 100 Android stüdyosunda çalışıyor


Neden indirildiğini bilmiyorum, bu aslında herhangi bir yapılandırma gerektirmeden Android Studio'da çalışıyor!
maxdelia

2

Ben genellikle yorum kodu için bu gerekir, bu yüzden başında ve sonunda kıvırcık parantez kullanın.

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

Kod parçacıkları için kullanılabilir, ancak değişkenin kapsamını değiştirdiği için bazı kodlarda sorunlar oluşturabilir.


1

Aslında johann, #bunun bir önişlemci yönergesi olduğunu gösterir, bu da temel olarak IDE'ye ne yapacağını söylemesi anlamına gelir.

#regionVe kullanılması durumunda#endregion kodunuzda, onu orada olup olmadığına nihai kodunda YOK fark yaratıyor. Kullanmak hiçbir şey değiştirmezse buna gerçekten bir dil öğesi diyebilir misiniz?

Bunun dışında, java önişlemci direktiflerine sahip değildir, yani kod katlama seçeneği netbeans'te örneğin // <code-fold> ifadesiyle tanımlanır.


1
eğer kullanıldığında hiçbir şey değişmezse buna gerçekten bir dil elemanı diyebilir misiniz? - yorumlar nasıl?
epeleg

2
Daha önce bu argümanın dilin bir işlevi olmadığını duydum. Ve bu soru "Kullanmak hiçbir şeyi değiştirmezse buna gerçekten bir dil öğesi diyebilir misiniz?" saçmalık. Çoğu zaman yeniden düzenleme, kodun insanlar için daha kolay okunmasını sağlar ve kodun işlevini etkilemek için (umarım) hiçbir şey yapmaz.
Menefee

1

Mac ve Android Studio'da şu sırayı izleyin:

  1. Katlamak için kaynak kodunu vurgulayın
  2. Alt+ Command+ Tuşlarına basınt
  3. seçmek <editor-fold>

Ayrıca diğer seçenekleri de seçebilirsiniz:

resim açıklamasını buraya girin


-1

Eclipse içinde değişken bölge bloğunu saran parantezleri daraltabilirsiniz. En yakın şey böyle bir şey yapmaktır:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
Bu işe yaramaz. Bir yöntemin içinde çalışmaz, ayrıca KODU KIRILIR! (Özel değişkenler nihai olmak istediklerinden şikayet edecektir. Kapsam tanımı olmayan değişkenlere iç parantezlerin dışında erişilemez!)
ADTC

1
Bu yöntemi sevmiyorum, çok fazla kıvırcık parantez ekliyor. Bu, kafa karıştırıcı kodlara yol açabilir :(
Broken_Window


-12

Aynı ulaşmak için bazı seçenek var, Aşağıdaki noktaları izleyin.

1) Açık Makro gezgini:

2) Yeni makro oluştur:

3) "OutlineRegions" olarak adlandırın (Ya da ne istersen)

4) "OutlineRegions" üzerine sağ tıklayın (Macro Explorer'da gösteriliyor) "Düzenle" seçeneğini seçin ve aşağıdaki VB kodunu yapıştırın:

    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) Makroyu kaydedin ve düzenleyiciyi kapatın.

6) Şimdi makroya kısayol atayalım. Araçlar-> Seçenekler-> Çevre-> Klavye'ye gidin ve "içeren komutları göster" metin kutusunda makronuzu arayın (Metin kutusuna Tür: Makro, makroların adını önerir, sizinkini seçer.)

7) şimdi metin kutusuna "Kısayol tuşlarına basın" altında istediğiniz kısayolu girebilirsiniz. Ctrl + M + N kullanıyorum.

kullanın:

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

8) Kayıtlı kısayol tuşuna basın

Aşağıdaki sonuca bakın:

resim açıklamasını buraya girin


Makro Gezgini nerede? Eclipse 4.3.1 kullanıyorum ve bulamıyorum.
Mohamed El-Nakib

1
Bu Java bile değil mi?
Burak Karakuş

@CJBS - re: This code seems to be for Visual Basic.NETIDE'nin olduğunu gösterir Visual Studio.
Jesse Chisholm

@JesseChisholm - bu benim açımdan. OP, VB'yi değil Java'yı istiyor ve VS'yi değil Eclipse IDE'yi hedefliyor.
CJBS

1
RIP yanıtı. Eğer görsel stüdyo kullanıyor olsaydı, sadece kullanabilirdi #regionve#endregion
PNDA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.