क्या संसाधनों का नामकरण करने के लिए सम्मेलन हैं?


104

क्या कन्वेंशन हैं कि एंड्रॉइड में संसाधनों का नाम कैसे दिया जाए? उदाहरण के लिए, बटन, textViews, मेनू, आदि।


अच्छा प्रश्न। संबंधित विषय के रूप में मैंने पूछा कि क्या कस्टम आर या android.R का उपयोग करना है।
आरडीएस


आयाम संसाधनों के लिए, मैं इनके
प्रवीण सोनवणे

जवाबों:


28

मुझे नहीं पता कि क्या कोई आधिकारिक सिफारिशें हैं।

विगेट्स और कंटेनरों के साथ मेरे लेआउट में आईडी के लिए, मैं सम्मेलन का उपयोग करता हूं:

<layout>_<widget/container>_<name>

मैं किसी भी डिमन्स, स्ट्रिंग्स, नंबरों और उन लेआउट्स में उपयोग किए जाने वाले रंगों के लिए एक ही रणनीति करता हूं। हालाँकि, मैं सामान्य करने की कोशिश करता हूँ। उदाहरण के लिए, यदि सभी बटन में एक सामान्य टेक्स्ट-कॉर्नर है, तो मैं लेआउट के साथ नाम को उपसर्ग नहीं करूंगा। संसाधन का नाम 'button_textColor' होगा। यदि सभी टेक्स्टकॉलर्स एक ही संसाधन का उपयोग कर रहे हैं, तो इसे 'टेक्स्टकॉलर' नाम दिया जाएगा। स्टाइल्स के लिए, यह आमतौर पर मामला है।

मेनू संसाधनों के लिए मैं उपयोग करता हूं:

menu_<activity>_<name>

एनिमेशन केवल भिन्न हैं क्योंकि आप अपरकेस अक्षरों का उपयोग नहीं कर सकते हैं। मुझे लगता है कि xable संसाधनों के लिए भी काफी कुछ किया जा सकता है।


1
मैं ऐसा करता हूं, केवल मैं लेआउट और विजेट नामों को छोटा करता हूं, ताकि लंबे नामों से बचने के लिए, उदाहरण के लिए प्रमाणीकरण लेआउट पर उपयोगकर्ता नाम संपादित करें बॉक्स होगा: "au_eb_username" के बजाय "प्रमाणीकरण_सेडबॉक्स_सर्नाम"
होसैन शाहदोस्त

46

Android एसडीके शुरू करने के लिए एक अच्छी जगह होगी।

उदाहरण के लिए, मैं गतिविधि के भीतर आईडी को गुंजाइश देने की कोशिश करता हूं।

अगर मेरे पास ListViewहोता तो बस @android:id/listसभी गतिविधियों में होता।
यदि, हालांकि, मेरे पास दो सूचियाँ थीं तो मैं अधिक विशिष्ट @id/list_appleऔर का उपयोग करूँगा@id/list_orange

तो जेनेरिक (आईडी, ...) का पुन: उपयोग किया जाता है R.java fileजबकि अद्वितीय वाले (कभी-कभी पुन: उपयोग किए जाते हैं) एक अंडरस्कोर द्वारा अलग किए गए जेनेरिक लोगों के साथ उपसर्ग करते हैं ।


अंडरस्कोर एक बात है, मैंने देखा, उदाहरण के लिए:

लेआउट चौड़ाई है layout_widthमें एक्सएमएल और layoutWidthमें कोड , तो मैं के रूप में यह करने के लिए छड़ी करने की कोशिशlist_apple

तो एक लॉगिन बटन होगा login, लेकिन अगर हमारे पास दो लॉगिन हैं तो login_fooऔर login_bar


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

@StephaneEybert, आप मिक्स में गतिविधि का नाम जोड़ सकते हैं, खरीद सकते हैं कि आप एक अलग गतिविधि के दृश्य तक क्यों पहुंचना चाहते हैं। :)
शमूएल

