Java tương đương với #region trong C #


489

Tôi muốn sử dụng các vùng để gấp mã trong Eclipse ; Làm thế nào điều đó có thể được thực hiện trong Java?

Một ví dụ sử dụng trong C # :

#region name
//code
#endregion

@MichaelLaVoie: câu trả lời đã bị xóa. Bất kỳ cơ hội nào nó đã được chuyển đến một trang web SE khác?
Adam Parkin

1
lập trình viên.stackexchange.com/questions/53086 / Hy dường như tương tự về tinh thần.
Adam Parkin

Tôi tham gia bữa tiệc muộn. Tôi đồng ý với IKashef rằng có những lựa chọn khác mà câu trả lời được chọn hiện tại. Câu trả lời của Yaqub Ahmad đã cứu mạng tôi. Tôi không cần tải xuống IDE thông minh. Tôi đã tải xuống plugin CoffeeBytes được đề cập từ nhận xét của cking24343, tôi đã áp dụng cấu hình 'null n void' và hoạt động tốt trong Luna. Bạn cần khởi động lại sau khi áp dụng cấu hình
Maximus Decimus

3
bắt đầu //region [Description] và kết thúc với//endregion
Amir Ziarati

Câu trả lời:


216

Không có tiêu chuẩn tương đương như vậy . Một số IDE - ví dụ như Intellij hoặc Eclipse - có thể gập lại tùy thuộc vào các loại mã liên quan (hàm tạo, nhập khẩu, v.v.), nhưng không có gì giống như vậy #region.


30
Trên thực tế điều này có thể đạt được. Nếu bạn cuộn xuống trên bài đăng này "Yaqub Ahmad" giải thích làm thế nào để có được chức năng này. Ngoài ra đây là một liên kết ( kosiara87.blogspot.com/2011/12/ trên ) cho bạn biết cách thêm nó vào môi trường nhật thực hiện tại của bạn ... cực kỳ hữu ích!
cking24343

14
Chắc chắn rồi. Nhưng không có gì tiêu chuẩn . Nó được thực hiện trong IDE thay vì có cấu trúc ngôn ngữ (hoặc văn bản)
Brian Agnew

2
@lKashef - vậy tiêu chuẩn tương đương là gì? Mọi thứ được ghi chú dưới đây liên quan đến một IDE cụ thể, phải không?
Brian Agnew

4
@BrianAgnew, OP đã không đề cập bất cứ điều gì về các tiêu chuẩn thay vào đó anh ta chỉ muốn có thể có các khối giống như các vùng trong mã của mình. Chẳng hạn, bạn nói "nhưng không có gì giống như #region." trong IDEA chẳng hạn // khu vực .. // endregion hoạt động chính xác như #region. Không có cách tiêu chuẩn nào để thực hiện việc này ngay từ đầu vì nó phụ thuộc vào chính IDE hoặc plugin. Các nhà phát triển có nền tảng microsoft sẽ luôn xem MS Visual Studio là "IDE" nhưng thực tế nó chỉ là một trong các tùy chọn và một IDE khác có thể hoặc không thể thực hiện chức năng đó.
Mazen Elkashef

4
@BrianAgnew, tôi gần như bỏ cuộc cho đến khi tôi thấy câu trả lời của người khác giúp ích nhiều hơn câu trả lời của bạn. Nghiêm túc không có cảm giác khó khăn ở đây, tất cả chúng tôi ở đây để tìm hiểu và chia sẻ kiến ​​thức của chúng tôi và nói rằng tôi đã bị đánh lừa bởi câu trả lời của bạn, có thể đó là một điều tốt trong năm 2010 nhưng không phải hôm nay. Tôi mong rằng bạn hiểu ý của tôi.
Mazen Elkashef

476

Jet Brains IDEA có tính năng này. Bạn có thể sử dụng phím nóng bao quanh cho điều đó (ctrl + alt + T). Đó chỉ là tính năng IDEA.

Các khu vực trông như thế này:

//region Description

Some code

//endregion

3
Cảm ơn vì điều đó! Hoạt động hoàn hảo trên Android Studio.
rogcg

2
Câu hỏi rõ ràng yêu cầu một giải pháp cho Eclipse.
Duncan Jones

