จะทำเครื่องหมายส่วนตรรกะของโค้ดในข้อคิดเห็น Java ได้อย่างไร


93

โดยทั่วไปคลาส Java จะแบ่งออกเป็น "บล็อก" เชิงตรรกะ มีแบบแผนในการทำเครื่องหมายส่วนเหล่านี้หรือไม่? ตามหลักการแล้ว IDE หลัก ๆ จะได้รับการสนับสนุน

ฉันใช้วิธีนี้เป็นการส่วนตัว:

//// Section name here ////

อย่างไรก็ตามดูเหมือนว่าบรรณาธิการบางคนจะมีปัญหากับเรื่องนี้

ตัวอย่างเช่นในรหัส Objective-C คุณสามารถใช้วิธีนี้:

#pragma mark -
#pragma mark Section name here

ซึ่งจะส่งผลให้เมนูใน XCode มีลักษณะดังนี้:

ข้อความแสดงแทน


4
ในฐานะนักพัฒนา iOS นี่คือสิ่งที่ฉันพลาดมากที่สุดเมื่อเริ่มใช้ Android Studio
Chris Chen

1
ลดลง: ด้วย IDE และภาษาที่ทันสมัยมันเป็นการปฏิบัติที่ไม่ดี หากคุณต้องแบ่งส่วนรหัสของคุณคุณอาจละเมิดหลักการความรับผิดชอบเดียวไปแล้วและจะเป็นการดีกว่าที่จะแยกออกเป็นคลาส / ไฟล์ต่างๆ หากมีตัวแก้ไขหลายตัวก็จะไม่สามารถซิงค์ได้หลังจากนั้นสักครู่เนื่องจากบางคนจะทำตามสิ่งนี้บางตัวจะ refactor และจัดระเบียบโค้ดใหม่มิฉะนั้นการบันทึกและจัดรูปแบบอัตโนมัติจะทำให้โค้ดเสียหาย
f.carlsen

โหวตลง: ฉันเห็นด้วยกับ @ f.carlsen หากคุณโครงสร้างชั้นเรียนของคุณมีความคิดเห็นคุณจะมีโอกาสมากที่จะทำลายโสดรับผิดชอบต่อหลักการ
schrieveslaach

สำหรับผู้เกลียดชัง: โทรหาฉันเมื่อ Java สนับสนุนส่วนขยายคลาสสไตล์ Swift ซึ่งคุณสามารถแยกการใช้งานอินเทอร์เฟซของคุณออกเป็นส่วนต่างๆได้อย่างมีเหตุผล และใช่คลาสสามารถใช้งานอินเทอร์เฟซหลายตัวพร้อมกันได้ดี
William Entriken

คำตอบ:


68

โดยส่วนตัวฉันใช้ตัวคั่นบรรทัด 80 ตัวอักษรดังนี้:

public class Client {

    //================================================================================
    // Properties
    //================================================================================

    private String name;
    private boolean checked;

    //================================================================================
    // Constructors
    //================================================================================

    public Client() {
    }

    public Client(String name, boolean checked) {
        this.name = name;
        this.checked = checked;
    }

    //================================================================================
    // Accessors
    //================================================================================

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

}

แน่นอนว่านี่อาจดูเกินความจำเป็นไปหน่อยสำหรับ POJO ขนาดเล็กเช่นนี้ แต่เชื่อฉันเถอะว่ามันมีประโยชน์มากในโปรเจ็กต์ขนาดใหญ่บางโครงการที่ฉันต้องเรียกดูไฟล์ต้นฉบับขนาดใหญ่และค้นหาวิธีการที่ฉันสนใจอย่างรวดเร็วนอกจากนี้ยังช่วยให้เข้าใจ โครงสร้างซอร์สโค้ด

ใน Eclipse ฉันได้สร้างชุดเทมเพลตที่กำหนดเอง (Java -> Editor -> เทมเพลตในกล่องโต้ตอบการกำหนดลักษณะของ Eclipse) ที่สร้างแถบเหล่านั้นเช่น - ตัวคั่น (SEParator for Accessors) - sepp (SEParator for Properties) - sepc (SEParator for Constructors) - ฯลฯ

