ग्रूवी में डिफ का उपयोग कब करें?


23

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

वर्तमान में, जब विधि वापसी के प्रकार और तर्क की घोषणा करते हैं, तो मैं जानबूझकर बताता हूं कि किन वस्तुओं को अंदर ले जाना चाहिए और बाहर थूकना चाहिए (कोड पठनीयता के लिए और मैं एक जावा पृष्ठभूमि से आता हूं जो मेरे लिए समझ में आता है) उदाहरण:

String doSomething(String something){
    //code
}
// vs
def doSomething(def somthing){
    //code
}
// vs 
def doSomething(somthing){
    // code
}

इसलिए मुझे लगता है कि मेरा सवाल यह है कि यह केवल एक प्राथमिकता है कि इसका उपयोग कब करना है defया हर समय इसका उपयोग करने का एक वास्तविक लाभ है? (मैंने अंतिम उदाहरण जोड़ा क्योंकि मुझे लगा कि यह ग्रूवी के लिए एक व्यवहार्य विकल्प के रूप में सवाल के साथ फिट बैठता है)


3
यहां देखें कि आपका सहकर्मी क्या मानता है: stackoverflow.com/questions/184002/…
रेमीगिजस पनकेविअस

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

1
ठीक है, मैं अब आपकी बात देखता हूं। यह गतिशील प्रोग्रामिंग बनाम दृढ़ता से टाइप किया गया सवाल है। चर्चा के प्रकार मैं लौ युद्धों के कारण बचने की कोशिश करता हूं :)
रेमीजियस पांकेविअसियस

जवाबों:


20

अच्छी प्रोग्रामिंग (यहां तक ​​कि स्क्रिप्टिंग) अभ्यास के रूप में, हमेशा एक चर के लिए एक निश्चित (हालांकि जरूरी नहीं कि ठोस) प्रकार को निर्दिष्ट करने पर विचार करें। defकेवल तभी उपयोग करें जब चर पर कोई निश्चित प्रकार लागू न हो।

चूंकि ओपी जावा को जानता है, इसलिए यह एक प्रकार का निर्दिष्ट करने से अलग नहीं है Object(हालांकि इसमें मामूली अंतर लगता है )। इस प्रश्न का उत्तर तब किसी प्रश्न का उत्तर देने से अलग नहीं होगा जैसे: "हमेशा Objectजावा में प्रकार का उपयोग क्यों नहीं किया जाता है?"

संभव के रूप में प्रकार के बारे में निश्चित होने के रूप में कीड़े की संभावना कम कर देता है, और यहां तक ​​कि स्व-प्रलेखन के रूप में भी कार्य करता है। जबकि, यदि कोई जानबूझकर एक गतिशील तर्क को लागू कर रहा है, तो उपयोग defकरने से बहुत अधिक समझ आ सकती है। यह वास्तव में ग्रूवी की सबसे बड़ी ताकत में से एक है; कार्यक्रम गतिशील या सांख्यिकीय रूप से टाइप किया जा सकता है क्योंकि किसी को इसकी आवश्यकता है! बस आलस को इस्तेमाल करने का कारण न बनने दें def;-)

उदाहरण के लिए यह विधि निश्चित तर्क प्रकार और वापसी प्रकार के साथ समझ में आता है:

// def val or Object val, opens up the possibility
// of the caller sending a non-numeric value 
Number half(Number val) {  
    val/2
}

जबकि इस विधि प्रकार के साथ समझ में आता है def

// I'd let them pass an argument of any type; 
// type `Object` makes sense too
def getIdProperty(def val) {   
    if(val?.hasProperty('id')) {
        // I don't know the type of this returned 
        // value and I don't really need to care 
        return val.id            
    }
    else {
        throw new IllegalArgumentException("Argument doesn't have an 'id' property")
    }
}

-1

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

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