रूबी के पास किसी अन्य भाषा की तरह ही इंटरफेसेस हैं।
ध्यान दें कि आपको इंटरफ़ेस की अवधारणा को भ्रमित न करने के लिए सावधान रहना होगा , जो एक इकाई के जिम्मेदारियों, गारंटी और प्रोटोकॉल का एक सार विनिर्देश है, जिसकी अवधारणा के साथ 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।