5
@Duncan 1. Không có gì sai khi chỉ cho mọi người thấy có những lựa chọn thay thế. 2. Tôi google cho các khu vực dưới Intellij và tìm thấy nó.
BHuelse

2
Trên Linux, phím nóng đó chạy thiết bị đầu cuối
user1209216

1
Chỉ cần thử nó và có vẻ như IntelliJ cũng hỗ trợ các vùng lồng nhau! Quá tệ, điều này không chuẩn.
Gruber

209

Với Android Studio, hãy thử điều này:

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

Cẩn thận: không có dòng trống nào sau // vùng ...

Và bạn sẽ nhận được:


đã xem qua tất cả các câu trả lời và hình dung vì Android Studio dựa trên IntelliJ nên điều này phải được hỗ trợ. điều tốt để chỉ ra mặc dù!
serine

5
bummi, tôi đã thử nó vào 0.4.2 với một dòng trống và vẫn hoạt động
serine

2
Chỉ cần một nhận xét / lời khuyên (và không có nghĩa là một câu trả lời cho câu hỏi của bạn). Đó là một ý kiến ​​phổ biến rằng các khu vực nên tránh, vì chúng cho phép bạn che giấu sự phức tạp của lớp thay vì làm việc theo phong cách mã hóa của bạn. Thay vì các lớp lớn, trong đó mỗi lớp chịu trách nhiệm cho rất nhiều chức năng, thay vào đó, hãy chia nhỏ mã của bạn thành các lớp nhỏ hơn. Nó sẽ làm cho mã của bạn dễ dàng quản lý theo thời gian. Đọc thêm tại đây: blog.codinghorror.com/the-probols-with-code-f khuôn mặt
Daniel Saidi

5
@DanielSaidi ôi, kinh hoàng! :) anh chàng trong bài viết " Tôi không thể nhìn thấy bất cứ điều gì! Tôi phải tự mở rộng các phần đó để duyệt bất kỳ mã nào trong lớp này. " ... vì vậy anh ta quá lười để bấm một phím (woulld mở rộng tất cả các phần trong tệp), tính năng này không được sử dụng - đó là một tính năng siêu tuyệt vời. Ngay bây giờ tôi đang sử dụng từng cái một để ẩn các phương thức mà tôi đã xác minh là an toàn cho luồng trong lớp Tôi đang làm việc, nó thực sự giúp giữ cho tổ chức. Thỉnh thoảng tôi tự hỏi không biết thứ gì ở đâu đó Tôi nghĩ là có, nhưng đó là một cái giá nhỏ phải trả ...
ycomp

4
@DanielSaidi Không phải là về việc che giấu sự phức tạp mà là ẩn mã trần tục như khai báo biến, getters, mã khởi tạo, v.v. Cũng lưu ý rằng bạn KHÔNG yêu cầu #regions thu gọn "mã phức tạp" được tìm thấy trong các hàm và lớp. Thịt bò với các lập trình viên sử dụng một công cụ không chính xác không có nghĩa là "công cụ này là xấu".
dùng1567453

96

Không có ngôn ngữ tương đương ... Dựa trên IDE ...

Ví dụ trong netbeans:

NetBeans / Creator hỗ trợ cú pháp này:

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

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


1
Mặc dù nó không phải là ngôn ngữ cụ thể nhưng vẫn giúp tôi trong NetBeans. Chính xác những gì tôi muốn đạt được. Chỉ muốn mã của tôi trở nên tiện dụng và có tổ chức hơn cho tôi.
Indigo

Có bất kỳ phím tắt có thể tự động điền vào dòng này?
Pini Cheyni 14/03/2016

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html có các phím tắt có sẵn để gấp ....
Kevin LaBranche

@JadChahine: OP đã hỏi về Eclipse, nhưng đồng ý điều này hoạt động tốt với NetBeans. Cú pháp là một chút vụng về nhưng sao chép-dán làm cho nó đủ dễ dàng.
AlainD

50

7
+1 cảm ơn vì thông tin này. Vì trang web ban đầu của nhà phát triển plugin không còn khả dụng vào năm 2012 - tôi đã tìm thấy một bản trích dẫn ngắn để cài đặt và sử dụng .
k3b

bất cứ ai tìm thấy một thay thế intelliJ?
philx_x

Liên kết tải xuống không còn tồn tại.
derHugo

49

