2010-03-04 4 views
71

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

//// Section name here //// 

हालांकि, कुछ संपादकों ने इस के साथ समस्याओं है लगता है:

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

उदाहरण के लिए, ऑब्जेक्टिव-सी कोड में आप इस विधि का उपयोग कर सकते हैं:

alt text

+3

एक आईओएस डेवलपर के रूप में, जब मैंने एंड्रॉइड स्टूडियो –

+1

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

+0

डाउनवॉटेड: मैं @ f.carlsen से सहमत हूं। यदि आप अपनी कक्षा को टिप्पणियों के साथ ढांचे देते हैं, तो आपको [एकल उत्तरदायित्व सिद्धांत] तोड़ने की संभावना है (https://en.wikipedia.org/wiki/Single_responsibility_principle)। – Schrieveslaach

उत्तर

53

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

ग्रहण में, मैंने कस्टम टेम्पलेट्स (जावा -> संपादक -> एक्लिप्स के प्राथमिकता संवाद में टेम्पलेट्स) का एक सेट बनाया है जो उन सलाखों को उत्पन्न करता है, उदाहरण के लिए। - SEPA (पहुंचकर्ता के लिए विभाजक) - सेप (गुण के लिए विभाजक) - SEPC (कंस्ट्रक्टर्स के लिए विभाजक) - आदि

मैं भी मानक संशोधित "नया वर्ग" टेम्पलेट (जावा -> संहिता शैली -> ग्रहण प्राथमिकता स्क्रीन में कोड टेम्पलेट्स)

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

4

जहां तक:

#pragma mark - 
#pragma mark Section name here 

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

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

+4

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

6

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

6

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

+2

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

+14

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

2

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

आपके कोड का कोई भी स्वचालित पुनर्गठन, इस तरह के मार्कअप को तोड़ने का कारण बन जाएगा।

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

14

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

+0

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

+0

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

0

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

-12

इंटेलीजे के लिए मैं क्या पसंद है:

 public void ________________INIT__________________() {}; 

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

+3

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

+1

यह संरचना दृश्य में विभाजित पूरी फ़ाइल को बनाना है। – P5ycH0

+1

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

91

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

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

यदि आपको इसकी आवश्यकता है तो आप अतिरिक्त दृश्य अलगाव के लिए अपनी लाइन भी जोड़ सकते हैं। इस क्षेत्र को किसी भी समारोह की तरह +/- बटन के साथ इच्छानुसार अनुबंधित और विस्तारित किया जा सकता है। तुम भी कमान + Alt + अवधि (Ctrl +Alt + अवधि)

Source साथ क्षेत्रों के बीच नेविगेट कर सकते हैं।

उदाहरण:

//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 
+0

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

+2

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

+1

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

0

प्रदान की एंड्री के जवाब के अलावा, उपयोग करने के लिए // क्षेत्र // 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 प्रमाणीकरण

0

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

/** RecyclerOnItemClickListener */ 

/** 
* RecyclerOnItemClickListener 
*/ 

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

संबंधित मुद्दे