2010-04-15 18 views
10

मैं छोटे कार्यों के लिए स्क्रिप्टिंग भाषाओं का उपयोग करना पसंद करता हूं, वास्तव में सरल http बॉट, थोक आयात/निर्यात करने के लिए कहीं भी आदि से डेटा आदि ... मूल फेंकने वाली स्क्रिप्ट और सरल सामान। मुद्दा यह है कि एक स्क्रिप्टिंग भाषा त्वरित प्रोग्राम लिखने के लिए एक कुशल उपकरण है। इस बिंदु पर ग्रोवी की मेरी समझ के लिए ...ग्रूवी को एक स्क्रिप्टिंग भाषा के रूप में उपयोग करना

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

तो अभी मैं सोच रहा हूं कि क्या मैं ग्रोवी को एक स्क्रिप्टिंग भाषा के रूप में स्विच कर सकता हूं या पर्ल, पायथन या रूबी जैसे अधिक सामान्य पटकथा भाषा का उपयोग करना जारी रखता हूं।

उत्तर

12

@Zombies, मैं आपको एक त्वरित उदाहरण एक स्क्रिप्ट से मैं हाल ही में लिखा था दिखाते हैं:

def fetch(build, toFile) { 
    new FTPClient().with { 
     connect ftpServer 
     enterLocalPassiveMode() 
     login ftpUser, ftpPassword 
     changeWorkingDirectory "/var/staging/revision-${build}" 
     fileType = FTPClient.BINARY_FILE_TYPE 
     toFile.withOutputStream { ostream -> 
      retrieveFile "build-${build}.zip", ostream 
     } 
     disconnect() 
    } 
} 

यह कॉमन्स शुद्ध API का उपयोग करता है, लेकिन मुझे लगता है कि आप सहमत होंगे यह तुलनीय की तुलना में काफी स्पष्ट वाक्य रचना है जावा प्रोग्राम तो मुझे नहीं लगता कि जावा एपीआई का उपयोग करके एक स्क्रिप्टिंग भाषा रखने के उद्देश्य को हराया जाता है। इसके अलावा, यह आपको जावा एपीआई के अपने मौजूदा ज्ञान का लाभ उठाने में मदद करता है, इसलिए यह एक बहुत ही व्यावहारिक दृष्टिकोण है।

5

ग्रोवी का एक लक्ष्य जावा के साथ पारदर्शी अंतःक्रियाशीलता होना है। ग्रोवी डिजाइन द्वारा "स्क्रिप्टिंग सुविधाओं के साथ एक जावा निर्भर भाषा" है। हालांकि, मुझे नहीं लगता कि ये सुविधाएं नाबालिग हैं - ग्रोवी में कई विशेषताएं हैं जो स्थिर प्रोग्रामिंग भाषाओं (जैसे जावा) में नहीं मिलती हैं।

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

+0

असल में मैं जावा का बहुत उपयोग करता हूं और मैं ग्रोवी जैसे कंपनी में एक स्क्रिप्टिंग भाषा शामिल कर सकता हूं जहां मैं भी काम करता हूं। मेरी चिंता यह है कि अगर मुझे जावा जार का उपयोग करना है, तो मुझे एक पटकथा भाषा रखने के उद्देश्य को हराया जा रहा है। तो हाँ, मुझे पता है कि ग्रोवी में बड़ी पटकथा विशेषताएं हैं, लेकिन मेरा सवाल है कि मुझे तीसरे पक्ष के जेएआर जैसे कॉमन के एचटीपी क्लाइंट का उपयोग करने के लिए कठोर जावा सिंटैक्स का उपयोग नहीं करना पड़ेगा? इसके अलावा, एक groovy आधारित http क्लाइंट कहने के लिए बहुत समर्थन नहीं लग रहा है। यदि मैं वास्तव में स्क्रिप्टिंग कर रहा हूं तो मैं ग्रोवी पर एचटीपी कॉमन्स की तुलना में पर्ल पर मैकेनाइजेशन का उपयोग करता हूं। – Zombies

+0

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

4

उदाहरण के लिए, अगर मैं कुछ http स्क्रिप्टिंग करना चाहता हूं, तो क्या मैं कॉमन्स एचटीपी क्लाइंट को आमंत्रित करने के लिए जावा सिंटैक्स का उपयोग करने पर सही नहीं हूं?

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

ऐसा प्रतीत नहीं होता ग्रूवी आधारित पुस्तकालयों के लिए किसी भी प्रोत्साहन नहीं है कि विकसित किया जाना है जब वहाँ पहले से ही इतने सारे अच्छे जावा हैं एक बाहर वहाँ