Tính năng gấp mã tùy chỉnh có thể được thêm vào nhật thực bằng cách sử dụng plugin gấp mã CoffeeScript.

Điều này đã được thử nghiệm để làm việc với nhật thực Luna và Juno. Dưới đây là các bước

  1. Tải về plugin từ đây

  2. Trích xuất nội dung lưu trữ

  3. Sao chép dán nội dung của thư mục plugin và tính năng vào cùng thư mục có tên trong thư mục cài đặt nhật thực
  4. Khởi động lại nhật thực
  5. Điều hướng Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    nhập mô tả hình ảnh ở đây

  6. Tạo vùng mới như được hiển thị:

    nhập mô tả hình ảnh ở đây

  7. Khởi động lại Eclipse.

  8. Hãy thử nếu gấp hoạt động với các nhận xét có tiền tố với các định danh bắt đầu và kết thúc được chỉ định

    nhập mô tả hình ảnh ở đây

    nhập mô tả hình ảnh ở đây

Bạn có thể tải về kho lưu trữ và tìm các bước tại Blog này .


2
không hoạt động với tôi trên nhật thực neon: sao chép và dán không làm gì cả: điều duy nhất thay đổi là dưới thị trường >> các plugin đã cài đặt >> cập nhật. Tôi đã cập nhật plugin coffeeScript, nhưng tôi không nhận được tùy chọn "Chọn gấp để sử dụng" trong java >> trình soạn thảo >> gấp
Angelo Oparah

Nó hoạt động trong Oxy Oxygen, tuy nhiên bạn cần phải khởi động lại nhật thực một lần nữa. Biểu tượng hiển thị cho tôi là biểu tượng màu đỏ nên tôi đã thay đổi cấu hình, Cửa sổ → Tùy chọn → Java → Trình chỉnh sửa → Nhấp chuột vào tab Nâng cao và thay đổi chủ đề Biểu tượng được đặt thành Hiện đại
Michieru

38

Đây là một tính năng IDE nhiều hơn là một tính năng ngôn ngữ. Netbeans cho phép bạn xác định các định nghĩa gấp của riêng bạn bằng cách sử dụng định nghĩa sau:

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

Như đã lưu ý trong bài viết, điều này cũng có thể được hỗ trợ bởi các biên tập viên khác, nhưng không có gì đảm bảo.


Trong studio Android, ít nhất, bạn không thể gấp một phần của một khối. Nếu thông số kỹ thuật gấp bắt đầu bên ngoài một khối và kết thúc bên trong một khối, nó sẽ không kích hoạt.
Giáo sư Von Lemongargle

30

cách nhanh nhất trong Android Studio(hoặc IntelliJ IDEA)

  1. highlight the code bạn muốn bao quanh nó
  2. nhấn ctrl+ alt+t
  3. nhấn c==> sau đó nhập mô tả
  4. thưởng thức

// vùng <name> Mã của bạn ... // endregion Hiệu quả và đơn giản hơn! hehe; P
diegodsp 28/03/2017

30

AndroidStudiovùng
Tạo vùng

Đầu tiên , tìm (và xác định cắt ngắn nếu cần) cho Surround Withmenu nhập mô tả hình ảnh ở đây

Sau đó , chọn mã, nhấn Ctrl+Alt+Semicolon-> chọnregion..endregion...
nhập mô tả hình ảnh ở đây

Đi đến khu vực

Đầu tiên, tìm Custom Foldingđường tắt
nhập mô tả hình ảnh ở đây thứ hai, từ bất kỳ đâu trong mã của bạn, nhấnCtrl+Alt+Period('>' on keyboard) nhập mô tả hình ảnh ở đây


20

Trái với những gì hầu hết đang đăng, đây KHÔNG phải là một điều IDE. Đó là một điều ngôn ngữ. #Region là một câu lệnh C #.


55
Điều mà hầu hết đang đăng là IN JAVA đây là một tính năng IDE.
WhyNotHugo

1
Tôi thấy 2 câu trả lời phổ biến nhất nói rằng không có tính năng ngôn ngữ như vậy. -1.
Mohayemin

23
Trong C #, nó là một phần IDE, một phần ngôn ngữ. Ngôn ngữ hỗ trợ các chỉ thị tiền xử lý, nhưng bộ xử lý trước đơn giản bỏ qua chúng (giống như cách bộ xử lý bỏ qua các nhận xét). IDE (Visual Studio) sử dụng chúng để thực hiện gấp mã.
ADTC

