रूबी के पास किसी अन्य भाषा की तरह ही इंटरफेसेस हैं।
ध्यान दें कि आपको इंटरफ़ेस की अवधारणा को भ्रमित न करने के लिए सावधान रहना होगा , जो एक इकाई के जिम्मेदारियों, गारंटी और प्रोटोकॉल का एक सार विनिर्देश है, जिसकी अवधारणा के साथ interface
जावा, C # और VB.NET प्रोग्रामिंग में एक कीवर्ड है। भाषाओं। रूबी में, हम हर समय पूर्व का उपयोग करते हैं, लेकिन बाद वाला मौजूद नहीं है।
दोनों में अंतर करना बहुत जरूरी है। इंटरफ़ेस क्या महत्वपूर्ण है , नहीं interface
। interface
आप उपयोगी काफी कुछ भी नहीं बताता है। जावा में मार्कर इंटरफेस की तुलना में कुछ भी बेहतर प्रदर्शन नहीं करता है, जो ऐसे इंटरफेस हैं जिनमें कोई सदस्य नहीं है: बस एक नज़र डालें java.io.Serializable
और java.lang.Cloneable
; उन दो का interface
मतलब बहुत अलग चीजें हैं, फिर भी उनके पास एक ही हस्ताक्षर हैं।
इसलिए, अगर दो interface
का मतलब है कि अलग-अलग चीजें हैं, एक ही हस्ताक्षर है, तो वास्तव में interface
आपको क्या गारंटी है?
एक और अच्छा उदाहरण:
package java.util;
interface List<E> implements Collection<E>, Iterable<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException;
}
क्या है इंटरफ़ेस की java.util.List<E>.add
?
- कि संग्रह की लंबाई घटती नहीं है
- इससे पहले कि संग्रह में थे सभी आइटम अभी भी वहाँ हैं
- यह
element
संग्रह में है
और उनमें से कौन वास्तव में दिखाता है interface
? कोई नहीं! इसमें ऐसा कुछ भी नहीं है interface
जो कहता है कि Add
विधि को बिल्कुल भी जोड़ना चाहिए , यह सिर्फ एक तत्व को संग्रह से निकाल सकता है ।
यह उस का पूरी तरह से मान्य कार्यान्वयन है interface
:
class MyCollection<E> implements java.util.List<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException {
remove(element);
}
}
एक और उदाहरण: जहां java.util.Set<E>
यह वास्तव में कहता है कि यह है, आप जानते हैं, एक सेट ? कहीं भी नहीं! या अधिक सटीक, प्रलेखन में। अंग्रेजी में।
interfaces
जावा और .NET दोनों से बहुत अधिक मामलों में , सभी प्रासंगिक जानकारी वास्तव में डॉक्स में हैं, न कि प्रकारों में। इसलिए, यदि प्रकार आपको कुछ भी दिलचस्प नहीं बताते हैं, तो उन्हें क्यों रखें? सिर्फ प्रलेखन के लिए क्यों न रहें? और ठीक यही रूबी करती है।
ध्यान दें कि अन्य भाषाएं हैं जिनमें इंटरफ़ेस को वास्तव में सार्थक तरीके से वर्णित किया जा सकता है। हालाँकि, वे भाषाएँ आमतौर पर उस निर्माण को नहीं कहते हैं जो इंटरफ़ेस का वर्णन करता है " interface
", वे इसे कहते हैं type
। एक निर्भर-टाइप की गई प्रोग्रामिंग भाषा में, आप उदाहरण के लिए, उन गुणों को व्यक्त कर सकते हैं जो एक sort
फ़ंक्शन मूल के समान लंबाई का एक संग्रह लौटाते हैं, जो मूल में है हर तत्व भी सॉर्ट किए गए संग्रह में है और कोई बड़ा तत्व नहीं है एक छोटे तत्व से पहले दिखाई देता है।
तो, संक्षेप में: रूबी एक जावा के बराबर नहीं है interface
। यह है , तथापि, एक बराबर एक जावा के लिए है इंटरफेस है, और यह वास्तव में जावा में के रूप में ही है: प्रलेखन।
साथ ही, जावा में भी, इंटरफेसेस को निर्दिष्ट करने के लिए एक्सेप्टेंस टेस्ट का उपयोग किया जा सकता है ।
विशेष रूप से, रूबी में, किसी वस्तु का इंटरफ़ेस निर्धारित किया जाता है कि वह क्या कर सकता है , न कि class
वह क्या है, या क्या module
मिलाता है। किसी भी वस्तु को जिस <<
विधि से जोड़ा जा सकता है। यह यूनिट परीक्षणों में बहुत उपयोगी है, जहां आप बस एक Array
या String
अधिक जटिल के बजाय पास कर सकते हैं Logger
, भले ही Array
और इस तथ्य के अलावा Logger
एक स्पष्ट रूप interface
से साझा न करें कि उनके पास एक विधि है <<
।
एक अन्य उदाहरण है StringIO
, जो औजार एक ही इंटरफ़ेस के रूप में IO
है और इस तरह के एक बड़े हिस्से इंटरफेस की File
, लेकिन अलावा किसी आम पूर्वज साझा किए बिना Object
।