यह अच्छा और सरल है, और यह xml कोड को साफ करता है। लेकिन अगर आप किसी बड़े ऐप को डिबग करने की कोशिश कर रहे हैं, तो "करीब" नाम के पचास अलग-अलग बटनों को ट्रैक करने की कोशिश करना निराशाजनक हो सकता है। मैं बहुत अपने लेआउट के नाम के साथ प्रत्येक दृश्य लगाकर पसंद करते हैं।
SMBiggs

25

Android के प्रलेखन से लिया गया । विषय पर और भी बहुत कुछ है।


12
मेरे दो सेंट: मुझे आईसी उपसर्ग पसंद नहीं है
AlikElzin-kilaka

1
"ध्यान दें कि आपको किसी भी प्रकार के साझा उपसर्ग का उपयोग करने की आवश्यकता नहीं है - ऐसा करना केवल आपकी सुविधा के लिए है।" यह इस चार्ट के नीचे की रेखा है। इसलिए उपसर्ग पसंद का मामला है।
तुषार वेंगुरलेकर

सादे तार के लिए नामकरण सम्मेलन क्या होगा? मेरे पास मेरे आवेदन में लगभग 30000 तार हैं। यह मन है भोगी।
उपयोगकर्ता

17

आपके प्रश्न का उत्तर देने के लिए: हां, हैं।

आप उदाहरण के लिए Google खोज के माध्यम से उनमें से कई पा सकते हैं । और सर्वश्रेष्ठ नामकरण सम्मेलन जैसी कोई चीज नहीं है। यह हमेशा आपकी आवश्यकताओं और आपकी परियोजना विशेषताओं (सबसे महत्वपूर्ण रूप से गुंजाइश) पर निर्भर करता है।


हाल ही में, मैंने Jeroen Mols से Android XML में संसाधनों के नामकरण के बारे में काफी अच्छा ब्लॉग पोस्ट पढ़ा है । लेखक मूल सिद्धांत का उल्लेख करता है कि सभी संसाधनों का पालन करना चाहिए और फिर यह कन्वेंशन प्रत्येक संसाधन प्रकार पर कैसे लागू किया जाता है। दोनों ने एंड्रॉइड संसाधन पर धोखा देने वाली नामकरण का वर्णन किया :

एंड्रॉयड संसाधन नामकरण धोखा शीट

वह तब प्रत्येक तत्व और प्रत्येक संसाधन प्रकार का विस्तार से वर्णन करता है।


मैं कहूंगा कि आप इस सम्मेलन का उपयोग छोटे से मध्यम परियोजनाओं (व्यक्तिगत उपयोग, कुछ महीनों के अनुबंध के आवेदन) से कर सकते हैं। हालाँकि, मैं इसे 50+ गतिविधियों या 1000+ स्ट्रिंग्स जैसे लंबे समय के प्रोजेक्ट्स के लिए अनुशंसित नहीं करूँगा।

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

मुझे लगता है कि आप कुछ शुरू करने के लिए देख रहे हैं। इसलिए मैं आपके द्वारा उल्लिखित ब्लॉग पोस्ट की सिफारिश करूंगा। यह शुरुआत के लिए अच्छा है और आप निश्चित रूप से इसे अपने स्वयं के अच्छे नामकरण सम्मेलनों को बनाने के लिए प्रेरणा के रूप में उपयोग कर सकते हैं।

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


15