ฉันยังแก้ไขเทมเพลต "คลาสใหม่" มาตรฐาน (Java -> รูปแบบโค้ด -> เทมเพลตโค้ดในหน้าจอ Eclipse Preferences)

นอกจากนี้ยังมีปลั๊กอิน Eclipse เก่าที่เรียกว่าCoffee-bytesซึ่งปรับปรุงวิธีที่ Eclipse พับส่วนของโค้ด ฉันไม่รู้ว่ามันยังใช้งานได้หรือเปล่า แต่ฉันจำได้ว่าเราสามารถกำหนดโซนที่พับเก็บได้เองโดยการเพิ่มความคิดเห็นพิเศษเช่น // [SECTION] หรืออะไรสักอย่าง อาจยังใช้งานได้ในการแก้ไข Eclipse ล่าสุดดังนั้นลองดู


147

สำหรับสตูดิโอ intellij / android มีโซลูชันที่น่าทึ่ง
เริ่มต้นด้วย:
//region Description
และลงท้ายด้วย:
//endregion

ทางลัดที่อยู่ในเมนูที่คุณสามารถเปิดด้วยCommand+ Alt+ T(Mac) หรือCtrl+ Alt+ T(Windows)

คุณยังสามารถเพิ่มเส้นของคุณเองเพื่อแยกภาพเพิ่มเติมได้หากต้องการ ภูมิภาคสามารถหดและขยายได้ตามต้องการด้วยปุ่ม +/- เหมือนกับฟังก์ชันใด ๆ คุณยังสามารถนำทางระหว่างภูมิภาคต่างๆด้วยCommand+ Alt+ Period( Ctrl+ Alt+Period )

ที่มาแหล่ง

ตัวอย่าง:

//region Parceler Implementation
//---------------------------------------------------------------------------------------
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(this.die, 0);
    dest.writeParcelable(this.dieSprite, 0);
}

private DieVm(Parcel in) {
    this.die = in.readParcelable(Die.class.getClassLoader());
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader());
}

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() {
    public DieVm createFromParcel(Parcel source) {
        return new DieVm(source);
    }

    public DieVm[] newArray(int size) {
        return new DieVm[size];
    }
};
//---------------------------------------------------------------------------------------
//endregion

นี่เป็นประโยชน์อย่างเหลือเชื่อขอบคุณ Andrey BTW ฉันใช้รูปแบบแป้นพิมพ์ลัด eclipse และฉันไม่คิดว่าทางลัดใช้ได้กับฉัน แต่ '// region' ใช้งานได้ดี
ThinkBonobo

2
ฉันไม่เห็นวิธีใดที่จะให้สิ่งนี้ปรากฏในมุมมองโครงสร้างดังนั้นฉันจึงยังคงใช้สมาชิกว่างเปล่าปลอม (พร้อมกับระงับคำเตือนที่ไม่ได้ใช้)
ทอม

1
มีวิธีใดบ้างที่จะแสดงภูมิภาคเหล่านั้นใน Android Studio (มุมมองโครงสร้าง)
MiguelHincapieC

ลิงค์ตายแล้ว; นี้IntelliJ IDEA บล็อกอาจจะมีการอ้างอิงที่เป็นประโยชน์ นอกจากนี้ยังกล่าวถึงNetBeans <editor-fold ...>เหมือนรายการรูปแบบการพับ
Franklin Yu

คำตอบที่ดีที่สุด
Michał Ziobro

14

Eclipse กำหนดคำอธิบายประกอบ @category javadoc (เลื่อนไปที่ส่วนที่ระบุว่า "การสนับสนุนหมวดหมู่") ซึ่งเปิดใช้งานการกรองตามหมวดหมู่ในมุมมองเค้าร่าง ไม่ตรงตามที่คุณต้องการ ฉันแปลกใจที่ไม่มีใครเขียนปลั๊กอิน Eclipse ที่ให้มุมมองเหมือนกับภาพหน้าจอของคุณ


อย่างไรก็ตามในมุมมอง java ส่วนใหญ่เป็นไปได้ที่จะกรองสมาชิกคลาสตามหมวดหมู่เพื่อซ่อนเป็นตัวรับเริ่มต้นและตัวตั้งค่าดังตัวอย่าง
Riduidel

