अपाचे ग्रूवी: Difference between revisions
| Line 48: | Line 48: | ||
=== ग्रूवीबीन्स, गुण === | === ग्रूवीबीन्स, गुण === | ||
ग्रूवीबीन्स [[JavaBeans|जावाबीन्स]] का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में, <code>setColor(String color)</code> तथा <code>getColor()</code> अव्यक्त रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को बुला रही हैं।<ref name=konig38_9>कोनिग 2007, पीपी. 38-9</ref> | |||
<वाक्यविन्यास लैंग = ग्रूवी> | <वाक्यविन्यास लैंग = ग्रूवी> | ||
क्लास एग्रोवीबीन { | क्लास एग्रोवीबीन { | ||
Revision as of 20:11, 18 December 2022
Groovy Logo | |
| Paradigm | Multi-paradigm: object-oriented, imperative, functional, aspect-oriented, scripting |
|---|---|
| द्वारा डिज़ाइन किया गया | James Strachan |
| Developer | Guillaume Laforge (PMC Chair) Jochen Theodorou (Tech Lead) Paul King Cedric Champeau |
| पहली प्रस्तुति | 2003 |
| Preview release | 4.0.0-beta-1
/ September 6, 2021[1] |
| टाइपिंग अनुशासन | Dynamic, static, strong, duck |
| प्लेटफॉर्म | Java SE |
| लाइसेंस | Apache License 2.0 |
| फ़ाइल नाम एक्सटेंशनएस | .groovy, .gvy, .gy, .gsh[2] |
| Major implementations | |
| Gradle, Grails | |
| Influenced by | |
| Java, Python, Ruby, Smalltalk | |
| Influenced | |
| Kotlin | |
अपाचे ग्रूवी जावा (प्रोग्रामिंग भाषा) - प्लेटफॉर्म के लिए जावा-रचनाक्रम-संगत वस्तु अभिमुखित प्रोग्रामन भाषा है। यह एक स्थिर और गतिशील भाषा दोनों है, जिसमें पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा), और स्मॉलटाक जैसी विशेषताएं हैं। इसे जावा प्लेटफॉर्म के लिए प्रोग्रामन भाषा और लिपिबद्धन भाषा दोनों के रूप में उपयोग किया जा सकता है, तथा इसे जावा आभासी मशीन (जेवीएम) बाईटकोड में संकलित किया जा सकता है, और अन्य जावा कोड और पुस्तकालयों (कम्प्यूटिंग) के साथ सहजता से अंतर्संचालन किया जा सकता है। ग्रूवी जावा के समान एक धनु कोष्ठक रचनाक्रम का उपयोग करता है। ग्रूवी संवरक (कंप्यूटर प्रोग्रामिंग), बहु श्रृंखला और श्रृंखला में अंतः स्थापित अभिव्यक्ति का समर्थन करता है। ग्रूवी की अधिकांश शक्ति इसके एएसटी रूपांतरणों में निहित है, जो एनोटेशन (टिप्पणी) के माध्यम से प्रवर्तित होती है।
ग्रूवी 1.0 को 2 जनवरी, 2007 को और ग्रूवी 2.0 को जुलाई, 2012 में प्रकाशित किया गया था। संस्करण 2 के बाद से, ग्रूवी को स्थिर रूप से संकलित किया जा सकता है, जो जावा के निकट प्रकार के अनुमान और प्रदर्शन की पेशकश करता है।[3][4] निर्णायक सॉफ्टवेयर के प्रायोजन के तहत ग्रूवी 2.4 अंतिम प्रमुख प्रकाशन था जो मार्च 2015 में समाप्त हो गया।[5] ग्रूवी ने तब से अपाचे सॉफ्टवेयर संस्था में एक परियोजना प्रबंधन समिति के लिए अपनी शासन संरचना को बदल दिया है।[6]
इतिहास
जेम्स स्ट्रेचन (प्रोग्रामर) ने पहली बार अगस्त 2003 में अपने ब्लॉग पर ग्रूवी के विकास के बारे में बात की थी।[7] मार्च 2004 में, ग्रूवी को, जेसीपी को जेएसआर 241[8] के रूप में प्रस्तुत किया गया और मतपत्र द्वारा स्वीकार किया गया थ। 2004 और 2006 के बीच कई संस्करण प्रकशित किए गए। जावा सामुदायिक प्रक्रिया (जेसीपी) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को प्रकशित किया गया। 7 अक्टूबर, 2007 को विभिन्न बीटा और प्रकशित उम्मीदवारों की संख्या 1.1 के बाद, ग्रूवी 1.1 अंतिम जारी किया गया था और किए गए कई बदलावों को प्रतिबिंबित करने के लिए तुरंत ग्रूवी 1.5 के रूप में पुन: नामित किया गया था।
2007 में, ग्रूवी ने जेएएक्स 2007 नवीनीकरण पुरस्कार में पहला पुरस्कार जीता।[9] 2008 में, ग्रेल्स, एक ग्रूवी वेब ढांचा, ने जेएएक्स 2008 नवीनीकरण पुरस्कार में दूसरा पुरस्कार जीता।[10]
नवंबर 2008 में, स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (जी2वन) का अधिग्रहण कर लिया।[11] अगस्त 2009 में वीएमवेयर ने स्प्रिंगसोर्स का अधिग्रहण किया।[12]
अप्रैल 2012 में, आठ साल की निष्क्रियता के बाद, स्पेक लीड ने जेएसआर 241 की स्थिति को निष्क्रिय कर दिया।[8]
2007 में ग्रूवी 1.0 प्रकशित होने से एक साल पहले स्ट्रेचन ने इस परियोजना को चुपचाप छोड़ दिया था।।[citation needed] अक्टूबर 2016 में, स्ट्रेचन ने कहा कि मुझे अभी भी ग्रूवी (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपप्रति और कोटलिन से प्यार है।[13]
2 जुलाई 2012 को, ग्रूवी 2.0 प्रकशित किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और स्थिर प्रकार की जाँच सम्मिलित थी।
जब अप्रैल 2013 में ईएमसी संस्था (ईएमसी) और वीएमवेयर द्वारा निर्णायक सॉफ्टवेयर संयुक्त उद्यम को अलग कर दिया गया, तो ग्रूवी और ग्रेल्स ने इसके उत्पाद पोर्टफोलियो का हिस्सा बना लिया। निर्णायक ने अप्रैल 2015 से ग्रूवी और ग्रेल्स को प्रायोजित करना बंद कर दिया।[5] उसी महीने, ग्रूवी ने अपने ऊष्मायित्र के माध्यम से अपाचे सॉफ्टवेयर संस्था में कोडहॉस संग्रहालय से परियोजना प्रबंधन समिति (पीएमसी) में अपनी शासन संरचना को बदल दिया।[6] ग्रूवी ने अपाचे के ऊष्मायित्र से स्नातक किया और नवंबर 2015 में एक शीर्ष-स्तरीय परियोजना बन गई।[14]
विशेषताएं
अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक संक्षिप्त हो सकता है, क्योंकि इसमें उन सभी अवयवो की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है।[15] यह जावा प्रोग्रामर्स के लिए ग्रूवी कार्यरचना मुहावरों को प्राप्त करने से पहले परिचित जावा रचनाक्रम के साथ धीरे-धीरे ग्रूवी सीखना संभव बनाता है।[16]
जावा में उपलब्ध ग्रूवी सुविधाओं में स्थिर और गतिशील टाइपिंग (कीवर्ड डीईएफ़ के साथ) दोनों शामिल हैं def), ऑपरेटर ओवरलोडिंग, सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल समर्थन, नियमित अभिव्यक्तियों के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग इंटरपोलेशन, अतिरिक्त सहायक तरीके और सुरक्षित नेविगेशन ऑपरेटर ?. नल पॉइंटर्स के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, variable?.method(), या variable?.field).[17]
चूंकि संस्करण 2 ग्रूवी मॉड्यूलरिटी का भी समर्थन करता है (प्रोजेक्ट की जरूरतों के अनुसार केवल आवश्यक जार को शिप करने में सक्षम होने के कारण, इस प्रकार ग्रूवी की लाइब्रेरी के आकार को कम करता है), टाइप चेकिंग, स्टैटिक कंपाइलिंग, प्रोजेक्ट कॉइन सिंटैक्स एन्हांसमेंट, जावा सिंटैक्स # कोड ब्लॉक और चल रहे प्रदर्शन संवर्द्धन का उपयोग कर invokedynamic निर्देश जावा संस्करण के इतिहास में पेश किया गया#Java SE 7.[18]
ग्रूवी विभिन्न मार्कअप भाषाओं जैसे XML और HTML के लिए मूल समर्थन प्रदान करता है, जो एक इनलाइन दस्तावेज़ वस्तु मॉडल (DOM) सिंटैक्स के माध्यम से पूरा किया जाता है। यह सुविधा एक समान और संक्षिप्त सिंटैक्स और प्रोग्रामिंग पद्धति के साथ कई प्रकार की विषम डेटा संपत्तियों की परिभाषा और हेरफेर को सक्षम बनाती है।[citation needed]
जावा के विपरीत, एक ग्रोवी स्रोत कोड फ़ाइल को एक (असंकलित) स्क्रिप्टिंग भाषा के रूप में निष्पादित किया जा सकता है, यदि इसमें किसी भी वर्ग परिभाषा के बाहर कोड शामिल है, यदि यह मुख्य विधि वाला वर्ग है, या यदि यह रननेबल या ग्रोवीटेस्टकेस है। एक ग्रूवी स्क्रिप्ट पूरी तरह से पार्स, संकलित और निष्पादित करने से पहले उत्पन्न होती है (पायथन और रूबी के समान)। यह हुड के नीचे होता है, और संकलित संस्करण को प्रक्रिया के आर्टिफैक्ट के रूप में सहेजा नहीं जाता है।[19]
ग्रूवीबीन्स, गुण
ग्रूवीबीन्स जावाबीन्स का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में, setColor(String color) तथा getColor() अव्यक्त रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को बुला रही हैं।[20]
<वाक्यविन्यास लैंग = ग्रूवी>
क्लास एग्रोवीबीन {
तार का रंग
}
def myग्रूवीBean = नया Aग्रूवीBean ()
myग्रूवीBean.setColor ('बेबी ब्लू') जोर myग्रूवीBean.getColor() == 'बेबी ब्लू'
myग्रूवीBean.color = 'पेवर' जोर myग्रूवीBean.color == 'पेवर' </वाक्यविन्यास हाइलाइट>
ग्रूवी सूची और मानचित्रों को संभालने के लिए सरल, सुसंगत सिंटैक्स प्रदान करता है, जो जावा के सरणी सिंटैक्स की याद दिलाता है।[21] <वाक्यविन्यास लैंग = ग्रूवी> def MovieList = ['देर्सु उजाला', 'रैन', 'सात समुराई'] // एक सरणी की तरह दिखता है, लेकिन एक सूची है Assert MovieList[2] == 'सात समुराई' मूवीलिस्ट [3] = 'कैसाब्लांका' // सूची में एक तत्व जोड़ता है Assert MovieList.size() == 4
डीईएफ़ मंथ मैप = [ 'जनवरी' : 31, 'फ़रवरी' : 28, 'मार्च' : 31] // मैप डिक्लेयर करता है महीने का नक्शा ['मार्च'] == 31 // एक प्रविष्टि तक पहुँचता है महीनामैप ['अप्रैल'] = 30 // मानचित्र में एक प्रविष्टि जोड़ता है महीने का नक्शा। आकार () == 4 पर जोर दें </वाक्यविन्यास हाइलाइट>
प्रोटोटाइप एक्सटेंशन
ग्रूवी प्रोटोटाइप-आधारित प्रोग्रामिंग के लिए समर्थन प्रदान करता है ExpandoMetaClass, एक्सटेंशन मॉड्यूल (केवल ग्रोवी 2 में), ऑब्जेक्टिव-सी-जैसे ऑब्जेक्टिव-सी#श्रेणियां और DelegatingMetaClass.[22]
ExpandoMetaClass रूबी (प्रोग्रामिंग लैंग्वेज) के समान आसानी से कक्षा में परिवर्तन को व्यक्त करने के लिए एक डोमेन-विशिष्ट भाषा (डीएसएल) प्रदान करता है। रूबी की ओपन क्लास अवधारणा:
<वाक्यविन्यास लैंग = ग्रूवी> संख्या.मेटाक्लास {
sqrt = {गणित.sqrt (प्रतिनिधि)}
}
जोर दें 9.sqrt() == 3 जोर दें 4.sqrt() == 2 </वाक्यविन्यास हाइलाइट>
प्रोटोटाइप के माध्यम से कोड में ग्रोवी के परिवर्तन जावा में दिखाई नहीं दे रहे हैं, क्योंकि ग्रोवी में प्रत्येक विशेषता/विधि आमंत्रण मेटाक्लास रजिस्ट्री के माध्यम से जाता है। परिवर्तित कोड को केवल जावा से मेटाक्लास रजिस्ट्री में जाकर एक्सेस किया जा सकता है।
ग्रोवी भी ओवरराइडिंग विधियों की अनुमति देता है getProperty(), propertyMissing() दूसरों के बीच में, डेवलपर को किसी ऑब्जेक्ट पर कॉल को इंटरसेप्ट करने और उनके लिए एक क्रिया निर्दिष्ट करने में सक्षम बनाता है, एक सरल पहलू-उन्मुख प्रोग्रामिंग|पहलू-उन्मुख तरीके से। निम्न कोड वर्ग को सक्षम बनाता है java.lang.String जवाब देने के लिए hex संपत्ति:
<वाक्यविन्यास लैंग = ग्रूवी> एनम रंग {
काला ('#000000'), सफेद ('#FFFFFF'), लाल ('#FF0000'), नीला ('#0000FF')
स्ट्रिंग हेक्स
रंग (स्ट्रिंग हेक्स) {
यह.हेक्स = हेक्स
}
}
String.metaClass.getProperty = {स्ट्रिंग संपत्ति ->
def stringColor = प्रतिनिधि
अगर (संपत्ति == 'हेक्स') {
Color.values().ढूंढें {it.name().equalsIgnoreCase stringColor}?.hex
}
}
जोर सफेद। हेक्स == #FFFFFF जोर नीला .hex == #0000FF जोर काला .hex == #000000 हरे रंग का जोर दें। हेक्स == अशक्त </वाक्यविन्यास हाइलाइट>
ग्रेल्स फ्रेमवर्क व्यापक रूप से ग्रेल्स (ढांचे) को सक्षम करने के लिए मेटाप्रोग्रामिंग का उपयोग करता है # दृढ़ता गतिशील खोजकर्ता, जैसे User.findByName('Josh') और दूसरे।[23]
डॉट और कोष्ठक
ग्रूवी का सिंटैक्स कुछ स्थितियों में कोष्ठकों और बिंदुओं को छोड़ने की अनुमति देता है। निम्नलिखित ग्रोवी कोड
<वाक्यविन्यास लैंग = ग्रूवी> (कॉफी) .साथ (चीनी, दूध) .और (शराब) लें </वाक्यविन्यास हाइलाइट>
रूप में लिखा जा सकता है
<वाक्यविन्यास लैंग = ग्रूवी> चीनी, दूध और शराब के साथ कॉफी लें </वाक्यविन्यास हाइलाइट>
डोमेन-विशिष्ट भाषाओं (डीएसएल) के विकास को सक्षम करना जो सादे अंग्रेजी की तरह दिखती हैं।
कार्यात्मक प्रोग्रामिंग
हालाँकि ग्रूवी ज्यादातर एक वस्तु-उन्मुख भाषा है, यह कार्यात्मक प्रोग्रामिंग सुविधाएँ भी प्रदान करती है।
क्लोजर
ग्रोवी के दस्तावेज़ीकरण के मुताबिक: ग्रोवी में क्लोजर एक 'विधि सूचक' के समान काम करता है, जिससे कोड को बाद के समय में लिखा जा सकता है और चलाया जा सकता है।[24] ग्रोवी के क्लोजर फ्री वेरिएबल्स का समर्थन करते हैं, यानी वैरिएबल जिन्हें स्पष्ट रूप से पैरामीटर के रूप में पारित नहीं किया गया है, लेकिन इसके घोषणा संदर्भ में मौजूद है, आंशिक अनुप्रयोग (यह 'करी' शब्द है)[25]), प्रतिनिधिमंडल, अंतर्निहित, टाइप किए गए और अनटाइप किए गए पैरामीटर।
एक निर्धारित प्रकार के संग्रह पर काम करते समय, संग्रह पर एक ऑपरेशन को बंद करने का अनुमान लगाया जा सकता है:
<वाक्यविन्यास लैंग = ग्रूवी> सूची = [1, 2, 3, 4, 5, 6, 7, 8, 9]
/*
* गैर-शून्य संख्याओं को सत्य के लिए मजबूर किया जाता है, इसलिए जब यह% 2 == 0 (सम) होता है, तो यह असत्य होता है।
* निहित आईटी पैरामीटर के प्रकार को आईडीई द्वारा पूर्णांक के रूप में अनुमान लगाया जा सकता है।
* इसे इस प्रकार भी लिखा जा सकता है:
* list.findAll {पूर्णांक i -> i% 2}
* list.findAll {i -> i% 2}
*/
def बाधाओं = list.findAll {यह% 2}
बाधाओं पर जोर दें == [1, 3, 5, 7, 9] </वाक्यविन्यास हाइलाइट>
अभिव्यक्तियों के एक समूह को कार्यान्वयन के संदर्भ के बिना क्लोजर ब्लॉक में लिखा जा सकता है और प्रतिसाद देने वाली वस्तु को प्रतिनिधिमंडल का उपयोग करके बाद के बिंदु पर असाइन किया जा सकता है:
<वाक्यविन्यास लैंग = ग्रूवी> // कोड के इस ब्लॉक में कार्यान्वयन के संदर्भ के बिना भाव शामिल हैं डीईएफ़ ऑपरेशन = {
घोषित 5 योग 4 विभाजित करना 3 प्रिंट
} </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास लैंग = ग्रूवी> /*
* यह क्लास उन ऑपरेशंस को हैंडल करेगी जिनका इस्तेमाल ऊपर क्लोजर में किया जा सकता है। एक और वर्ग * को एक ही तरीके से घोषित किया जा सकता है, लेकिन उदाहरण के लिए, webservice संचालन का उपयोग करना * हिसाब में। */
वर्ग अभिव्यक्ति {
बिगडेसिमल मान
/*
* हालांकि एक पूर्णांक को एक पैरामीटर के रूप में पारित किया जाता है, यह एक बिगडिसीमल में ज़ब्त किया जाता है, जैसा कि था
* परिभाषित। यदि कक्षा में 'घोषित (पूर्णांक मान)' विधि होती है, तो इसका उपयोग इसके बजाय किया जाएगा।
*/
डिफ डिक्लेयर (बिगडिसीमल वैल्यू) {
यह मूल्य = मूल्य
}
डीईएफ़ योग (बिगडिसीमल वैल्यू टू ऐड) {
this.value += valueToAdd
}
डिफ डिवाइड (बिगडिसीमल डिवाइडर) {
this.value /= भाजक
}
def संपत्ति गुम (स्ट्रिंग संपत्ति) {
अगर (संपत्ति == प्रिंट) प्रिंटलाइन मूल्य
}
} </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास लैंग = ग्रूवी> // यहां परिभाषित किया गया है कि उपरोक्त कोड के ब्लॉक में भावों का जवाब कौन देगा। संचालन.प्रतिनिधि = नई अभिव्यक्ति () संचालन () </वाक्यविन्यास हाइलाइट>
करी
आमतौर पर आंशिक आवेदन कहा जाता है,[25] यह ग्रोवी फीचर क्लोजर के पैरामीटर को उनके किसी भी तर्क में डिफ़ॉल्ट पैरामीटर पर सेट करने की अनुमति देता है, जिससे बाउंड वैल्यू के साथ एक नया क्लोजर बनता है। को एक तर्क देना curry() विधि तर्क एक को ठीक करेगी। एन तर्क देने से तर्क 1 ठीक हो जाएगा ... एन।
<वाक्यविन्यास लैंग = ग्रूवी> def joinTwoWordsWithSymbol = {प्रतीक, पहला, दूसरा -> पहला + प्रतीक + दूसरा} जोर दो शब्दों के साथ प्रतीक में शामिल हों ('#', 'हैलो', 'वर्ल्ड') == 'हैलो # वर्ल्ड'
def concatWords = joinTwoWordsWithSymbol.curry(' ') मुखर concatWords ('हैलो', 'वर्ल्ड') == 'हैलो वर्ल्ड'
def prependHello = concatWords.curry('Hello') // def prependHello = joinTwoWordsWithSymbol.curry(, 'Hello') जोर देना प्रीपेन्ड हैलो ('वर्ल्ड') == 'हैलो वर्ल्ड' </वाक्यविन्यास हाइलाइट>
करी का उपयोग विपरीत दिशा में भी किया जा सकता है (अंतिम N तर्कों को ठीक करते हुए)। rcurry().
<वाक्यविन्यास लैंग = ग्रूवी> def power = { BigDecimal value, BigDecimal power ->
मूल्य ** शक्ति
}
डीईएफ़ वर्ग = power.rcurry(2) डीईएफ़ क्यूब = power.rcurry(3)
जोर शक्ति (2, 2) == 4 मुखर वर्ग (4) == 16 घन (3) == 27 पर जोर दें </वाक्यविन्यास हाइलाइट>
ग्रूवी आलसी मूल्यांकन का भी समर्थन करता है,[26][27] फ़ोल्ड (उच्च-आदेश फ़ंक्शन)|कम करें/फ़ोल्ड करें,[28] डेटा संरचना और अपरिवर्तनीयता,[29] दूसरों के बीच में।[30]
JSON और XML प्रोसेसिंग
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) और XML प्रोसेसिंग पर, ग्रूवी बिल्डर पैटर्न को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल:
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल> <भाषाएँ>
<भाषा वर्ष = 1995 > <नाम>जावा</name> <प्रतिमान>वस्तु उन्मुख</प्रतिमान> <टाइपिंग>स्थिर</टाइपिंग> </भाषा> <भाषा वर्ष = 1995 > <नाम>रूबी </नाम> <प्रतिमान>कार्यात्मक, वस्तु उन्मुख</प्रतिमान> <टाइपिंग>डक टाइपिंग, डायनामिक</टाइपिंग> </भाषा> <भाषा वर्ष = 2003 > <नाम>ग्रूवी</name> <प्रतिमान>कार्यात्मक, वस्तु उन्मुख</प्रतिमान> <टाइपिंग>डक टाइपिंग, डायनामिक, स्टैटिक</टाइपिंग> </भाषा>
</भाषाएँ> </वाक्यविन्यास हाइलाइट>
निम्नलिखित ग्रोवी कोड के माध्यम से उत्पन्न किया जा सकता है:
<वाक्यविन्यास लैंग = ग्रूवी> डीईएफ़ लेखक = नया स्ट्रिंगवाइटर () def बिल्डर = नया ग्रूवी.xml.MarkupBuilder (लेखक) बिल्डर.लैंग्वेज {
भाषा (वर्ष: 1995) {
जावा नाम
प्रतिमान वस्तु उन्मुख
स्थिर टाइपिंग
}
भाषा (वर्ष: 1995) {
रूबी नाम
प्रतिमान कार्यात्मक, वस्तु उन्मुख
टाइपिंग बतख टाइपिंग, गतिशील
}
भाषा (वर्ष: 2003) {
ग्रूवी नाम
प्रतिमान कार्यात्मक, वस्तु उन्मुख
टाइपिंग बतख टाइपिंग, गतिशील, स्थिर
}
} </वाक्यविन्यास हाइलाइट>
और इसके माध्यम से स्ट्रीमिंग तरीके से भी संसाधित किया जा सकता है StreamingMarkupBuilder. कार्यान्वयन को JSON में बदलने के लिए, MarkupBuilder में बदला जा सकता है JsonBuilder.[31]
इसे पार्स करने और कार्यात्मक भाषा खोजने के लिए, ग्रूवी's findAll विधि सेवा कर सकती है:
<वाक्यविन्यास लैंग = ग्रूवी> def भाषाएं = नया XmlSlurper().parseText लेखक.toString()
// यहां मैचर (= ~) के लिए ग्रोवी के रेगेक्स सिंटैक्स को नियोजित किया गया है जिसे ए के लिए मजबूर किया जाएगा // बूलियन मान: या तो सही है, अगर मान में हमारी स्ट्रिंग है, या अन्यथा गलत है। def कार्यात्मक = language.language.findAll { it.paradigm = ~ कार्यात्मक} मुखर कार्यात्मक। संग्रह {it.name} == [ग्रोवी, रूबी] </वाक्यविन्यास हाइलाइट>
स्ट्रिंग इंटरपोलेशन
ग्रूवी में, GStrings का उपयोग करके स्ट्रिंग्स को वेरिएबल्स और एक्सप्रेशंस के साथ इंटरपोलेट किया जा सकता है:[32] <वाक्यविन्यास लैंग = ग्रूवी> बिगडेसिमल खाता = 10.0 डीईएफ़ पाठ = खाता वर्तमान में $ खाते का शेष दिखाता है मुखर पाठ == खाता वर्तमान में 10.0 की शेष राशि दिखाता है </वाक्यविन्यास हाइलाइट>
वेरिएबल्स और एक्सप्रेशन वाले GStrings को दोहरे उद्धरण चिह्नों का उपयोग करके घोषित किया जाना चाहिए।
एक जटिल अभिव्यक्ति को घुंघराले ब्रैकेट में संलग्न किया जाना चाहिए। यह इसके कुछ हिस्सों को अभिव्यक्ति के बजाय आस-पास की स्ट्रिंग से संबंधित होने से रोकता है:
<वाक्यविन्यास लैंग = ग्रूवी> बिगडेसिमल माइनस = 4.0 पाठ = खाता वर्तमान में ${खाता - ऋण} की शेष राशि दिखाता है जोर पाठ == खाता वर्तमान में 6.0 की शेष राशि दिखाता है
// कोष्ठक के बिना अभिव्यक्ति को अलग करने के लिए, इसका परिणाम होगा: पाठ = खाता वर्तमान में $ खाता - ऋण की शेष राशि दिखाता है जोर पाठ == खाता वर्तमान में 10.0 - ऋण का संतुलन दिखाता है </वाक्यविन्यास हाइलाइट>
एरो सिंटैक्स को नियोजित करके अभिव्यक्ति मूल्यांकन को स्थगित किया जा सकता है:
<वाक्यविन्यास लैंग = ग्रूवी> बिगडिसीमल टैक्स = 0.15 पाठ = खाता वर्तमान में ${->खाता - खाता*कर} की शेष राशि दिखाता है कर = 0.10
// GString की घोषणा के बाद कर मूल्य बदल दिया गया था। भावाभिव्यक्ति // चर केवल तभी बंधे होते हैं जब अभिव्यक्ति का वास्तव में मूल्यांकन किया जाना चाहिए: मुखर पाठ == खाता वर्तमान में 9.000 की शेष राशि दिखाता है </वाक्यविन्यास हाइलाइट>
सार वाक्य रचना वृक्ष परिवर्तन
ग्रूवी के स्वयं के प्रलेखन के अनुसार, जब ग्रूवी कंपाइलर ग्रूवी स्क्रिप्ट और कक्षाओं को संकलित करता है, तो प्रक्रिया के किसी बिंदु पर, स्रोत कोड को कंक्रीट सिंटैक्स ट्री के रूप में मेमोरी में प्रदर्शित किया जाएगा, फिर एक सार सिंटैक्स ट्री में बदल दिया जाएगा। एएसटी ट्रांसफ़ॉर्मेशन का उद्देश्य डेवलपर्स को एएसटी को संशोधित करने में सक्षम होने के लिए संकलन प्रक्रिया में हुक करने देना है, जो कि जेवीएम द्वारा चलाए जाने वाले बायटेकोड में बदल जाएगा। एएसटी ट्रांसफॉर्मेशन ग्रोवी को बेहतर संकलन-समय मेटाप्रोग्रामिंग क्षमताओं के साथ प्रदान करता है, जिससे रनटाइम प्रदर्शन दंड के बिना भाषा स्तर पर शक्तिशाली लचीलेपन की अनुमति मिलती है।[33] ग्रोवी में एएसटी के उदाहरण हैं:
- श्रेणी और मिक्सिन परिवर्तन
- अपरिवर्तनीय एएसटी मैक्रो
- परिवर्तन को नया रूप दें
- सिंगलटन परिवर्तन
दूसरों के बीच में।
लक्षण
ग्रोवी के दस्तावेज़ीकरण के अनुसार, विशेषता (कंप्यूटर प्रोग्रामिंग) भाषा का एक संरचनात्मक निर्माण है जो अनुमति देता है: व्यवहार की संरचना, इंटरफेस के रनटाइम कार्यान्वयन, व्यवहार ओवरराइडिंग, और स्थिर प्रकार की जांच/संकलन के साथ संगतता।
लक्षणों को इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के रूप में देखा जा सकता है, जिसमें डिफ़ॉल्ट कार्यान्वयन और स्थिति दोनों होते हैं। विशेषता कीवर्ड का उपयोग करके एक विशेषता को परिभाषित किया गया है:
<वाक्यविन्यास लैंग = ग्रूवी> विशेषता उड़ान योग्यता { /* विशेषता की घोषणा */
स्ट्रिंग फ्लाई () {मैं उड़ रहा हूँ! } /* विशेषता के भीतर एक विधि की घोषणा */
} </वाक्यविन्यास हाइलाइट>
फिर, इसे कीवर्ड का उपयोग करके सामान्य इंटरफ़ेस की तरह उपयोग किया जा सकता है implements:
<वाक्यविन्यास लैंग = ग्रूवी> क्लास बर्ड इम्प्लीमेंट्स फ़्लाइंगएबिलिटी {} /* बर्ड क्लास क्षमताओं में फ़्लाइंगएबिलिटी विशेषता जोड़ता है */ डेफ बर्ड = नया पक्षी () / * एक नया पक्षी दृष्टांत दें * / जोर Bird.fly () == मैं उड़ रहा हूँ! /* पक्षी वर्ग स्वचालित रूप से फ़्लाइंगएबिलिटी ट्रेट का व्यवहार प्राप्त करता है */ </वाक्यविन्यास हाइलाइट>
लक्षण सरल संरचना से परीक्षण तक क्षमताओं की एक विस्तृत श्रृंखला की अनुमति देते हैं।
दत्तक ग्रहण
ग्रोवी एडॉप्शन के उल्लेखनीय उदाहरणों में शामिल हैं:
- एडैप्टाविस्ट स्क्रिप्टरनर, दुनिया भर के 20000 से अधिक संगठनों द्वारा उपयोग किए जाने वाले एटलसियन टूल्स को स्वचालित और विस्तारित करने के लिए ग्रोवी कार्यान्वयन को एम्बेड करता है।[34][35]
- Apache OFBiz, खुला स्रोत सॉफ्टवेयर | ओपन-सोर्स उद्यम संसाधन योजना (ERP) सिस्टम, ग्रूवी का उपयोग करता है।[36][37]
- नीलगिरी (सॉफ्टवेयर), एक क्लाउड प्रबंधन प्रणाली, ग्रूवी की एक महत्वपूर्ण मात्रा का उपयोग करती है।
- ग्रेडल ग्रूवी का उपयोग करके एक लोकप्रिय बिल्ड ऑटोमेशन टूल है।
- लिंक्डइन अपने कुछ उप-प्रणालियों के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।[38]
- LogicMonitor, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में ग्रूवी का उपयोग करता है।[39]
- जेनकिंस (सॉफ्टवेयर), निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन शामिल है जो ग्रोवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।[40]
- लिफ़ेरे, अपने कलियो वर्कफ़्लो में ग्रूवी का उपयोग करता है
- Sky.com बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।[41]
- SmartThings, स्मार्ट घरों और उपभोक्ता चीजों की इंटरनेट के लिए एक खुला मंच, ग्रोवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है[42]
- सोपूआई ग्रूवी को webservice परीक्षण विकास के लिए एक भाषा के रूप में प्रदान करता है।[43]
- सुरवता, एक मार्केट रिसर्च स्टार्टअप, ग्रूवी और ग्रेल्स का उपयोग करता है।[citation needed]
- यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक