जावा टिप्पणियों में कोड के तार्किक वर्गों को कैसे चिह्नित करें?


92

जावा कक्षाएं आम तौर पर तार्किक "ब्लॉक" में विभाजित होती हैं। क्या इन वर्गों को चिह्नित करने के लिए एक सम्मेलन है? आदर्श रूप से, यह प्रमुख आईडीई द्वारा समर्थित होगा।

मैं व्यक्तिगत रूप से इस विधि का उपयोग करता हूं:

//// Section name here ////

हालाँकि, कुछ संपादकों को इससे समस्या है।

एक उदाहरण के रूप में, Objective-C कोड में आप इस विधि का उपयोग कर सकते हैं:

#pragma mark -
#pragma mark Section name here

यह XCode में एक मेनू का परिणाम देगा जो इस तरह दिखता है:

वैकल्पिक शब्द


4
एक iOS डेवलपर के रूप में, यह वही है जो मैंने सबसे ज्यादा याद किया जब मैंने एंड्रॉइड स्टूडियो
क्रिस चेन

1
डाउनवोटेड: आधुनिक आईडीई और भाषाओं के साथ यह एक खराब अभ्यास है। यदि आपको अपना कोड व्यवस्थित करना है, तो आप शायद पहले से ही सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल को तोड़ रहे हैं और विभिन्न वर्गों / फाइलों को विभाजित करना बेहतर है। यदि कई संपादक हैं, तो यह संभवत: कुछ समय बाद आउट-ऑफ-सिंक होगा, क्योंकि कुछ इस का पालन करेंगे, कुछ कोड को फिर से व्यवस्थित करेंगे और फिर से व्यवस्थित करेंगे, या स्वचालित रूप से सहेजें और प्रारूप क्रियाएं इसे तोड़ देंगी।
f.carlsen

डाउनवोट: मैं @ f.carlsen से सहमत हूं। यदि आप अपनी कक्षा को टिप्पणियों से जोड़ते हैं, तो आप सिंगल रिस्पॉन्सिबिलिटी सिद्धांत को तोड़ने की बहुत संभावना है ।
schrieveslaach

नफरत करने वालों के लिए: जावा स्विफ्ट-स्टाइल क्लास एक्सटेंशन का समर्थन करने पर मुझे कॉल करें जहां आप तार्किक रूप से अपने इंटरफ़ेस कार्यान्वयन को अलग-अलग वर्गों में अलग कर सकते हैं। और हाँ, एक वर्ग एक ही समय में कई इंटरफेस को लागू करने के लिए अच्छा कर सकता है।
विलियम एंट्रीक

जवाबों:


66

मैं व्यक्तिगत रूप से 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 के लिए यह थोड़ा अधिक लग सकता है, लेकिन मेरा विश्वास करो, यह कुछ बड़ी परियोजनाओं में बहुत उपयोगी साबित हुआ, जहां मुझे बड़े स्रोत फ़ाइलों के माध्यम से ब्राउज़ करना था और उन तरीकों को जल्दी से ढूंढना था जिनमें मुझे दिलचस्पी थी, यह समझने में भी मदद करता है। स्रोत कोड संरचना।

एक्लिप्स में, मैंने कस्टम टेम्प्लेट (जावा -> एडिटर -> टेम्प्लेट ऑफ़ एक्लिप्स प्रेफरेंस डायलॉग) का एक सेट बनाया है जो उन सलाखों को उत्पन्न करता है, जैसे। - sepa (एक्सेसर्स के लिए SEParator) - सेप (गुण के लिए SEParator) - sepc (कंस्ट्रक्टर के लिए SEParator) - आदि।

मैंने मानक "नई कक्षा" टेम्प्लेट (जावा -> कोड शैली -> कोड टेम्प्लेट्स इन एक्लिप्स प्रेफरेंस स्क्रीन) को भी संशोधित किया है।

इसके अलावा, कॉफी-बाइट्स नामक एक पुराना एक्लिप्स प्लगइन है , जिसने कोड के अंशों को ग्रहण के तरीके को बढ़ाया है। मुझे नहीं पता कि यह अभी भी काम करता है, लेकिन मैंने याद दिलाया कि कोई व्यक्ति विशेष टिप्पणियों, जैसे // [अनुभाग] या कुछ को जोड़कर मनमाने ढंग से मोड़ने योग्य क्षेत्रों को परिभाषित कर सकता है। यह अभी भी हाल के ग्रहण संशोधनों में काम कर सकता है, इसलिए एक नज़र डालें।


145

इंटेलीज / एंड्रॉइड स्टूडियो के लिए एक अद्भुत समाधान है।
के साथ शुरू:
//region Description
और अंत के साथ:
//endregion

उस के लिए शॉर्टकट मेनू आप के साथ खोल सकते हैं में है Command+ Alt+ T(Mac) या Ctrl+ Alt+ T(विंडोज़)

यदि आपको आवश्यकता हो तो अतिरिक्त दृश्य पृथक्करण के लिए आप अपनी स्वयं की लाइन भी जोड़ सकते हैं। इस क्षेत्र को किसी भी कार्य की तरह +/- बटन के साथ अनुबंधित और विस्तारित किया जा सकता है। आप 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

यह अविश्वसनीय रूप से उपयोगी है धन्यवाद एंड्री। BTW मैं ग्रहण कीबोर्ड शॉर्टकट लेआउट का उपयोग कर रहा हूं और मुझे नहीं लगता कि शॉर्टकट मेरे लिए काम करता है लेकिन '//' क्षेत्र बहुत अच्छा काम करता है
थिंकबोनोबो

2
मुझे संरचना दृश्य में दिखाने के लिए कोई रास्ता नहीं दिख रहा है, इसलिए मैं अभी भी नकली खाली सदस्यों (अप्रयुक्त चेतावनी को दबाने के साथ) का उपयोग कर रहा हूं।
टॉम

1
क्या एंड्रॉइड स्टूडियो (संरचना दृश्य) में उन क्षेत्रों को दिखाने का कोई तरीका है?
मिगुएलहिंकापी

लिंक मर चुका है; यह IntelliJ IDEA ब्लॉग एक उपयोगी संदर्भ हो सकता है। इसमें नेटबींस जैसी स्टाइल फोल्डिंग आइटम का भी उल्लेख किया गया है <editor-fold ...>
फ्रैंकलिन यू

सबसे अच्छा जवाब
माइकल जियोब्रो

14

ग्रहण एक @category javadoc एनोटेशन ("श्रेणी समर्थन" के रूप में चिह्नित अनुभाग पर स्क्रॉल करें) को परिभाषित करता है जो आउटलाइन दृश्य में श्रेणी के अनुसार फ़िल्टरिंग को सक्षम करता है। वैसा नहीं जैसा आप चाहते हैं। मैं आश्चर्यचकित हूं कि किसी ने भी एक ग्रहण प्लगइन नहीं लिखा है जो आपके स्क्रीन शॉट जैसा दृश्य प्रस्तुत करता है।


अधिकांश जावा विचारों में, हालांकि, एक उदाहरण के रूप में, डिफ़ॉल्ट गेटर्स और सेटर्स के रूप में छिपाने के लिए, उनकी श्रेणियों के अनुसार वर्ग के सदस्यों को फ़िल्टर करना संभव है।
रिडिडेल

पता नहीं क्यों मैं एंड्रॉइड स्टूडियो में @ श्रेणी का उपयोग नहीं कर सकता, क्या आप जानते हैं कि मैं उस पर समान व्यवहार प्राप्त करने के लिए क्या कर सकता हूं?
मिगेलहिनकपी

6

मुझे वह पसंद आया जब मैं xcode का उपयोग कर रहा था। ग्रहण के लिए मैं जावा क्लास से नेविगेट करने के लिए ctrl + o (क्विक आउटलाइन) का उपयोग करता हूं।


6

काम करने में मदद करने के लिए कोड में अनावश्यक टिप्पणियों / मार्करों का उपयोग करना एक अच्छा अभ्यास नहीं हो सकता है। मुझे एक्सकोड और जावा विकास के बारे में बहुत कम जानकारी है, लेकिन सभी प्रमुख आईडीई के सदस्यों को किसी विशेष मार्कर के साथ सदस्यों को ढूंढने का समर्थन जैसे कि ग्रहण के तरीकों और सदस्यों को बाह्यरेखा दृश्य का उपयोग करके दिखाता है जिसे उपयोग करके ट्रिगर किया जा सकता है ctrl+O, इंटेलीज (जिसे मैं मैक का अधिक उपयोग करना पसंद करता हूं और एक था सामुदायिक संस्करण भी) की रूपरेखा एक ही है और इसे जल्दी से एक्सेस किया जा सकता है (ctrl + f12)। इसलिए मेरी बात यहाँ कोड में किसी भी अनावश्यक चिह्न का उपयोग नहीं है क्योंकि सभी (या कम से कम अच्छे / समझदार) आईडीई के स्वचालित रूप से कर सकते हैं।


2
सहमत, अनुभाग मार्कर केवल दृश्य अव्यवस्था में जोड़ते हैं। आपकी कक्षा को इन चीजों को अपूर्ण बनाने के लिए पर्याप्त रूप से केंद्रित होना चाहिए।
पॉल मैकेंजी

15
ज़रूर, लेकिन तार्किक और चिह्नित-बंद वर्गों में वर्गीकृत तरीकों से दृश्य व्यवस्था को लागू करने में मदद मिल सकती है जो अन्यथा तरीकों की एक फ्लैट सूची होगी। कभी-कभी आपको यह नहीं पता होता है कि आपको कौन सी विधि चाहिए, और संबंधित विधियों को एक साथ लेना अच्छा है, और कुछ विचार है कि आप संबंधित कोड की पूरी सीमा देख रहे हैं।
ब्रायन राक