संसाधनों में उपयोग किए जाने वाले कुछ सम्मेलन हैं:

  • अलग-अलग फ़ाइलों के रूप में मौजूद संसाधनों के लिए, उन्हें low_case_underscore_separated होना चाहिए। एप्ट टूल यह सुनिश्चित करता है कि आपकी फाइलें केवल लोअर-केस हैं, क्योंकि मिश्रित केस का उपयोग करने से केस-असंवेदनशील फाइल सिस्टम पर समस्या हो सकती है।
  • केवल मूल्यों में घोषित संसाधनों के लिए ... (विशेषताएँ, तार, आदि) सम्मेलन आमतौर पर मिश्रित होता है।
  • साधारण नाम रखने के लिए "वर्गीकरण" के साथ नामों को टैग करने के लिए कभी-कभी एक सम्मेलन का उपयोग किया जाता है। यह उदाहरण के लिए है जहाँ आप लेआउट_ एक्सपोज़र और लेआउट_अलिग्नेफ़्ट जैसी चीज़ें देखते हैं। एक लेआउट फ़ाइल में व्यू और पैरेंट लेआउट प्रबंधन दोनों के लिए विशेषताओं को एक साथ मिलाया जाता है, भले ही वे अलग-अलग मालिक हों। "लेआउट_ *" सम्मेलन यह सुनिश्चित करता है कि इन नामों के बीच कोई टकराव न हो और यह समझना आसान हो कि कौन सा नाम किस इकाई को प्रभावित करता है।

इस "लेआउट_ब्ला" सम्मेलन का उपयोग कुछ अन्य स्थानों पर भी किया गया है। उदाहरण के लिए, "State_blah" विशेषताएँ हैं, जो एक देखने योग्य राज्य हैं जो एक दृश्य हो सकती हैं।

इन दो सम्मेलनों (फाइलों के लिए अंडरस्कोर_सेप्टर, घोषित संसाधनों के लिए मिश्रित) के कारण, आपको कई असंगतताएँ मिलेंगी। उदाहरण के लिए रंगों को फाइलों के साथ या स्पष्ट मूल्यों के रूप में घोषित किया जा सकता है। आमतौर पर हम उन सभी के लिए अंडरस्कोर_सेप्‍ट के साथ रहना पसंद करते हैं, लेकिन यह हमेशा नहीं होता है।

अंततः हम संसाधनों के लिए सम्मेलनों के नामकरण के बारे में पूरी चिंता नहीं करते हैं। बड़ा जिसे हम लगातार रखते हैं वह विशेषताओं के लिए "मिश्रितकैस" है, और लेआउट परम विशेषताओं की पहचान करने के लिए "लेआउट_ब्ला" का उपयोग।

साथ ही सार्वजनिक संसाधनों के माध्यम से ब्राउज़ करना सम्मेलनों के लिए एक अच्छा एहसास देना चाहिए:

http://developer.android.com/reference/android/R.html

आप देखेंगे कि सभी विशेषताएँ काफी सुसंगत हैं (आपको लेआउट_ सम्मेलन समझ में आता है), ड्रॉबल सभी अंडरस्कोर_सेपोरेटेड हैं, आदि।


12

यह किसी भी भाषा या ढांचे के लिए एक आम समस्या है, लेकिन जब तक आप आरक्षित शब्दों से बचते हैं, तो आपको ठीक होना चाहिए यह मानकर कि आप याद रख सकते हैं कि आपने किन चीजों को बुलाया है।

मैंने ध्यान दिया कि एंड्रॉइड xml संसाधन फ़ाइल नामों पर प्रतिबंध लगाता है लेकिन अंडरस्कोर ठीक लगता है। ADT वास्तव में बताता है

फ़ाइल-आधारित संसाधन नामों में केवल लोअरकेस, 0-9, या _ होना चाहिए।

कुछ ऐसा है जो मुझे पहली बार में परेशान करता है, आईडी के साथ नामस्थानों की कमी थी, लेकिन इसे आमतौर पर अनदेखा किया जा सकता है यदि आपके पास दो आईडी हैं, तो एंड्रॉइड केवल परिभाषित आईडी का पुन: उपयोग करेगा।

