groovy ट्यूटोरियल
शुरुआत ग्रूवी से हो रही है
खोज…
टिप्पणियों
ग्रूवी है
जावा वर्चुअल मशीन के लिए वैकल्पिक रूप से टाइप की गई गतिशील भाषा है
जावा की ताकत पर बनाता है, लेकिन इसमें पाइथन, रूबी, और स्मॉलटाक जैसी भाषाओं से प्रेरित अतिरिक्त बिजली विशेषताएं हैं
जावा प्रोग्रामिंग को लगभग शून्य लर्निंग कर्व के साथ आधुनिक प्रोग्रामिंग सुविधाएँ उपलब्ध कराता है
मजबूती और प्रदर्शन के लिए अपने कोड को स्टेटिकली टाइप करने और स्टेटिकली कंपाइल करने की क्षमता प्रदान करता है
डोमेन-विशिष्ट भाषाओं और अन्य कॉम्पैक्ट सिंटैक्स का समर्थन करता है ताकि आपका कोड पढ़ने और बनाए रखने में आसान हो
अपने शक्तिशाली प्रसंस्करण आदिम, OO क्षमताओं और एक चींटी डीएसएल के साथ शेल लिखना और स्क्रिप्ट बनाना आसान बनाता है
वेब, जीयूआई, डेटाबेस या कंसोल एप्लिकेशन विकसित करते समय मचान कोड को कम करके डेवलपर उत्पादकता बढ़ाता है
इकाई परीक्षण का समर्थन करके और आउट-ऑफ-द-बॉक्स की नकल करके परीक्षण को सरल बनाता है
मूल रूप से सभी मौजूदा जावा वर्गों और पुस्तकालयों के साथ एकीकृत करता है
सीधे जावा बाइटकोड को संकलित करता है ताकि आप जावा का उपयोग करने के लिए कहीं भी इसका उपयोग कर सकें
संस्करण
संस्करण | रिलीज नोट्स | रिलीज़ की तारीख |
---|---|---|
2.4 | http://groovy-lang.org/releasenotes/groovy-2.4.html | 2015-01-21 |
2.3 | http://groovy-lang.org/releasenotes/groovy-2.3.html | 2014-05-05 |
2.2 | http://groovy-lang.org/releasenotes/groovy-2.2.html | 2013-11-18 |
2.1 | http://groovy-lang.org/releasenotes/groovy-2.1.html | 2013-01-24 |
2.0 | http://groovy-lang.org/releasenotes/groovy-2.0.html | 2012-06-28 |
1.8 | http://groovy-lang.org/releasenotes/groovy-1.8.html | 2011-04-27 |
1.7 | http://groovy-lang.org/releasenotes/groovy-1.7.html | 2009/12/22 |
1.6 | http://groovy-lang.org/releasenotes/groovy-1.6.html | 2009-02-18 |
1.5 | http://groovy-lang.org/releasenotes/groovy-1.5.html | 2007-12-07 |
1.0 | 2007-01-02 |
स्थापना या सेटअप
ग्रूवी को स्थापित करने के दो सामान्य तरीके हैं।
डाउनलोड
ग्रूवी बाइनरी को ग्रूवी वेबसाइट के डाउनलोड पेज पर डाउनलोड किया जा सकता है। आप संग्रह को अनपैक और करने के लिए पथ में जोड़ सकते हैं %GROOVY_HOME%/bin/groovy.bat
PATH प्रणाली वातावरण चर, जहां% GROOVY_HOME% निर्देशिका है जहां ग्रूवी पैक है।
SDKMAN
अन्य विकल्प SDKMAN का उपयोग करना है । यह विकल्प लोकप्रियता में जल्दी से बढ़ गया है, और ग्रूवी के कई संस्करणों को बहुत सरल बना देता है। यह "GR8" पारिस्थितिक क्षेत्र में अन्य अनुप्रयोगों का भी समर्थन करता है। यह विकल्प लिनक्स और मैक पर बहुत अच्छी तरह से काम करता है, लेकिन विंडोज पर सिगविन की आवश्यकता होती है ।
ग्रूवी डाउनलोड पृष्ठ पर दिए गए निर्देशों के बाद, आप एसडीकेमैन को स्थापित करने के लिए निम्नलिखित कदम उठा सकते हैं।
$ curl -s get.sdkman.io | bash
SDKMAN इंस्टॉल हो जाने के बाद, अब आपके पास sdk
कमांड का एक्सेस है। इस कमांड से आप कई उपयोगी चीजें कर सकते हैं।
ग्रूवी स्थापित करें
$ sdk install groovy
यह ग्रूवी के नवीनतम संस्करण को स्थापित करेगा।
ग्रूवी के सूची संस्करण
$ sdk ls groovy
यह आपको उपलब्ध विकल्पों में से सभी को सूचीबद्ध करते हुए, ग्रूवी सॉफ्टवेयर पर लिनक्स स्टाइल ls
कमांड चलाने की अनुमति देता है। प्रत्येक इंस्टॉल किए गए संस्करण के बगल में एक *
और अपने वर्तमान संस्करणों को इंगित करने के लिए एक >
है।
ग्रूवी के संस्करण स्विच करें
$ sdk use groovy 2.4.7
यह ग्रूवी के वर्तमान संस्करण को 2.4.7 में बदल देगा। यदि आपके पास अन्य संस्करण स्थापित हैं, तो आप उनमें से किसी पर भी स्विच कर सकते हैं।
आप groovy -version
कमांड के साथ groovy के वर्तमान संस्करण को सूचीबद्ध कर सकते हैं।
आलीशान-जीवीएम
एसडीकेमैन का प्रारंभिक नाम जीवीएम था और पॉश-जीएमवी विंडोज पॉवर्सशेल के लिए जीवीएम का एक बंदरगाह है। इसलिए, यदि आप एक विंडोज़ मशीन पर विकसित होते हैं और साइगविन पर एसडीकेमैन का उपयोग नहीं करना चाहते हैं, तो पॉश-जीएमवी आपके लिए है। यह SDKMAN के समान काम करता है, लेकिन sdk
बजाय कमांड gmv
। इसलिए
PS C:\Users\You> gmv install groovy
आपके विंडोज मशीन पर पॉश-gvm के माध्यम से ग्रूवी स्थापित करेगा।
नमस्ते दुनिया
हैलो वर्ल्ड का ग्रूवी संस्करण।
println 'Hello World!'
हैलो वर्ल्ड इन ग्रूवी
उदाहरण के बाद स्क्रिप्ट का उपयोग कर ग्रूवी में सबसे सरल Hello World
वर्णन करें, एक फाइल में निम्न कोड स्निपेट helloWorld.groovy
, helloWorld.groovy
println 'Hello World!'
कैसे निष्पादित करें: कमांड लाइन में, groovy helloWorld.groovy
आउटपुट: Hello World!
एक जावा परियोजना पर ग्रूवी का उपयोग करना
ग्रूवी की सभी जावा कक्षाओं तक पहुंच है, वास्तव में ग्रूवी कक्षाएं जावा कक्षाएं हैं और जेवीएम द्वारा सीधे चलाया जा सकता है। यदि आप एक जावा प्रोजेक्ट पर काम कर रहे हैं, तो ग्रूवी को अपने जावा कोड के साथ बातचीत करने के लिए एक सरल स्क्रिप्टिंग भाषा के रूप में उपयोग करना एक नो-ब्रेनर है।
चीजों को और बेहतर बनाने के लिए, लगभग किसी भी जावा वर्ग का नाम बदलकर .groovy और संकलित और चलाया जा सकता है और यह ठीक उसी तरह काम करेगा जैसे ग्रूवी जावा के सुपर-सेट होने के करीब है, यह ग्रूवी का एक घोषित लक्ष्य है।
ग्रूवी का एक REPL है। groovysh
ग्रूवी के साथ आता है और अगर आपके क्लासपाथ को सही तरीके से सेट किया गया है तो जल्दी से जावा क्लास का परीक्षण करने के लिए इसका इस्तेमाल किया जा सकता है। उदाहरण के लिए अगर अपने classpath
अपने ग्रहण "वर्गों / bin" निर्देशिका की ओर इशारा किया है, तो आप अपनी फ़ाइल ग्रहण में, करने के लिए कूद बचा सकता है groovysh
और वर्ग यह परीक्षण करने के लिए का दृष्टांत।
सिर्फ जावा के बजाय ऐसा करने के लिए ग्रूवी का उपयोग करने के कारण हैं: क्लास लोडर नए वर्गों को लेने के लिए महान है क्योंकि वे संकलित हैं। groovysh
कि आप विकसित करते हैं, आपको आम तौर पर groovysh
से बाहर निकलने / फिर से शुरू करने की आवश्यकता नहीं होती है।
वाक्य विन्यास TERSE है। यह बनाए रखने योग्य कोड के लिए बहुत अच्छा नहीं है, लेकिन स्क्रिप्ट और परीक्षणों के लिए यह आपके कोड को महत्वपूर्ण रूप से काट सकता है। बड़ी चीज़ों में से एक यह है कि जाँच किए गए अपवादों को समाप्त करें (या, अधिक सटीक रूप से, सभी जाँच किए गए अपवादों को अनियंत्रित अपवादों में बदल दें)। यह इस तरह कोड बदलता है (एक सेकंड के बाद प्रिंट करें):
class JavaClass {
public static void main(String[] args) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
// You shouldn't leave an empty catch block, but who cares if this was interrupted???
}
System.out.println("Hello!");
}
}
ग्रूवी में:
Thread.sleep(1000)
print "Hello!"
ग्रूवी में बहुत तंग आरंभीकरण सिंटैक्स है। यह आपको डेटा को उसी तरह निर्दिष्ट करने की अनुमति देता है जैसे आप इसके बारे में सोचे बिना इसे पसंद करते हैं:
जावा में एक नक्शे को इनिशियलाइज़ करने के लिए आपको शायद कुछ ऐसा करना चाहिए:
String[] init = { "1:Bill", "2:Doug", "3:Bev" };
// Note the rest of this can be put in a function and reused or maybe found in a library, but I always seem to have to write this function!
Map m = new HashMap<Integer, String>();
for(String pair : int) {
String[] split = pair.split(":");
m.put(new Integer(split[0]), split[1])
}
यह बुरा नहीं है, लेकिन इसे बनाए रखने के लिए कुछ और है। ग्रूवी में आप बस उपयोग करेंगे:
Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }
और आप कर रहे हैं। सूची सिंटैक्स बस के रूप में आसान है।
अन्य वास्तव में बड़ा लाभ ग्रूवी के बंद सिंटैक्स है। यह आश्चर्यजनक रूप से कठिन और मजेदार है, कुछ हद तक बनाए रखना मुश्किल है, लेकिन स्क्रिप्ट के लिए यह प्राथमिकता नहीं है। एक उदाहरण के रूप में, यहां सभी .txt
फ़ाइलों को खोजने के लिए कुछ ग्रूवी कोड दिए गए हैं जिनमें वर्तमान निर्देशिका में Hello
शब्द है:
println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{ it.name }
यह उदाहरण कुछ "ग्रूवी" ट्रिक्स का उपयोग करता है:
.files
getFiles()
विधि को संदर्भित करता है - ग्रूवीgetFiles()
मेंgetFiles()
/ सेटर और प्रॉपर्टी सिंटैक्स के बीच स्विच कर सकता हैit.
एक पुनरावृत्ति के वर्तमान तत्व को संदर्भित करता है।{ it }
,{ it -> it }
लिए एक शॉर्टकट है, जैसे:[१, २, ३]। {इसे ^ २} == [१, ४, ९]
it.text
(जहांit
एक फ़ाइल है)File
के संपूर्ण पाठ को पुनः प्राप्त करने के लिएFile
एक ग्रूवी जोड़ता है। यह लिपियों में आश्चर्यजनक रूप से सहायक है।
हेल्लो दुनिया शेबंग (linux)
सामग्री के साथ एक hello.groovy फ़ाइल दी:
#!/usr/bin/env groovy
println "Hello world"
यदि निष्पादन की अनुमति दी गई है तो कमांड लाइन से निष्पादित किया जा सकता है
$ ./hello.groovy
CSV स्ट्रिंग बनाने के लिए सूची में इंजेक्शन () का उपयोग करना
ग्रूवी में, इंजेक्शन () विधि संचयी तरीकों में से एक है जो हमें किसी भी ऑब्जेक्ट में नई कार्यक्षमता जोड़ने (या इंजेक्शन) की अनुमति देता है जो इंजेक्शन () विधि को लागू करता है। एक संग्रह के मामले में, हम समान रूप से वस्तुओं के संग्रह के लिए एक बंद को लागू कर सकते हैं और फिर परिणामों को एक ही मूल्य में समेट सकते हैं। इंजेक्शन के लिए पहला पैरामीटर () विधि संचयन का प्रारंभिक मूल्य है और दूसरा पैरामीटर बंद होना है।
इस उदाहरण में, हम एक पैरामीटर के रूप में स्ट्रिंग्स की एक सूची लेंगे और कॉमा द्वारा सीमांकित उन तारों के मूल्यों का उत्पादन करेंगे। मैंने इस कार्यक्षमता का उपयोग किसी REST क्वेरी स्ट्रिंग के मानों की सूची को जोड़ने के लिए किया है, और यदि आप इसे थोड़ा संशोधित करते हैं, तो मैंने इसका उपयोग SQL कथन में मानों को एक खंड के रूप में शामिल करने के लिए किया है। यहाँ यह करने के लिए कोड है:
public String convertToCSV( List<String> list ) {
if (list == null) {
return ""
}
return list.inject( '' ) { result, item ->
result + ( result && item ? ',' : '' ) + ( item ? "${item.trim()}" : '' )
}
}
assert convertToCSV( null ) == ""
assert convertToCSV( ["aaa", "bbb ", null, " ccc "] ) == "aaa,bbb,ccc"
इस उदाहरण में, इंजेक्शन के लिए पहला पैरामीटर () विधि एक शून्य लंबाई स्ट्रिंग है, जिसका अर्थ है कि सूची के पहले तत्व को संसाधित करते समय, परिणाम भी एक शून्य लंबाई स्ट्रिंग है। यह पहले टर्नरी मूल्यांकन में झूठ का समाधान करता है, यही वजह है कि हमें स्ट्रिंग की शुरुआत में अल्पविराम नहीं मिलता है। सूची के तत्वों के माध्यम से प्रत्येक लगातार पुनरावृत्ति के साथ, परिणाम स्वयं, एक अल्पविराम और फिर अगले आइटम का तब तक हो जाता है जब तक हम सूची में अंतिम आइटम तक नहीं पहुंच जाते।
इस दृष्टिकोण का लाभ यह है कि आपको संक्षिप्त परिणाम प्राप्त करने के लिए लूपिंग कंस्ट्रक्शन के बाहर एक चर की आवश्यकता नहीं है। निहितार्थ यह है कि इससे आपके कोड में दुष्प्रभाव हो सकते हैं। इंजेक्शन () दृष्टिकोण के साथ, यह व्यवहार इंजेक्ट किया जाता है और संग्रह आपके लिए कॉल के परिणाम को बंद कर देता है। इस दृष्टिकोण का नकारात्मक पक्ष पठनीयता हो सकता है। लेकिन कुछ अनुभव के साथ, पढ़ना और समझना आसान हो जाता है, और मुझे आशा है कि यह उदाहरण आपको उस लक्ष्य को प्राप्त करने में मदद करता है।