ไม่รู้ว่าทำไมฉันถึงใช้ @category ใน Android Studio ไม่ได้คุณรู้ไหมว่าฉันจะทำอย่างไรเพื่อให้เกิดพฤติกรรมเดียวกันกับมัน
MiguelHincapieC

6

ฉันชอบตอนนั้นด้วยเมื่อฉันใช้ xcode สำหรับ eclipse ฉันใช้ ctrl + o (โครงร่างด่วน) เพื่อนำทางผ่านคลาส Java


6

การใช้ความคิดเห็น / เครื่องหมายที่ไม่จำเป็นในโค้ดเพื่อช่วยในการทำงานอาจไม่ใช่แนวทางปฏิบัติที่ดี ฉันมีความคิดเล็กน้อยเกี่ยวกับการพัฒนา xcode และ java แต่การสนับสนุนของ IDE ที่สำคัญทั้งหมดในการค้นหาสมาชิกโดยไม่ต้องใช้เครื่องหมายพิเศษใด ๆ เช่น eclipse จะแสดงวิธีการและสมาชิกโดยใช้มุมมองเค้าร่างซึ่งสามารถเรียกใช้โดยใช้ctrl+OIntellij (ซึ่งฉันชอบใช้มากกว่าบน mac และมี ฉบับชุมชนด้วย) มีแนวคิดโครงร่างเดียวกันและสามารถเข้าถึงได้อย่างรวดเร็วโดยใช้ (ctrl + f12) ดังนั้นประเด็นของฉันที่นี่คืออย่าใช้มาร์กอัปที่ไม่จำเป็นในโค้ดเนื่องจาก IDE ทั้งหมด (หรืออย่างน้อยดี / มีเหตุผล) สามารถทำได้โดยอัตโนมัติ


2
เห็นด้วยเครื่องหมายส่วนจะเพิ่มลงในภาพเท่านั้น ชั้นเรียนของคุณควรมีสมาธิมากพอที่จะทำให้สิ่งเหล่านี้ไม่สามารถหลีกเลี่ยงได้
Paul McKenzie

15
แน่นอน แต่การมีวิธีการจัดกลุ่มเป็นส่วนตรรกะและการทำเครื่องหมายสามารถช่วยในการกำหนดลำดับภาพของสิ่งที่อาจเป็นรายการวิธีการแบบเรียบ บางครั้งคุณไม่ทราบแน่ชัดว่าต้องการใช้วิธีใดและเป็นเรื่องดีที่จะใช้วิธีการที่เกี่ยวข้องทั้งหมดในคราวเดียวและมีความคิดว่าคุณกำลังเห็นโค้ดที่เกี่ยวข้องทั้งหมด
Brian Rak

4

เท่าที่ฉันรู้ไม่มีสิ่งที่เรียกว่าข้อกำหนดที่รองรับสำหรับการจัดกลุ่มสมาชิกชั้นเรียนเข้าด้วยกัน คุณสามารถใช้รูปแบบการแสดงความคิดเห็นที่คุณชอบได้ แต่มีโอกาสที่เครื่องมือใด ๆ จะไม่รองรับ

จะเป็นการดีกว่าที่จะจัดกลุ่มสมาชิกที่เกี่ยวข้องเป็นคลาสแยกกันผ่านการสืบทอดหรือการรวมกลุ่ม นี่ถือเป็นรูปแบบ OOP ที่ดี


5
การแยกส่วนของโค้ดออกดูเหมือนจะเป็นไปได้ในทางทฤษฎีเท่านั้น ตัวอย่างเช่นใช้คลาสไคลเอนต์ที่มีแอตทริบิวต์เช่นชื่อและคอลเล็กชัน "ใบแจ้งหนี้" ฉันชอบที่จะสามารถแบ่งส่วนนี้ออกเป็นส่วน "ชื่อ" ที่มี getters / setters สำหรับชื่อและส่วน "ใบแจ้งหนี้" ที่มีวิธีการเพิ่ม / ลบสำหรับใบแจ้งหนี้ ดูเหมือนจะเป็นไปไม่ได้ที่จะแยกสิ่งเหล่านี้ออกเป็นลำดับชั้นของคลาสที่สามารถเพิ่มแอตทริบิวต์ได้เพียงหนึ่งรายการต่อคลาสเท่านั้น ได้แก่ "NamedEntity", "NameAndAddressEntity", "Invoicable", ...
Frederik