Java không chỉ định mã gấp chỉ IDE (Netbeans) có, Netbeans có nhiều nhận xét đặc biệt hơn như "TODO" và hơn thế nữa. Chúng rất hữu ích để theo dõi tiến trình của bạn thông qua quá trình phát triển dự án SW
Pini Cheyni 17/03/2016

17

Tôi đã đến từ C # sang java và gặp cùng một vấn đề và sự thay thế chính xác và tốt nhất cho khu vực là một cái gì đó như dưới đây (làm việc trong Android Studio, không biết về intelliJ):

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

các phím tắt như dưới đây:

1- chọn mã

2- bấm ctrl+ alt+t

3- nhấn cvà viết mô tả của bạn


Trong phiên bản AndroidStudio 2.3.1, nó gập lại. Tôi không biết khi nào nó bắt đầu gấp.
MiguelSlv

Cảm ơn. Hoạt động hoàn hảo trong Android Studio 3.0 beta 2. Vì tò mò tôi đã thử trong Eclipse Oxygen, nó không hoạt động theo mặc định nhưng không tìm kiếm thêm.
Laurent

15

Cách tốt nhất

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

Mẹo: Đặt ";" ở cuối "endregion"


1
nhật thực không gấp mã, bạn đang sử dụng IDE gì?
Ohad Cohen

Nó hoạt động với Android Studio và IntelliJ IDEA (cả hai đều được tạo từ cùng một cơ sở mã của JetBrains)
prashu132

IDE là viết tắt của "môi trường phát triển tích hợp"
Pini Cheyni 17/03/2016

12

Nếu bất cứ ai quan tâm, trong Eclipse, bạn có thể thu gọn tất cả các phương thức của mình, v.v. chỉ trong một lần, chỉ cần nhấp chuột phải khi bạn thường chèn một điểm dừng, nhấp vào 'Folding'> 'Thu gọn tất cả'. Nó biết đó không phải là một câu trả lời cho câu hỏi, mà chỉ cung cấp một giải pháp thay thế cho việc gấp mã nhanh.


1
Bạn cũng có thể tự động thu gọn mọi thứ khi mở tệp mã nguồn. Tùy chọn> Java> Trình soạn thảo> Gấp> "Ban đầu gấp các phần tử này" (kiểm tra tất cả trong danh sách). Tôi thấy thuận tiện khi chỉ tập trung vào những gì tôi cần đặc biệt là trong các tệp mã nguồn dài.
ADTC

@ADTC - Cảm ơn - rất nhiều lần tôi đã thực hiện thủ công mỗi lần tôi mở tệp - không bao giờ nữa !!
ToolmakerSteve

@ToolmakerSteve Nếu bạn có thể làm bất cứ điều gì lặp đi lặp lại bằng tay trên máy tính, chỉ có phải là một cách để tự động nó. = D
ADTC

8
#region

// code

#endregion

Thực sự chỉ mang lại cho bạn bất kỳ lợi ích trong IDE. Với Java, không có tiêu chuẩn nào được thiết lập trong IDE, vì vậy thực sự không có tiêu chuẩn song song nào #region.


3
Chà, nếu có một tiêu chuẩn region, thì chúng ta có thể chắc chắn rằng java IDE sẽ hỗ trợ không?
Pacerier

@Pacerier nếu họ hỗ trợ tiêu chuẩn đó, vâng. Tôi nghĩ rằng #region là một tính năng IDE hơn là một tiêu chuẩn. Về lý thuyết, java IDE có thể thực hiện hành vi này và biến nó thành một tiêu chuẩn thực tế
El Mac

4

đây là một ví dụ:

//region regionName
//code
//endregion

100% hoạt động trong studio Android


Tôi không biết lý do tại sao bạn bị hạ cấp, điều này thực sự hoạt động trong Android Studio mà không cần bất kỳ cấu hình nào!
maxdelia

2

Tôi thường cần mã này cho mã nhận xét vì vậy tôi sử dụng dấu ngoặc nhọn ở đầu và cuối của mã đó.

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

Nó có thể được sử dụng cho các đoạn mã nhưng có thể tạo ra các vấn đề trong một số mã vì nó thay đổi phạm vi của biến.


