ऑब्जेक्ट ओरिएंटेड जावास्क्रिप्ट का परिचय

किसी कारण से आईटी उद्योग में यह देखने की प्रवृत्ति है कि यदि आप ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) विधियों का उपयोग नहीं कर रहे हैं, तो आप "वास्तविक प्रोग्रामर" नहीं हैं। यह वास्तव में लेने के लिए कुछ हद तक मूर्खतापूर्ण रुख है, क्योंकि ऐसी कई परिस्थितियां हैं जहां OOP किसी समस्या से निपटने के लिए सबसे उपयुक्त तरीका नहीं है। यह जावा जैसी भाषाओं में दोष है जो ओओपी को हर प्रोग्रामिंग कार्य में मजबूर करता है चाहे आपको इसकी आवश्यकता हो या नहीं।

जावास्क्रिप्ट (जिसका जावा से कोई लेना देना नहीं है) काफी अलग भाषा है। यह अधिकांश क्षेत्रों में घटी हुई जटिलता के साथ लगभग असीमित स्वतंत्रता और बहुमुखी प्रतिभा प्रदान करता है। दुर्भाग्य से कुछ चीजें हैं जो जावास्क्रिप्ट में अधिक जटिल हैं क्योंकि यह स्वतंत्रता आपको देने की कोशिश करती है।

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

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

ठीक है, यह कठिन है, लेकिन यह इतना कठिन नहीं है

इससे पहले कि आप ऑब्जेक्ट ओरिएंटेड जावास्क्रिप्ट की अवधारणा को सोचना शुरू करें, आपके लिए बहुत अधिक है, इस बात पर विचार करें कि आप ओओपी का उपयोग कर रहे हैं, भले ही आपको इसकी जानकारी न हो। शुद्धतावादी असहमत हो सकते हैं, लेकिन मुझे लगता है कि यह कहना उचित है कि यदि आप पहले से ही HTML और CSS का उपयोग कर रहे हैं, और आपने वेब पेज पर HTML तत्वों में हेरफेर करने के लिए कभी-कभी जावास्क्रिप्ट का उपयोग किया है, तो आप पहले से ही एक अनुभवी OOP प्रोग्रामर हैं।

एक वेब पेज पर हर HTML तत्व वास्तव में एक वस्तु है। वे सभी दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) पदानुक्रम में फिट होते हैं, जिसका अर्थ है कि उनके पास एक परिभाषित वर्ग, परिभाषित गुण और परिभाषित विरासत है। जब तक आप स्पष्ट रूप से एक संपत्ति मूल्य निर्धारित नहीं करते हैं, तब तक सभी ऑब्जेक्ट अपने डिफ़ॉल्ट संपत्ति मूल्यों का उपयोग करेंगे। जब आप एक सीएसएस निर्देश लिखते हैं, तो वास्तव में क्या हो रहा है आप एक वर्ग के एक या अधिक संपत्ति मूल्यों को संशोधित करने के लिए एक विधि का उपयोग कर रहे हैं।

हर बार जब आप HTML निर्देश लिखते हैं, तो आप एक कक्षा का एक नया उदाहरण बनाते हैं। और जैसा कि आप निश्चित रूप से पहले से ही जानते हैं, आप प्रत्येक ऑब्जेक्ट प्रकार के पूर्व-निर्धारित वर्ग के आधार पर अपनी कक्षाएं बना सकते हैं (उदाहरण के लिए, आप <h2 वर्ग = "सबहडिंग"> बना सकते हैं, जिसमें मूल वर्ग से बहुत भिन्न गुण हो सकते हैं से बनाया गया था)। आप निर्दिष्ट कर सकते हैं कि इस वर्ग के साथ H2 ऑब्जेक्ट में नियमित H2 ऑब्जेक्ट से अलग रंग और आकार होगा। और आप उन संशोधित वस्तुओं का फिर से उपयोग कर सकते हैं जितनी बार आप चाहें। मूल H2 ऑब्जेक्ट एक ऑब्जेक्ट टेम्पलेट है और आपका नया वर्ग टेम्पलेट क्लास से लिया गया है।

तो हाँ, OOP आसान नहीं है, लेकिन आप शायद पहले से ही ऐसा कर रहे हैं, तो डरने की क्या बात है?

अगले स्तर: अपनी खुद की वस्तुओं का निर्माण

अंतर्निहित डोम ऑब्जेक्ट्स के साथ काम करना बहुत आसान है। आपको और चुनौतियां चाहिए। अपनी खुद की वस्तुएं बनाना OOP के उच्च स्तर का पहला कदम है।

