यह उत्तर लिखे जाने के बाद के वर्षों में स्विफ्ट काफी परिपक्व हो गई है। डिजाइन दिशानिर्देश अब राज्य :
प्रोटोकॉल जो यह वर्णन करते हैं कि संज्ञाओं (जैसे Collection
) के रूप में क्या पढ़ा जाना चाहिए ।
प्रोटोकॉल है कि एक का वर्णन क्षमता प्रत्यय का उपयोग कर नाम दिया जाना चाहिए able
, ible
या ing
(जैसे Equatable
, ProgressReporting
)।
डेविड जेम्स को इसे पेश करने के लिए धन्यवाद !
मूल उत्तर
हंगेरियन नोटेशन के कुछ रूप का उपयोग करना एक अच्छा विचार हो सकता है - महत्वपूर्ण अवधारणाओं का प्रतिनिधित्व करने के लिए जो टाइप सिस्टम के अंदर एन्कोड नहीं किए जा सकते। हालांकि, तथ्य यह है कि कुछ पहचानकर्ता एक प्रोटोकॉल को संदर्भित करता है स्विफ्ट (और सी #) में टाइप सिस्टम का हिस्सा है, और इस तरह के किसी भी उपसर्ग या प्रत्यय के रूप में केवल शोर जोड़ता है। स्पष्ट उपसर्ग या प्रत्यय अपवाद या घटनाओं जैसे अवधारणाओं के लिए एक बेहतर विचार है।
स्विफ्ट के लिए एक आधिकारिक शैली गाइड की अनुपस्थिति में, हमें अपने स्वयं के साथ आना होगा, या मौजूदा गाइड या कोड से उधार लेना होगा। उदाहरण के लिए, कोको के लिए ऑब्जेक्टिव-सी स्टाइल गाइड में यह खंड है:
प्रोटोकॉल का नाम उनके समूह व्यवहार के अनुसार होना चाहिए:
अधिकांश प्रोटोकॉल समूह से संबंधित तरीके जो विशेष रूप से किसी भी वर्ग से जुड़े नहीं हैं। इस प्रकार के प्रोटोकॉल का नाम दिया जाना चाहिए ताकि प्रोटोकॉल एक वर्ग के साथ भ्रमित न हो। एक सामान्य सम्मेलन एक गेरुंड ("... आईएनजी") फॉर्म का उपयोग करना है:
NSLocking
- अच्छा।
NSLock
- गरीब (एक वर्ग के लिए एक नाम की तरह लगता है)।
कुछ प्रोटोकॉल कई असंबंधित तरीकों का समूह बनाते हैं (बजाय कई अलग-अलग छोटे प्रोटोकॉल बनाने के)। ये प्रोटोकॉल एक ऐसे वर्ग से जुड़े होते हैं जो प्रोटोकॉल की प्रमुख अभिव्यक्ति है। इन मामलों में, कन्वेंशन प्रोटोकॉल को कक्षा के समान नाम देना है।
इस तरह के प्रोटोकॉल का एक उदाहरण NSObject
प्रोटोकॉल है। यह प्रोटोकॉल समूह विधियाँ जो आप वर्ग पदानुक्रम में इसकी स्थिति के बारे में किसी भी वस्तु को क्वेरी करने के लिए उपयोग कर सकते हैं, इसे विशिष्ट विधियों को लागू करने के लिए और इसके संदर्भ गणना को बढ़ाने या घटाने के लिए कर सकते हैं। क्योंकि NSObject
वर्ग इन विधियों की प्राथमिक अभिव्यक्ति प्रदान करता है, प्रोटोकॉल को वर्ग के नाम पर रखा गया है।
हालाँकि, दूसरे बिंदु की सलाह अब लागू नहीं है:
क्योंकि वर्गों और प्रोटोकॉलों के नाम स्विफ्ट में एकीकृत होते हैं, NSObject
वस्तु-सी में प्रोटोकॉल को NSObjectProtocol
स्विफ्ट में रीमेक किया जाता है । ( स्रोत )
यहाँ, …Protocol
वर्ग से प्रोटोकॉल की अवहेलना करने के लिए प्रत्यय का उपयोग किया गया था।
स्विफ्ट स्टैंडर्ड लाइब्रेरी प्रोटोकॉल होता है Equatable
, Comparable
और Printable
। ये कोको "... आईएनजी" फॉर्म का उपयोग नहीं करते हैं, बल्कि "..." प्रत्यय घोषित करते हैं कि इस प्रकार के किसी भी उदाहरण को एक निश्चित ऑपरेशन का समर्थन करना चाहिए।
निष्कर्ष
कुछ मामलों में जहां एक प्रोटोकॉल में केवल एक प्रासंगिक कार्यान्वयन होता है, एक "… प्रोटोकॉल" प्रत्यय समझ में आता है ताकि वर्ग और प्रोटोकॉल का एक ही नाम हो सकता है। हालांकि, यह केवल ऐसे मामलों तक सीमित होना चाहिए।
अन्यथा, नाम कुछ संज्ञा होना चाहिए जो दर्शाता है कि इस प्रोटोकॉल में कौन से संचालन शामिल हैं। एक क्रिया का "... आईएनजी" या "सक्षम" रूप का उपयोग करना एक अच्छा प्रारंभिक बिंदु हो सकता है, और ऐसे नाम वर्ग के नामों के लिए संघर्ष की संभावना नहीं है।
नाम EquatableProtocol
है सिफ़ारिश लायक नहीं । नाम Equatable
या Equating
कहीं बेहतर होगा, और मुझे उम्मीद नहीं है कि किसी भी वर्ग का नाम होगा Equatable
। इस मामले में, Protocol
प्रत्यय शोर है।