रूबी का आविष्कार करने वाले मत्ज़ ने कहा कि उन्होंने भाषा को पाइथन से अधिक ऑब्जेक्ट-ओरिएंटेड बनाने के लिए डिज़ाइन किया है। रूबी पाइथन से अधिक वस्तु-उन्मुख कैसे है?रूबी पाइथन से अधिक वस्तु-उन्मुख कैसे है?
उत्तर
,
है & hellip; जहां रूबी में सभी कार्यों और अधिकांश ऑपरेटर वास्तव में किसी ऑब्जेक्ट के तरीके हैं, कई पायथन फ़ंक्शन विधियों के बजाय प्रक्रियात्मक कार्य होते हैं।
रूबी के निर्माता मैटज़ के साथ निम्नलिखित interview, आपके प्रश्न और उपरोक्त बिंदु पर अतिरिक्त संदर्भ प्रदान करता है।
और नरकिप;
स्टीवर्ट: चलिए थोड़ा इतिहास शुरू करते हैं। आपने रूबी लिखने का फैसला क्यों किया?
मैट: 1 99 3 में, मैं स्क्रिप्टिंग भाषाओं के बारे में एक सहयोगी के साथ बात कर रहा था। मैं उनकी शक्ति और उनकी संभावनाओं से बहुत प्रभावित था। मुझे लगा कि स्क्रिप्टिंग जाने का रास्ता था।
लंबे समय तक ऑब्जेक्ट उन्मुख प्रोग्रामिंग प्रशंसक के रूप में, मुझे लगता है कि ओओ प्रोग्रामिंग भी स्क्रिप्टिंग के लिए बहुत उपयुक्त थी। तब मैंने नेट के चारों ओर देखा। मैंने पाया कि पर्ल 5, जो अभी तक जारी नहीं हुआ था, ओओ सुविधाओं को लागू करने जा रहा था, लेकिन यह वास्तव में मैं नहीं चाहता था। मैंने पर्ल पर एक ऑब्जेक्ट उन्मुख स्क्रिप्टिंग भाषा के रूप में छोड़ दिया।
तब मैं पाइथन में आया। यह एक व्याख्यात्मक, वस्तु उन्मुख भाषा थी। लेकिन मुझे ऐसा नहीं लगता था कि यह एक "पटकथा" भाषा थी। इसके अलावा, यह प्रक्रियात्मक प्रोग्रामिंग और ऑब्जेक्ट उन्मुख प्रोग्रामिंग की एक संकर भाषा थी।
मैं एक स्क्रिप्टिंग भाषा चाहता था जो पर्ल, से अधिक शक्तिशाली था और पाइथन से अधिक ऑब्जेक्ट उन्मुख था। यही कारण है कि मैंने अपनी खुद की भाषा तैयार करने का फैसला किया।
और नरक;
आमतौर पर दिया गया एक उदाहरण len
है, जो पाइथन में एक अंतर्निहित कार्य है। आप अपनी वस्तुओं में एक विशेष __len__
विधि लागू कर सकते हैं जिसे len
द्वारा बुलाया जाएगा, लेकिन len
अभी भी एक फ़ंक्शन है। रुबी में, ऑब्जेक्ट्स में केवल .length
प्रॉपर्टी/विधि है, इसलिए के बजाय obj.length
कहने पर यह अधिक ऑब्जेक्ट उन्मुख दिखाई देता है, हालांकि हुड के नीचे गहराई बहुत कुछ होती है।
ने कहा कि वर्षों से पाइथन अधिक ऑब्जेक्ट-ओरिएंटेशन की तरफ बढ़ गया है। वर्तमान में सभी ऑब्जेक्ट्स (और स्पष्ट रूप से उपयोगकर्ता परिभाषित ऑब्जेक्ट्स) object
कक्षा से प्राप्त होते हैं। मेटा-वर्गों को भी जोड़ा गया है, और एबीसी (सार बेस क्लासेस) की सहायता से कई अंतर्निर्मित और कोर लाइब्रेरी कक्षाओं को पदानुक्रमों में व्यवस्थित किया गया है।
पायथन के भारी उपयोग में मुझे कभी भी ओओ विभाग में कमी नहीं मिली है। यह सबकुछ कर सकता है जो मैं वस्तुओं के साथ करना चाहता हूं। सच है, रुबी कुछ हद तक पूरी तरह ओओ लगता है, लेकिन कम से कम मेरे अनुभव में यह वास्तव में व्यावहारिक चिंता नहीं रही है।
मुझे 'लेन' उदाहरण भ्रामक लगता है। उस अर्थ में ऑपरेटर ओवरलोडिंग ऑब्जेक्ट उन्मुख नहीं है, क्योंकि 'ए + बी' विधि कॉल की तरह नहीं दिखता है। महत्वपूर्ण बात यह है कि इसे एक विधि के रूप में लागू किया जाता है। – nikow
@nikow: बिंदु यह है कि 'लेन' एक वास्तविक कार्य है। ऑपरेटर अधिभार केवल सिंटैक्टिक चीनी है - संकलक वास्तव में एक विधि कॉल उत्पन्न करता है। यह पायथन के 'लेन' –
के मामले में नहीं है जैसा कि आपने स्वयं लिखा है 'लेन' आमतौर पर '__len__' विधि को कॉल करता है। एक समारोह के रूप में 'लेन' होने के कारण ऑपरेटर ओवरलोडिंग की तरह सिंटैक्टिक चीनी होती है। – nikow
यदि आप 1 99 3 से पायथन लेते हैं और रूबी के साथ तुलना करते हैं तो बाद वाला ऑब्जेक्ट उन्मुख होता है। हालांकि, overhaul in Python 2.2 के बाद यह अब सत्य नहीं है। मैं कहूंगा कि आधुनिक पायथन ऑब्जेक्ट उन्मुख के रूप में है।
+1। यह बहुत महत्वपूर्ण है। मैटज़ ने 23 फरवरी, 1 99 3 को रूबी की घोषणा की। मौजूदा भाषाओं के उनके सर्वेक्षण ने उन्हें रूबी पर काम करना शुरू कर दिया, इससे पहले भी वह पहले से ही रहे थे। इसलिए, आपको ऐतिहासिक संदर्भ को ध्यान में रखना होगा, आप केवल पायथन 3.2 के साथ तुलना नहीं कर सकते हैं, आपको 1992/93 में जो भी व्यापक रूप से उपलब्ध संस्करण था, उसे देखने की आवश्यकता है। इसके अलावा, आपको खाते में "सांस्कृतिक" संदर्भ लेना होगा: मैट स्मॉलटॉक से बहुत परिचित है। कोई भी जिसने कभी भी स्मॉलटाक का उपयोग किया है, आमतौर पर उन लोगों की तुलना में ओओ पर अधिक मजबूत विचार हैं। जैसे एलन के कहते हैं कि सभी राज्य निजी होना चाहिए। –
यह आसान है, लगभग सब कुछ रूबी (संख्याओं सहित) में एक वस्तु है; कोई स्केलर मूल्य नहीं हैं।
... जैसा कि पायथन में है। –
@ बायो, AFAIK, पायथन में, आप अंतर्निहित कक्षाओं (इंटीजर, स्ट्रिंग) में अपने कार्यों को इंजेक्ट नहीं कर सकते हैं ... इसलिए इस संबंध में रूबी अधिक ओओपी है। – st0le
@ st0le: मुझे नहीं लगता कि यह रूबी _more_ ऑब्जेक्ट उन्मुख बनाता है। सिर्फ इसलिए कि रूबी अधिक कक्षाओं को जोड़ने के लिए सभी वर्गों को फिर से खोल सकता है (आईएमएचओ) ओओ-नेस का एक उपाय नहीं है। जावा "कक्षाओं के तरीकों को जोड़ नहीं सकता"। [विश्वास नहीं कर सकता मैंने कभी जावा को एक उदाहरण के रूप में इस्तेमाल किया है!]। बंदर-पैच/डक-पंच में सक्षम होने के कारण ओओ-नेस की तुलना में गतिशीलता के बारे में अधिक जानकारी है। –
- 1. क्या रूबी में एक से अधिक ब्लॉक को एक से अधिक ब्लॉक पास करना संभव है?
- 2. पाइथन में अतिरिक्त से अधिक घटाव क्यों तेज है?
- 3. पाइथन से रूबी सीखना; मतभेद और समानता
- 4. क्या पाइथन अधिक ऑब्जेक्ट उन्मुख में बदल गया है?
- 5. पाइथन setup.py के रूबी समकक्ष क्या है?
- 6. रूबी पाइथन के "डीआईआर" के बराबर है?
- 7. क्या रूबी प्रतीकों के बराबर पाइथन है?
- 8. पाइथन सेटैटर के बराबर रूबी()
- 9. पाइथन बनाम रेल पर रूबी
- 10. यदि रूबी और पायथन दोनों में बंदर पैचिंग की अनुमति है, तो रूबी में यह और अधिक विवादास्पद क्यों है?
- 11. मैं अधिकतम का पता कैसे लगा सकता हूं। पाइथन में रिकर्सन गहराई अपवाद से अधिक है?
- 12. जब ब्लॉक फ़ंक्शन (रूबी) से अधिक उपयोगी होते हैं?
- 13. पाइथन में 24 घंटे से अधिक समय के मूल्यों से कैसे निपटें?
- 14. रूबी में पाइथन जेनरेटर की तरह कुछ है?
- 15. रूबी के "निरीक्षण" के पाइथन समकक्ष क्या है?
- 16. मोंगो अधिक से अधिक और
- 17. दो वस्तुओं के अधिक से अधिक लौटने के लिए सुरुचिपूर्ण रूबी वाक्यविन्यास
- 18. + = Concat से अधिक कुशल है?
- 19. पाइथन के आउटपुट के रूबी समकक्ष क्या है [: - 1]?
- 20. रूबी के प्रत्येक_स्लिस (गिनती) के पाइथन समकक्ष
- 21. सीएसएस सीखना अधिक से अधिक पेशेवर
- 22. लोग क्यों कहते हैं कि जावा पाइथन से अधिक स्केलेबल है?
- 23. Thread.Sleep अधिक इंतजार कर रहा है पर अपेक्षा से अधिक
- 24. उपयोग सिर्फ "से अधिक या बराबर है" या "इससे अधिक"
- 25. पाइथन में विशाल (संभावित रूप से 30000x30000 से अधिक) छवियों से निपटना?
- 26. रूबी
- 27. पाइथन के लिए रूबी समकक्ष/अन्य
- 28. पाइथन स्ट्र के बराबर रूबी [3:]
- 29. पाइथन या रूबी प्रवेश परीक्षण के लिए अच्छा है?
- 30. क्या पाइथन में रूबी में || = बराबर "फ़ंक्शन है?
* कई पायथन फ़ंक्शन प्रक्रियात्मक हैं *: मुझे लगता है कि इसका अर्थ है 'लेन' या '<'; वे क्रमशः विधियों ('__len__' और' __lt__') के रूप में लागू किए जाते हैं। –