प्रस्तावना के साथ, आप शायद उम्मीद कर रहे हैं कि एक वस्तु का निर्माण एक बड़ी बात है, जिसमें बहुत सारे जटिल कोड की आवश्यकता होती है। निश्चित रूप से यदि आपने कभी जावा या C # जैसी भाषा में कस्टम ऑब्जेक्ट क्लास बनाने की कोशिश की है, तो आप एक लंबा क्लास कंस्ट्रक्टर बनाने की उम्मीद करेंगे। यहाँ हम इसे जावास्क्रिप्ट में कैसे करते हैं:

अच्छा था कि विरोधी जलवायु, हुह? हमने वहाँ क्या किया था हमने कक्षा "myObject" की एक खाली वस्तु बनाई थी। स्पष्ट रूप से खाली वस्तुएं उबाऊ हैं, क्योंकि वे स्मृति में जगह लेने के अलावा कुछ भी नहीं करते हैं। उपयोगी होने के लिए, किसी वस्तु को सामग्री की आवश्यकता होती है। आइए एक अधिक व्यावहारिक वर्ग पर विचार करें:

ऊपर एक ऑब्जेक्ट दिखाई देता है जिसे objAlien कहा जाता है जिसमें ये सभी अलग-अलग गुण (साधारण चर) और तरीके (फ़ंक्शन) हैं जो इसके भीतर परिभाषित हैं। तकनीकी रूप से, तब, आप किसी ऑब्जेक्ट को वेरिएबल्स और / या फ़ंक्शंस की श्रेणी में रख सकते हैं।

एक कार्यक्रम में वस्तुओं का उपयोग करना

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

यह कोड 20 को पतला हरा एलियंस बनाता है, जिससे वे 110 पिक्सेल अलग कर देते हैं (इसलिए हम इससे अनुमान लगा सकते हैं कि एलियन को स्टोर करने के लिए उपयोग की जाने वाली छवि 100px चौड़ी है, और प्रत्येक एलियन के बीच 10px मार्जिन है)। जाहिर है, यह जावास्क्रिप्ट में एक गेम को लागू करने का एक अच्छा तरीका नहीं है क्योंकि बेहतर तकनीक हैं, लेकिन यह लेख गेम बनाने के बारे में नहीं है, यह वस्तुओं को बनाने और उपयोग करने के बारे में है।

ऑब्जेक्ट को हमेशा नए कीवर्ड का उपयोग करके नहीं जोड़ा जाना चाहिए। यहां एक परियोजना से कोड का एक नमूना है जहां एक वस्तु किसी अन्य वस्तु के मूल्यों का उपयोग करके अपने गुणों को निर्धारित करती है:

यहां हम किसी ऑब्जेक्ट का उपयोग करने का एक बहुत ही जटिल तरीका देख सकते हैं, जहां ऑब्जेक्ट का मान R ऑब्जेक्ट की अटर प्रॉपर्टी को पास किया जाता है। यदि आप JSON (जावास्क्रिप्ट ऑब्जेक्ट संकेतन) से परिचित हैं, तो आप सोच सकते हैं कि उदाहरण का पहला भाग JSON सिंटैक्स त्रुटियों के साथ उपयोग कर रहा है, लेकिन वास्तव में यह JSON कोड नहीं है।

भरण को छोड़कर, चर नाम, का कारण जावास्क्रिप्ट को चर नाम में माइनस ऑपरेटर (जो सीएसएस गुण हैं) को संसाधित करने से रोकना है। चूँकि उस कार्यक्रम को लिखा गया था, इसलिए सीएसएस संपत्तियों को फ़ॉन्ट-परिवार जैसे फ़ॉन्टफ़ैमिली के रूप में लिखने की अनुमति देने के लिए परिवर्तन किए गए थे, लेकिन इस परिवर्तन का लाभ उठाने के लिए इस विरासत कोड को अनुकूलित नहीं किया गया है।

वस्तुओं का उपयोग क्यों करें?

ऑब्जेक्ट उन स्थितियों के लिए सर्वोत्तम हैं, जहाँ आपको किसी चीज़ के कई उदाहरण बनाने की आवश्यकता होती है, या जहाँ आपको किसी विशेष प्रकार की चीज़ से संबंधित डेटा को समूहीकृत करने के लिए एक सरल तरीके की आवश्यकता होती है। ऊपर दिए गए गेम के उदाहरण में, हम देख सकते हैं कि objAlien ऑब्जेक्ट की कई प्रतियाँ बनाना संभव था, लेकिन हम इसे जोड़ने के बाद ऑब्जेक्ट के गुणों में हेरफेर भी कर सकते थे, जो कि उदाहरण के मामले में x गुण था।