आईडी के लिए मैं एक 3 अक्षर वाले क्वालीफायर का उपयोग करता हूं, जिसके बाद यह ऊंट संकेतन में संदर्भित होता है उदा। एक स्थिर टेक्स्ट लेबल (या टेक्स्टव्यू) के लिए lblFoo, एक संपादन योग्य टेक्स्टबॉक्स के लिए txtFoo (एंड्रॉइड में edittext)। यह पहली बार में अजीब लग सकता है लेकिन मैं इसे VB6 के बाद से इस्तेमाल कर रहा हूं और उन नियंत्रणों को लेबल और टेक्स्टबॉक्स कहा जाता है।

यहाँ कुछ और हैं जिनका मैं आमतौर पर उपयोग करता हूँ:

  • btnFoo - बटन
  • pwdFoo - पासवर्ड
  • lstFoo - सूची
  • clrFoo - रंग
  • tblFoo - टेबल
  • colFoo - स्तंभ
  • rowFoo - पंक्ति
  • imgFoo - छवि
  • dimFoo - आयाम
  • पैडफू - गद्दी
  • mrgFoo - मार्जिन

मैं जावा फाइल के भीतर कोड में भी उसी का उपयोग करता हूं, इसलिए मुझे इसके बारे में सोचने की ज़रूरत नहीं है, पैकेज गुंजाइश यह काफी खुशी की अनुमति देगा:

Button btnFoo = (Button)findViewById(R.id.btnFoo);

यदि आप अंडरस्कोर यानी btn_foo का उपयोग करके थोड़ी सी रिक्ति जोड़ना पसंद करते हैं ... मैं शायद ऐसा कर सकता हूं यदि मैं अन्य आदतों को तोड़ सकता हूं।

ऐसे लोग हैं जो तर्क दे सकते हैं कि यह आदर्श नहीं हो सकता है और शुद्धतावादियों का तर्क होगा कि पूर्ण नाम का उपयोग किया जाना चाहिए, लेकिन जब आप दर्जनों नियंत्रणों का नामकरण कर रहे हैं और विभिन्न प्रणालियों और रूपरेखाओं के बीच बदल रहे हैं, तो पूर्ण नाम अपने अर्थ खो देते हैं, मैं VB, C ++, ASP.NET, WinForms in C # और VB.NET, Android और Python में एक दशक से अधिक समय तक इनका उपयोग किया है। मुझे यह याद रखने की आवश्यकता नहीं है कि क्या एंड्रॉइड इसे एक टेक्स्टबॉक्स या एक एडिटेक्स कहता है। मुझे बस इतना पता होना चाहिए कि lblFoo स्टैटिक लेबल है और txtFoo वह है जो उपयोगकर्ता टाइप इनपुट में है।

एक अंतिम नोट यह है कि महत्वपूर्ण बातों पर आप जो भी निर्णय लेते हैं, वह ठीक से और लगातार नामकरण को नियंत्रित करता है, ताकि आप अस्पष्ट डिफ़ॉल्ट आईडी के साथ कुश्ती न करें जैसे कि TextView5 या विभिन्न सम्मेलनों का मिश्रण


4

डिजाइनर और डेवलपर्स के लिए उपयोगी लिंक - यहां

आयाम और आकार, नामकरण सम्मेलनों, शैलियों और विषयों, नौ-पैच और इतने पर।


3

मुझे नहीं लगता कि Google द्वारा प्रचारित कोई मानक सम्मेलन है। मैंने सभी प्रकार के अलग-अलग तरीकों से लोगों को सामान का नाम देते हुए देखा है, यहां तक ​​कि अलग-अलग आधिकारिक Google ऐप में भी।

एक निर्देशिका पदानुक्रम में 100 लेआउट (या ड्रॉबल, मेनू, आदि) फ़ाइलों की समझ बनाने की कोशिश करते समय जो कुछ भी आपको सबसे अधिक मदद करता है।


3