4

जहाँ तक मुझे पता है कि कक्षा के सदस्यों को एक साथ रखने के लिए समर्थित विनिर्देश के रूप में ऐसी कोई बात नहीं है। आप क्या-कभी टिप्पणी कन्वेंशन का उपयोग कर सकते हैं जो आपको पसंद है, लेकिन संभावना है कि यह किसी भी उपकरण द्वारा समर्थित नहीं होगा।

विरासत या एकत्रीकरण के माध्यम से संबंधित सदस्यों को अलग-अलग वर्ग में रखना बेहतर होता है। यह एक अच्छी OOP शैली मानी जाती है


5
कोड के वर्गों को विभाजित करना केवल सिद्धांत में संभव है। उदाहरण के लिए, क्लास क्लाइंट को नाम, और एक संग्रह "चालान" जैसी विशेषताओं के साथ लें। मैं इसे एक "नाम" अनुभाग में विभाजित करने में सक्षम होना चाहूंगा जिसमें नाम के लिए गेटर्स / सेटर और एक अनुभाग "चालान" शामिल है जिसमें चालान के लिए जोड़ / हटाने के तरीके शामिल हैं। यह एक वर्ग पदानुक्रम में विभाजित करने के लिए अव्यावहारिक लगता है जो केवल एक विशेषता प्रति वर्ग जोड़ सकता है, अर्थात "नामांकितता", "NameAndAddressEntity", "Invoicable", ...
फ्रेडरिक

3

एंड्री के जवाब के अलावा, // // // क्षेत्र का उपयोग करने के लिए, हम प्रमुख कोड अनुभागों में [बिगएस्की अक्षर] [1] सम्मिलित करते हैं। जब तेजी से स्क्रॉल करना, यह वास्तव में बाहर खड़ा है। इस दृष्टिकोण का एक दोष यह है कि मैं इसके लिए खोज नहीं कर सकता हूं, इसलिए आपको "बैनर" के ठीक नीचे एक खोज शब्द जोड़ना होगा जैसे मैं नीचे करता हूं।

Blockquote

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

[१]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP प्रामाणिक


3

मैं javadoc का उपयोग करूंगा ; या एक सरल "विभाजक" (एकल या 3 लाइनों) के रूप में निम्नलिखित का उपयोग करें:

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

ताकि आईडीई में यह विनीत टिप्पणी के अलावा एक अलग रंग में दिखाई दे।


2

एक आधुनिक आईडीई आपको अपने कोड को कई अलग-अलग तरीकों से देखने की अनुमति देता है, और यहां तक ​​कि इसे पुनर्गठित भी करता है। ग्रहण आपको उस कोड की परिभाषा को देखने की अनुमति देता है जो आपके पास किसी अन्य पैनल में कर्सर है।

आपके कोड का कोई भी स्वचालित पुनर्गठन, ऐसे मार्कअप को तोड़ देगा।

यदि आप समूह बनाना चाहते हैं तो एक ही वर्ग में एक साथ संबंधित चीजों को रखने पर विचार करें, और विभिन्न वर्गों में एक साथ संबंधित चीजों को नहीं।


0

यदि आप अपने तरीकों को क्लस्टर कर सकते हैं, तो विशेष रूप से उस अवधारणा के लिए एक और वर्ग करें जिसे आप किसी अनुभाग में कैप्चर करना चाहते हैं। आगे बढ़ो, फाइल बनाना मुफ्त है।


-18

इंटेलीज के लिए मुझे पसंद है:

        public void ________________INIT__________________() {};

फ़ाइल संरचना में सुंदर लग रही है!


3
यह एक बहुत बुरा समाधान की तरह लगता है। जब आपका लक्ष्य कोड संगठन हो, तो अतिरिक्त तरीके क्यों घोषित करें?
nsg

1
यह पूरी फ़ाइल को संरचना दृश्य में खंडित करने के लिए है।
टाइको पांडेयार 12

1
यह केवल एक है जो वास्तव में एंड्रॉइड स्टूडियो में देख रहा है, आप स्वयं को उत्तर के रूप में प्रस्तावित कर सकते हैं और मैं उपयोग
करूंगा

13
सबसे बुरी बात मैंने कभी देखी है !! और यह सार्वजनिक है! o_O
कोको

3
यह एकमात्र उत्तर है जो संरचना दृश्य में दिखाई देता है, और विभिन्न आईडीई में काम करता है। इसे निजी और मुसकान दें और इसे सहन करें, या यदि आपको यह पसंद नहीं है, तो इसका उपयोग न करें, लेकिन अन्य पाठकों के इस जवाब को मतदान से नीचे गुमनामी में छिपाकर न रखें।
टॉम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.