4

ฉันจะใช้javadoc ; หรือใช้สิ่งต่อไปนี้เป็น "ตัวคั่น" แบบธรรมดา (บรรทัดเดียวหรือ 3 บรรทัด):

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

ดังนั้นใน IDE จึงปรากฏเป็นสีอื่นนอกเหนือจากสีเทาที่แสดงความคิดเห็นที่ไม่สร้างความรำคาญ


3

นอกเหนือจากคำตอบของ Andrey ในการใช้ // region // endregion เรายังแทรก [BigAscii ตัวอักษร] [1] ในส่วนรหัสหลัก เมื่อเลื่อนเร็ว ๆ มันโดดเด่นจริงๆ ข้อเสียเปรียบประการหนึ่งของวิธีนี้คือฉันไม่สามารถค้นหาได้ดังนั้นคุณต้องเพิ่มคำค้นหาที่ด้านล่าง "แบนเนอร์" เหมือนที่ฉันทำด้านล่าง

Blockquote

//    _      _____          _____                  _   _
//   | |    |  __ \   /\   |  __ \      /\        | | | |
//   | |    | |  | | /  \  | |__) |    /  \  _   _| |_| |__
//   | |    | |  | |/ /\ \ |  ___/    / /\ \| | | | __| '_ \
//   | |____| |__| / ____ \| |       / ____ \ |_| | |_| | | |
//   |______|_____/_/    \_\_|      /_/    \_\__,_|\__|_| |_|
//
//   Search here with: LDAP Auth

[1]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP Auth


2

IDE ที่ทันสมัยช่วยให้คุณสามารถดูรหัสของคุณได้หลายวิธีและแม้แต่จัดระเบียบใหม่ Eclipse ยังอนุญาตให้คุณดูคำจำกัดความของรหัสที่คุณมีเคอร์เซอร์อยู่ในแผงควบคุมอื่น

การจัดระเบียบโค้ดของคุณใหม่โดยอัตโนมัติจะทำให้มาร์กอัปดังกล่าวพังลง

หากคุณต้องการจัดกลุ่มให้พิจารณารวมสิ่งของที่อยู่ในชั้นเรียนเดียวกันและสิ่งของที่ไม่ได้อยู่ร่วมกันในชั้นเรียนต่างๆ


0

ถ้าคุณสามารถจัดกลุ่มเมธอดของคุณได้ให้ทำคลาสอื่นโดยเฉพาะสำหรับแนวคิดนั้นที่คุณต้องการจับภาพในส่วน สร้างไฟล์ได้ฟรี


-18

สำหรับ IntelliJ ฉันชอบ:

        public void ________________INIT__________________() {};

ดูสวยในโครงสร้างไฟล์!


3
นี่ดูเหมือนเป็นทางออกที่แย่มาก ทำไมต้องประกาศวิธีการเพิ่มเติมเมื่อเป้าหมายของคุณคือองค์กรรหัส?
nsg

1
นั่นคือการทำให้ไฟล์ทั้งหมดถูกแบ่งส่วนในมุมมองโครงสร้าง
Tycho Pandelaar

1
นี่เป็นเพียงหนึ่งเดียวที่ดูจริงๆในสตูดิโอ Android เสนอให้คุณเป็นคำตอบและฉันจะใช้
user170317

14
แย่ที่สุดที่เคยเจอมา !! และเป็นสาธารณะ! o_O
Cocorico

3
นี่เป็นคำตอบเดียวที่แสดงในมุมมองโครงสร้างและใช้ได้กับ IDE ที่แตกต่างกัน ทำให้มันเป็นส่วนตัวและยิ้มและแบกมันไว้หรืออย่าใช้ถ้าคุณไม่ชอบมัน แต่อย่าซ่อนคำตอบนี้จากผู้อ่านคนอื่น ๆ โดยการลงคะแนนให้เป็นการให้อภัย
ทอม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.