जब वस्तुओं का उपयोग नहीं करना है?

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

जावास्क्रिप्ट ऑब्जेक्ट्स को अन्य OOP भाषाओं में ऑब्जेक्ट्स की तुलना में बनाना आसान क्यों है

जावा और यहां तक ​​कि विज़ुअल बेसिक जैसी भाषाओं में, ऑब्जेक्ट्स बनाना एक बड़ा काम है। ऐसा इसलिए है क्योंकि आपको इसे परिभाषित करने से पहले अपनी वस्तु को आधार बनाने के लिए एक वर्ग टेम्पलेट (या किसी मौजूदा का उपयोग करना) बनाने की आवश्यकता है। जावास्क्रिप्ट में यह आवश्यक नहीं है क्योंकि हमें एक सरल निर्माण तकनीक दी गई है (objectname = {…})। जावास्क्रिप्ट में ऑब्जेक्ट भी किसी भी प्रकार के चर को शामिल कर सकते हैं, जिसमें सरणियाँ भी शामिल हैं, और प्रकार की घोषणाएं अस्तित्वहीन हैं। रिटर्न मान वैकल्पिक हैं।

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

आपको कोड के ऊपर लाइन के लिए 5 को ID "par1" के साथ तत्व के अंदर रखने की काफी उम्मीद होगी। लेकिन अगर आप कुछ टाइप करने वाले थे:

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

इसके लिए परीक्षण करने का एक तरीका है:

यह प्रतिक्रिया थोड़ी चरम है, लेकिन आपको यह विचार मिलता है। ध्यान दें कि हम "! ==" के लिए परीक्षण कर रहे हैं, न कि "! =" के बारे में, जो भ्रमित होने के लिए एक आसान बात है। यहाँ यह करने का एक और तरीका है:

एक ही बात, अलग तरीका। आप उन्हें बनाने के बाद वस्तुओं में गुण भी जोड़ सकते हैं। आप इस तरह से कर सकते हैं:

जाहिर है आप उसी तरह से गुणों के मूल्यों को भी बदल सकते हैं। ऑब्जेक्ट से पसंदीदा संपत्ति को हटाने के लिए, हमें ऐसा करने की आवश्यकता होगी:

ऐसी बहुत कम स्थितियाँ हैं जहाँ यह कभी आवश्यक होगा।

वस्तुओं को फिर से उपयोग करने योग्य बनाना

आपने संभवतः वस्तुओं को बनाने के साथ सबसे बड़ी संभावित समस्या पर ध्यान दिया है, जो यह है कि यदि आप विभिन्न प्रकार के एलियंस चाहते हैं, तो आपको objAlien.type संपत्ति को एक सरणी बनाना होगा। लेकिन एक और तरीका है, जो बेहतर है।

इस तकनीक को ऑब्जेक्ट प्रोटोटाइपिंग कहा जाता है, जिसका अर्थ है कि आप ऑब्जेक्ट के लिए एक मूल टेम्पलेट बनाते हैं, लेकिन सभी विवरण नहीं भरते हैं। यहाँ भी, हम वस्तुओं को एक खेल में जोड़ने के वास्तविक तरीके के करीब पहुँच रहे हैं।

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

तो अब वास्तव में हम प्रोटोटाइप के आधार पर वस्तुओं का निर्माण कर सकते हैं:

यह ऐसा करने के समान है:

क्योंकि हमने एक प्रोटोटाइप बनाया था, इसलिए हमें इसे दूसरे तरीके से करने की ज़रूरत नहीं थी, और विभिन्न प्रकार के हथियारों के साथ विभिन्न प्रकार के एलियंस की घोषणा करना, हथियारों की संख्या, हथियार और शुरुआती स्थिति बहुत आसान है।

आगे क्या?

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

बोगदान रैंकी

बोगदान इंसपायर्ड मैग का एक संस्थापक सदस्य है, जिसके पास इस अवधि में लगभग 6 वर्षों का अनुभव है। अपने खाली समय में वह शास्त्रीय संगीत का अध्ययन करना और दृश्य कला का पता लगाना पसंद करते हैं। वह भी Fixies के साथ काफी जुनूनी है। वह पहले से ही 5 का मालिक है।