के बजाय एक पूरी तरह से नए पुस्तकालय के विकास, एक ग्रूवी है लाइब्रेरी लेखक अक्सर एक मौजूदा जावा लाइब्रेरी में "ग्रूवियर" एपीआई प्रदान करेगा। उदाहरणों में ग्रेल्स द्वारा प्रदान किए गए हाइबरनेट निर्माता, और HTTP Builder (जो कॉमन्स एचटीपी क्लाइंट को प्रतिनिधि हैं) शामिल हैं।

ये ग्रोवी एपीआई सीधे जावा एपीआई का उपयोग करने के लिए एक अधिक कॉम्पैक्ट और बेवकूफ विकल्प प्रदान करते हैं।

4

ग्रोवी "बॉक्स से बाहर" ग्रूवियर संस्करणों या भाषा संरचनाओं के साथ बड़ी संख्या में सामान्य वर्गों को प्रतिस्थापित करता है, जिसमें एक्सएमएल, HTTP अनुरोधों, एसक्यूएल डेटाबेस तक पहुंच और नियमित अभिव्यक्तियों के लिए कक्षाएं शामिल हैं। अधिकांश स्क्रिप्टिंग कार्यों के लिए, आपको जावा पुस्तकालयों का बिल्कुल उपयोग नहीं करना पड़ेगा (हालांकि आपके पास अभी भी वह विकल्प होगा)। लेकिन अगर आपकी स्क्रिप्ट नंगे जावा पुस्तकालयों का उपयोग करती है, तो आप सीधे जावा पर ग्रोवी के साथ आगे बढ़ेंगे। जहां ग्रोवी चमकती है "गोंद" कोड में, जैसे डेटा संरचनाओं और फ़ाइल I/O सेट अप करना।

मानचित्र और सूची आपको जावा संगत सूची और मानचित्र बनाने की अनुमति देती है; जावा कक्षाओं के साथ काम करने वाली नियमित जावा ऑब्जेक्ट्स। ग्रोवी अक्सर एक बहु-लाइन जावा विधि आविष्कार को परिवर्तनीय घोषणाओं और एक-लाइनर में इनटाइलाइजेशन के साथ बदल देता है।

एक स्ट्रिंग में एक पूरी फ़ाइल को लोड करने इस छोटे से टुकड़ा पर विचार करें:

def fileContents = new File(filename).text 

बनाम

String fileContents = ""; 
try { 
    BufferedReader reader = new BufferedReader(new FileInputStream(filename)); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     text = text + line + "\n"; 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

अपवाद संचालन अक्सर लिपियों में एक महत्वपूर्ण विचार नहीं है और यह आसानी से अनदेखा किया जा सकता।

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

5

ग्रोवी स्क्रिप्टिंग के लिए काफी आसान हो सकता है। हाल ही में मुझे मेवेन निर्भरताओं को lib निर्देशिका में लाने के लिए एक स्क्रिप्ट की आवश्यकता थी और एक ग्रोवी स्क्रिप्ट के साथ समाप्त हुआ। यह स्निपेट एक पोम पार्स करता है और आपको जार की एक सूची देता है। एक्सएमएल पार्सिंग के लिए बहुत प्यारी!

#!/usr/bin/env groovy 
def pom = new XmlSlurper().parse('pom.xml') 
def repo = "${System.env.HOME}/.m2/repository" 

pom.dependencies.dependency.each { dep -> 
    def jarName = "${dep.artifactId}-${dep.version}.jar" 
    def groupPath = dep.groupId.text().replaceAll('\\.', '/') 
    def jarPath = "${repo}/${groupPath}/${dep.artifactId}/${dep.version}" 
    println "$jarPath/$jarName" 
} 
2

ग्रूवी चट्टानों, एक बार आप बहुत तंग वाक्य रचना का उपयोग करना सीख मिलता है, आप आप बस "धीमी गति से जिस तरह से" किया है बहुत कुछ के लिए इसका इस्तेमाल करने लगते हैं।

दूसरे दिन मैं एक चर्चा में था जो किसी भी तरह से सोच रहा था कि हमारे सिस्टम में से एक में GUID में कितने अक्षर हैं। के बजाय सिर्फ अंक गिनती, यह सिर्फ यह करने के लिए आसान था:

def str = '92228498-6A2F-DBA2-7A2C-F54B9E607E3A' 
int num = 0 
str.each { 
    num++ 
} 
println num 

अजीब एक स्थानीय या साझा स्क्रिप्ट निर्देशिका में है कि और यह वहाँ भविष्य के लिए हो जाएगा।

संबंधित मुद्दे