1

Trên thực tế là johann, #chỉ ra rằng đó là một chỉ thị tiền xử lý, về cơ bản có nghĩa là nó cho IDE biết phải làm gì.

Trong trường hợp sử dụng #region#endregiontrong mã của bạn, điều đó làm cho KHÔNG có sự khác biệt trong mã cuối cùng cho dù nó có ở đó hay không. Bạn thực sự có thể gọi nó là một yếu tố ngôn ngữ nếu sử dụng nó không thay đổi gì?

Ngoài ra, java không có các chỉ thị tiền xử lý, điều đó có nghĩa là tùy chọn gập mã được xác định trên cơ sở mỗi ide, ví dụ như trong netbeans với câu lệnh // <code-Fold>


1
bạn thực sự có thể gọi nó là một yếu tố ngôn ngữ nếu sử dụng nó không thay đổi gì? - Thế còn ý kiến?!
epeleg

2
Tôi đã nghe lập luận trước đây rằng đó không phải là một chức năng của ngôn ngữ. Và câu hỏi này "Bạn thực sự có thể gọi nó là một yếu tố ngôn ngữ nếu sử dụng nó không thay đổi gì không?" thật nực cười. Rất nhiều thời gian tái cấu trúc đang làm cho mã dễ đọc hơn đối với con người và không làm gì (hy vọng) sẽ tác động đến chức năng của mã.
Menefee

1

Trên Mac và Android Studio theo trình tự này:

  1. Đánh dấu mã nguồn để gấp
  2. Nhấn Alt+ Command+t
  3. Lựa chọn <editor-fold>

Ngoài ra, bạn có thể chọn các tùy chọn khác:

nhập mô tả hình ảnh ở đây


-1

Trong Eclipse, bạn có thể thu gọn khối đóng gói biến vùng. Gần nhất là làm một cái gì đó như thế này:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
Điều này là vô ích. Nó không hoạt động bên trong một phương thức, cộng với MÃ SỐ BREAKS! (Các biến riêng sẽ phàn nàn rằng chúng muốn là cuối cùng. Biến không có định nghĩa phạm vi sẽ không thể truy cập được bên ngoài dấu ngoặc trong!)
ADTC

1
Tôi không thích phương pháp này, thêm quá nhiều dấu ngoặc nhọn. Điều này có thể dẫn đến mã khó hiểu :(
Broken_Window


-12

Có một số tùy chọn để đạt được điều tương tự, Thực hiện theo các điểm dưới đây.

1) Mở trình thám hiểm Macro:

2) Tạo macro mới:

3) Đặt tên là "OutlineRegions" (Hoặc bất cứ điều gì bạn muốn)

4) Nhấp chuột phải vào "OutlineRegions" (Hiển thị trên Macro Explorer) chọn tùy chọn "Chỉnh sửa" và dán mã VB sau vào đó:

    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) Lưu macro và đóng trình chỉnh sửa.

6) Bây giờ hãy gán phím tắt cho macro. Chuyển đến Công cụ-> Tùy chọn-> Môi trường-> Bàn phím và tìm kiếm macro của bạn trong "hiển thị các lệnh chứa" hộp văn bản (Loại: Macro vào hộp văn bản, nó sẽ gợi ý tên macro, chọn tên của bạn.)

7) bây giờ trong hộp văn bản trong "Bấm phím tắt", bạn có thể nhập phím tắt mong muốn. Tôi sử dụng Ctrl + M + N.

Sử dụng:

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

8) Bấm phím tắt đã lưu

Xem kết quả dưới đây:

nhập mô tả hình ảnh ở đây


Macro Explorer ở đâu? Tôi đang sử dụng Eclipse 4.3.1 và không thể tìm thấy nó.
Mohamed El-Nakib 16/12/13

1
Đây thậm chí không phải là Java?
Burak Karakuş

@CJBS - re: This code seems to be for Visual Basic.NETsẽ đề xuất IDE Visual Studio.
Jesse Chisholm

@JlieChisholm - đó là quan điểm của tôi. OP muốn Java, không phải VB và đang nhắm mục tiêu IDE Eclipse, không phải VS.
CJBS

1
Trả lời RIP. Nếu anh ta đang sử dụng phòng thu trực quan, anh ta có thể đã sử dụng#region#endregion
PNDA
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.