एक संक्षिप्त उत्तर: यदि आप Android डेवलपर्स से सीखना चाहते हैं, तो एक अच्छा उदाहरण समर्थन पुस्तकालय v7 ( https://dl-ssl.google.com/android/repository/support_r21.zip है। )

अन्यथा, यहां मैंने संसाधनों के नामकरण के लिए क्या विचार किया है:
1. कोड लिखते समय आसानी से संसाधन ढूंढना
2. कोड को पढ़ते समय आसानी से संसाधनों को समझना
3. अनुवादकों के लिए नाम उपयोगी बनाना ( R.string.*केवल संसाधन)
4. के साथ पुन: उपयोग करना लेआउट <include/>( R.id.*संसाधन संघर्ष)
। पुस्तकालय परियोजनाओं के साथ

तार्किक रूप से, संसाधनों को व्यवस्थित करना जावा कक्षाओं को संकुल में समूहित करने से अलग नहीं होना चाहिए (या फ़ाइलों को फ़ोल्डर में रखना)। हालांकि, बाद से एंड्रॉयड संसाधनों कोई नामस्थान है, उपसर्गों संसाधन नाम जोड़ा जाना चाहिए एक ही प्राप्त करने के लिए (उदाहरण के लिए com.example.myapp.photoहो जाता है com_example_myapp_photo)।

मैं एप्लिकेशन को अलग-अलग घटकों (गतिविधियों, टुकड़े, संवाद, आदि) में विभाजित करने का सुझाव देता हूं, जो छोटे अनूठे नाम हैं जिन्हें संसाधन उपसर्ग के रूप में उपयोग किया जा सकता है। इस तरह से हम संबंधित कार्यक्षमता के साथ संसाधनों को एक साथ जोड़ रहे हैं, जिससे उन्हें (बिंदु 1) खोजने में आसानी होती है और हम एक ही समय में दोनों <include/>और पुस्तकालय परियोजनाओं (अंक 4 और 5) के साथ संघर्ष का नाम लेने से बचते हैं । ध्यान दें कि कई घटकों के लिए सामान्य संसाधन अभी भी एक उपसर्ग (जैसे R.string.myapp_ok_button) हो सकते हैं।

उपसर्ग के बाद, नाम को हमें यह बताना चाहिए कि संसाधन का उपयोग किस लिए किया जाता है (प्रदर्शन किए जाने की क्रिया, प्रदर्शित की जाने वाली सामग्री आदि)। एक अच्छा नाम चुनना समझ के लिए महत्वपूर्ण है (अंक 2 और 3)।

कभी-कभी "कंपोनेंट_नाम" हमें पर्याप्त जानकारी देगा, जो विशेष रूप से सच है यदि प्रकार पहले से ही आर क्लास ( R.string.myapp_name_string2 वें "स्ट्रिंग" में बेमानी है) द्वारा दिया गया है । हालांकि, स्पष्ट रूप से जोड़ने से समझ में सुधार हो सकता है (उदाहरण के लिए, यह अनुवादकों के लिए टोस्ट या लेबल के बीच अंतर करने में मददगार हो सकता है)। कभी-कभी "नाम" और "प्रकार" भागों को टाइप-आधारित फ़िल्टरिंग की अनुमति देने के लिए स्वैप किया जा सकता है (R.string.photo_menu_* यह हमें फोटो घटक के लिए केवल मेनू से संबंधित आइटम देगा)।

मान लीजिए कि हम चित्र लेने के लिए एक गतिविधि लिख रहे हैं, वर्ग com.example.myapp.photo .PhotoActivity। हमारे संसाधन इस तरह दिख सकते हैं (घटक "फोटो" द्वारा वर्गीकृत):

R.layout.photo //if only a single layout is used
R.menu.photo  
R.string.photo_capture_instructions_label  
R.id.photo_capture_instructions_label  
R.id.photo_capture_button  
R.id.photo_capture_image  
R.drawable.photo_capture_placeholder  
R.dimen.photo_capture_image_height  

2

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

शुरू करने के लिए एक अच्छी जगह संसाधन उपलब्ध कराना हो सकता है

एसडीके स्रोत / उदाहरणों के साथ-साथ एंड्रॉइड डेवलपर्स ब्लॉग पर भी खुदाई करें यदि आप यह देखना चाहते हैं कि Google डेवलपर्स कैसे चीजें करते हैं।


1

मुझे स्ट्रिंग्स के लिए अगले नामकरण सम्मेलन में काम मिला:

[<action>]_<object>_<purpose>

उदाहरण के लिए, clear_playlist_text, delete_song_message, update_playlist_positivebutton_text। और "कार्रवाई" यहां वैकल्पिक है।


0

आप यहां अंदाजा लगाने के लिए कोड स्टाइल के लिए गूगल डॉक्यूमेंटेशन पढ़ सकते हैं


9
इस लेख में Android के संसाधन सम्मेलन के बारे में कुछ भी नहीं है।
यूजीन

ओह सॉरी मुझे लगता है कि मैंने आपके सवाल को गलत समझा। मुझे पता है कि मेनू फ़ाइलों के लिए आपको अलग-अलग शब्दों में अंडरस्कोर का उपयोग करना चाहिए। पूर्व। Options_menu.xml
केविन किउ

0

मैंने आम तौर पर संसाधन आईडी (फ़ाइलों के लिए फ़ाइलों के लिए नहीं) के लिए जावा नामकरण सम्मेलनों का पालन किया, इसके अलावा मैंने उदाहरण के लिए आईडी के सामने "x" जोड़ा:

<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

जावा में हम इसे सरल उपयोग कर सकते हैं (हम साधारण को भी याद कर सकते हैं)

TextView mTvName=(TextView)findViewById(R.id.xTvName);

यहाँ mTvName (यह सामान्य रूप से एंड्रॉइड सुझाए गए नामकरण का सुझाव दिया गया है) और xTvName जिसे लेआउट फ़ाइल में Android TextView की Id (XML के लिए x) के भाग के रूप में नामित किया गया था, मैंने इस प्रकार के नामकरण सम्मेलनों को देखने के लिए ऑब्जेक्ट्स जैसे Buttons और EditText आदि का अनुसरण किया।

XML IDS में: xViewTypeSpecificName

जावा में: mViewTypeSpeficName

जब मैं जटिल लेआउट बनाता हूं तो उपरोक्त सम्मेलनों से मेरा जीवन आसान हो जाता है। बस अपने नाम को जितना संभव हो उतना कम लंबाई में बनाने की कोशिश करें और यह बेहतर है अगर वे अन्य सह-डेवलपर्स के लिए समझने योग्य और सार्थक हैं (लेकिन यह हर बार संभव नहीं हो सकता है), आशा है कि मेरा अनुभव दूसरों की मदद करेगा, सुझावों का स्वागत है।


0

हमारी एंड्रॉइड परियोजनाओं में बटन, लेबल, टेक्स्टबॉक्स जैसे बहुत सारे घटक हैं। उदाहरण के लिए इतना आसान नाम "नाम" यह "नाम" की पहचान करने के लिए बहुत भ्रामक है लेबल या टेक्स्टबॉक्स। मुख्य रूप से ऐसा तब होता है जब आप कुछ अन्य डेवलपर्स द्वारा विकसित परियोजनाओं को बनाए रख रहे होते हैं।

इसलिए इस तरह के भ्रम से बचने के लिए मैंने बटन टेक्स्टबॉक्स या लेबल के लिए निम्नलिखित नामों का इस्तेमाल किया

उदाहरण :

 btnName
 labName
 txtName
 listName

हो सकता है कि यह आपके लिए मददगार हो।


-2

कुछ प्रतिबंध हैं:

  1. संसाधन नाम में az, 0-9, _ होना चाहिए
  2. संसाधन का नाम az, _ से शुरू होना चाहिए

वैसे, दिशानिर्देशों का पालन करना या मानक कोड से सीखना अधिक उचित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.