अपाचे ग्रूवी
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.5 के रूप में फिर से शुरू किया गया।
2007 में, Groovy ने JAX 2007 इनोवेशन अवार्ड में पहला पुरस्कार जीता।[9] 2008 में, Grails (ढांचा), एक Groovy वेब ढांचा, ने JAX 2008 इनोवेशन अवार्ड में दूसरा पुरस्कार जीता।[10] नवंबर 2008 में, स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (G2One) का अधिग्रहण किया।[11] अगस्त 2009 में VMware ने स्प्रिंगसोर्स का अधिग्रहण किया।[12] अप्रैल 2012 में, आठ साल की निष्क्रियता के बाद, स्पेक लीड ने जेएसआर 241 की स्थिति को निष्क्रिय कर दिया।[8]
2007 में ग्रोवी 1.0 रिलीज होने से एक साल पहले स्ट्रेचन ने चुपचाप परियोजना छोड़ दी थी।[citation needed] अक्टूबर 2016 में, स्ट्रेचन ने कहा कि मुझे अभी भी ग्रूवी (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपस्क्रिप्ट और कोटलिन से प्यार है।[13] 2 जुलाई 2012 को, ग्रूवी 2.0 जारी किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और स्थिर प्रकार की जाँच शामिल थी।
जब अप्रैल 2013 में EMC Corporation (EMC) और VMware द्वारा Pivotal Software संयुक्त उद्यम को अलग कर दिया गया, तो Groovy और Grails ने इसके उत्पाद पोर्टफोलियो का हिस्सा बना लिया। Pivotal ने अप्रैल 2015 से Groovy और Grails को प्रायोजित करना बंद कर दिया।[5]उसी महीने, ग्रोवी ने अपने इनक्यूबेटर के माध्यम से अपाचे सॉफ्टवेयर फाउंडेशन में कोडहॉस रिपॉजिटरी से प्रोजेक्ट मैनेजमेंट कमेटी (पीएमसी) में अपनी शासन संरचना को बदल दिया।[6]ग्रूवी ने अपाचे के इनक्यूबेटर से स्नातक किया और नवंबर 2015 में एक शीर्ष-स्तरीय परियोजना बन गई।[14]
विशेषताएं
अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक कॉम्पैक्ट हो सकता है, क्योंकि इसमें उन सभी तत्वों की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है।[15] यह अधिक ग्रूवी प्रोग्रामिंग मुहावरों को प्राप्त करने से पहले जावा प्रोग्रामर के लिए ग्रोवी को धीरे-धीरे परिचित जावा सिंटैक्स से सीखना संभव बनाता है।[16]
जावा में उपलब्ध ग्रोवी सुविधाओं में स्थिर और टाइप सिस्टम # डायनामिक टाइपिंग (कीवर्ड के साथ) दोनों शामिल हैं def
), ऑपरेटर ओवरलोडिंग, सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल सिंटैक्स, नियमित अभिव्यक्तियों के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग इंटरपोलेशन, अतिरिक्त सहायक तरीके और सुरक्षित नेविगेशन ऑपरेटर ?.
नल पॉइंटर्स के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, variable?.method()
, या variable?.field
).[17]
चूंकि संस्करण 2 ग्रूवी मॉड्यूलरिटी का भी समर्थन करता है (प्रोजेक्ट की जरूरतों के अनुसार केवल आवश्यक जार को शिप करने में सक्षम होने के कारण, इस प्रकार ग्रूवी की लाइब्रेरी के आकार को कम करता है), टाइप चेकिंग, स्टैटिक कंपाइलिंग, प्रोजेक्ट कॉइन सिंटैक्स एन्हांसमेंट, जावा सिंटैक्स # कोड ब्लॉक और चल रहे प्रदर्शन संवर्द्धन का उपयोग कर invokedynamic
निर्देश जावा संस्करण के इतिहास में पेश किया गया#Java SE 7.[18]
Groovy विभिन्न मार्कअप भाषाओं जैसे XML और HTML के लिए मूल समर्थन प्रदान करता है, जो एक इनलाइन दस्तावेज़ वस्तु मॉडल (DOM) सिंटैक्स के माध्यम से पूरा किया जाता है। यह सुविधा एक समान और संक्षिप्त सिंटैक्स और प्रोग्रामिंग पद्धति के साथ कई प्रकार की विषम डेटा संपत्तियों की परिभाषा और हेरफेर को सक्षम बनाती है।[citation needed]
जावा के विपरीत, एक ग्रोवी स्रोत कोड फ़ाइल को एक (असंकलित) स्क्रिप्टिंग भाषा के रूप में निष्पादित किया जा सकता है, यदि इसमें किसी भी वर्ग परिभाषा के बाहर कोड शामिल है, यदि यह मुख्य विधि वाला वर्ग है, या यदि यह रननेबल या ग्रोवीटेस्टकेस है। एक ग्रूवी स्क्रिप्ट पूरी तरह से पार्स, संकलित और निष्पादित करने से पहले उत्पन्न होती है (पायथन और रूबी के समान)। यह हुड के नीचे होता है, और संकलित संस्करण को प्रक्रिया के आर्टिफैक्ट के रूप में सहेजा नहीं जाता है।[19]
ग्रूवीबीन्स, गुण
GroovyBeans JavaBeans का Groovy का संस्करण है। ग्रोवी निहित रूप से गेटर्स और सेटर्स उत्पन्न करता है। निम्नलिखित कोड में, setColor(String color)
तथा getColor()
अव्यक्त रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को बुला रही हैं।[20]
<वाक्यविन्यास लैंग = ग्रूवी>
क्लास एग्रोवीबीन {
तार का रंग
}
def myGroovyBean = नया AgroovyBean ()
myGroovyBean.setColor ('बेबी ब्लू') जोर myGroovyBean.getColor() == 'बेबी ब्लू'
myGroovyBean.color = 'पेवर' जोर myGroovyBean.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 हरे रंग का जोर दें। हेक्स == अशक्त </वाक्यविन्यास हाइलाइट>
Grails फ्रेमवर्क व्यापक रूप से Grails (ढांचे) को सक्षम करने के लिए मेटाप्रोग्रामिंग का उपयोग करता है # दृढ़ता गतिशील खोजकर्ता, जैसे 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 प्रोसेसिंग पर, Groovy बिल्डर पैटर्न को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल:
<वाक्यविन्यास प्रकाश लैंग = एक्सएमएल> <भाषाएँ>
<भाषा वर्ष = 1995 > <नाम>जावा</name> <प्रतिमान>वस्तु उन्मुख</प्रतिमान> <टाइपिंग>स्थिर</टाइपिंग> </भाषा> <भाषा वर्ष = 1995 > <नाम>रूबी </नाम> <प्रतिमान>कार्यात्मक, वस्तु उन्मुख</प्रतिमान> <टाइपिंग>डक टाइपिंग, डायनामिक</टाइपिंग> </भाषा> <भाषा वर्ष = 2003 > <नाम>ग्रूवी</name> <प्रतिमान>कार्यात्मक, वस्तु उन्मुख</प्रतिमान> <टाइपिंग>डक टाइपिंग, डायनामिक, स्टैटिक</टाइपिंग> </भाषा>
</भाषाएँ> </वाक्यविन्यास हाइलाइट>
निम्नलिखित ग्रोवी कोड के माध्यम से उत्पन्न किया जा सकता है:
<वाक्यविन्यास लैंग = ग्रूवी> डीईएफ़ लेखक = नया स्ट्रिंगवाइटर () def बिल्डर = नया groovy.xml.MarkupBuilder (लेखक) बिल्डर.लैंग्वेज {
भाषा (वर्ष: 1995) { जावा नाम प्रतिमान वस्तु उन्मुख स्थिर टाइपिंग } भाषा (वर्ष: 1995) { रूबी नाम प्रतिमान कार्यात्मक, वस्तु उन्मुख टाइपिंग बतख टाइपिंग, गतिशील } भाषा (वर्ष: 2003) { ग्रूवी नाम प्रतिमान कार्यात्मक, वस्तु उन्मुख टाइपिंग बतख टाइपिंग, गतिशील, स्थिर }
} </वाक्यविन्यास हाइलाइट>
और इसके माध्यम से स्ट्रीमिंग तरीके से भी संसाधित किया जा सकता है StreamingMarkupBuilder
. कार्यान्वयन को JSON में बदलने के लिए, MarkupBuilder
में बदला जा सकता है JsonBuilder
.[31]
इसे पार्स करने और कार्यात्मक भाषा खोजने के लिए, Groovy'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, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में Groovy का उपयोग करता है।[39]
- जेनकिंस (सॉफ्टवेयर), निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन शामिल है जो ग्रोवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।[40]
- लिफ़ेरे, अपने कलियो वर्कफ़्लो में ग्रूवी का उपयोग करता है
- Sky.com बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।[41]
- SmartThings, स्मार्ट घरों और उपभोक्ता चीजों की इंटरनेट के लिए एक खुला मंच, ग्रोवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है[42]
- सोपूआई ग्रूवी को webservice परीक्षण विकास के लिए एक भाषा के रूप में प्रदान करता है।[43]
- सुरवता, एक मार्केट रिसर्च स्टार्टअप, ग्रूवी और ग्रेल्स का उपयोग करता है।[citation needed]
- यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक डेटाफ्लो प्रोग्रामिंग भाषा विकसित की।[citation needed]
- हालांकि Groovy को किसी भी JVM वातावरण में एकीकृत किया जा सकता है, JBoss सीम फ्रेमवर्क ग्रूवी को जावा के अलावा, एक विकास भाषा के रूप में, बॉक्स से बाहर प्रदान करता है।[44]
- vCalc.com अपने गणित क्राउड-सोर्सिंग इंजन में सभी उपयोगकर्ता परिभाषित गणित के लिए ग्रूवी का उपयोग करता है।[45]
- Wired.com वेबसाइट के उत्पाद समीक्षा स्टैंडअलोन अनुभाग के लिए Groovy और Grails का उपयोग करता है।[46]
- XWiki SAS ग्रोवी को उनके सहयोगी ओपन-सोर्स उत्पाद में स्क्रिप्टिंग भाषा के रूप में उपयोग करता है।[47]
आईडीई समर्थन
कई एकीकृत विकास वातावरण (आईडीई) और पाठ संपादक ग्रूवी का समर्थन करते हैं:
- एंड्रॉइड स्टूडियो, आईडीई का उपयोग एंड्रॉइड (ऑपरेटिंग सिस्टम) ऐप बनाने के लिए किया जाता है
- परमाणु (पाठ संपादक) संपादक
- ग्रहण (सॉफ्टवेयर), ग्रोवी-एक्लिप्स के माध्यम से
- Emacs, groovy-emacs-mode प्रोजेक्ट के ग्रूवी-मोड का उपयोग करते हुए।
- IntelliJ IDEA, कम्युनिटी एडिशन, Grails/Griffon केवल अल्टीमेट एडिशन में
- JDeveloper, Oracle ADF के साथ प्रयोग के लिए
- jEdit, जावा के लिए एक उन्नत टेक्स्ट एडिटर (सॉफ्टवेयर प्लेटफॉर्म)
- केट (टेक्स्ट एडिटर), कहाँ पे के लिए एक उन्नत टेक्स्ट एडिटर ग्रूवी और 200 से अधिक अन्य फ़ाइल स्वरूपों का समर्थन करता है
- NetBeans, संस्करण 6.5 के बाद से
- नोटपैड++ ++, माइक्रोसॉफ़्ट विंडोज़ के लिए एक उन्नत टेक्स्ट एडिटर
- उदात्त पाठ, एक क्रॉस प्लेटफॉर्म टेक्स्ट एडिटर
- टेक्स्टमैट
- विजुअल स्टूडियो कोड
- अल्ट्राएडिट, सामान्य प्रयोजन कार्यक्रम संपादक
बोलियाँ
ग्रोवी का एक वैकल्पिक कार्यान्वयन है:
- ग्रूस्क्रिप्ट ग्रूवी कोड को जावास्क्रिप्ट कोड में परिवर्तित करता है।[48] हालाँकि Apache Groovy की तुलना में Grooscript की कुछ सीमाएँ हैं, यह सर्वर और क्लाइंट दोनों में डोमेन क्लास का उपयोग कर सकता है।[49] Grails (ढांचा) संस्करण 3.0 के लिए प्लगइन समर्थन प्रदान किया गया है, साथ ही ऑनलाइन कोड रूपांतरण भी।[50]
यह भी देखें
- प्रोग्रामिंग भाषाओं की तुलना
- ग्रिफॉन (फ्रेमवर्क) - एक डेस्कटॉप फ्रेमवर्क
- वेबस्फेयर स्मैश
- स्पॉक (परीक्षण ढांचा)
संदर्भ
उद्धरण
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedgithub-releases
- ↑ "Groovy Goodness: Default Groovy Script File Extensions".
- ↑ "ग्रोवी 2.0 प्रदर्शन जावा की तुलना में". 25 Aug 2012.
- ↑ "जावा बनाम ग्रूवी 2.0 बनाम स्काला सिंपल परफॉर्मेंस टेस्ट". 10 Jul 2012. Archived from the original on 10 December 2012. Retrieved 7 October 2012.
- ↑ 5.0 5.1 "Groovy 2.4 और Grails 3.0 प्रमुख प्रायोजन के तहत अंतिम प्रमुख रिलीज होने के लिए". 19 Jan 2015.
- ↑ 6.0 6.1 "ग्रोवी अपाचे इनक्यूबेटर में शामिल हो गया". 11 Mar 2015.
- ↑ James Strachan (29 Aug 2003). "ग्रूवी - जावा प्लेटफॉर्म के लिए एक नई गतिशील भाषा का जन्म". Archived from the original on 1 September 2003.
- ↑ 8.0 8.1 "जावा कम्युनिटी प्रोसेस JSR 241".
- ↑ "ग्रूवी ने JAX 2007 इनोवेशन अवार्ड में प्रथम पुरस्कार जीता". 2007-04-26. Archived from the original on 2015-05-13. Retrieved 2012-10-07.
- ↑ "वे कहते हैं कि एक कप कॉफी से बहुत कुछ हो सकता है". Archived from the original on 2011-04-19. Retrieved 2012-10-07.
- ↑ "स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (G2One) का अधिग्रहण किया". 11 Nov 2008.
- ↑ "VMWare Acquires SpringSource". 10 Aug 2009.
- ↑ "जेम्स स्ट्रेचन का ट्वीट". November 24, 2016. Retrieved 2016-11-24.
- ↑ "देव मेलिंग सूची पर घोषणा".
- ↑ König 2007, pg. 32
- ↑ "जावा डेवलपर्स के लिए ग्रूवी शैली और भाषा सुविधा दिशानिर्देश". Groovy.codehaus.org. Archived from the original on 2015-01-17. Retrieved 2015-01-22.
- ↑ "ग्रूवी - जावा से अंतर". Groovy.codehaus.org. Archived from the original on 2009-03-17. Retrieved 2013-08-12.
- ↑ "ग्रोवी 2.0 में नया क्या है?". 28 Jun 2012.
- ↑ कोनिग 2007, पीपी. 37-8
- ↑ कोनिग 2007, पीपी. 38-9
- ↑ कोनिग 2007, पीपी. 41-3
- ↑ "Gnkkhmtlks". Archived from the original on 2012-10-01. Retrieved 2012-10-07.
- ↑ "ग्रोवी और ग्रेल्स में मेटाप्रोग्रामिंग तकनीकें". 11 Jun 2009.
- ↑ "ग्रोवी - क्लोजर". Archived from the original on 2012-05-22.
- ↑ 25.0 25.1 "Does groovy call partial application 'currying'", 10 Aug 2013
- ↑ "ग्रोवी - आलसी परिवर्तन". Archived from the original on 2012-10-08. Retrieved 2012-10-07.
- ↑ "साइड नोट्स: ग्रोवी में आलसी सूचियां". 3 Feb 2011.
- ↑ "ग्रूवी की तह". 20 Jun 2011. Archived from the original on 13 February 2015. Retrieved 12 February 2015.
- ↑ "ग्रोवी के साथ कार्यात्मक प्रोग्रामिंग". 5 Nov 2011.
- ↑ "ग्रूवी में फंक्शन प्रोग्रामिंग". Archived from the original on 2012-10-08. Retrieved 2012-10-07.
- ↑ "जेसनबिल्डर". Archived from the original on 2012-10-02. Retrieved 2012-10-07.
- ↑ "ग्रूवी स्ट्रिंग्स - उन्हें बनाने के विभिन्न तरीके". 26 Dec 2009.
- ↑ "संकलन-समय मेटाप्रोग्रामिंग - एएसटी परिवर्तन". Archived from the original on 2012-10-14. Retrieved 2012-10-07.
- ↑ "स्क्रिप्टरनर दस्तावेज़ीकरण".
- ↑ "गोद लेने के आंकड़ों के साथ स्क्रिप्टरनर प्रेस विज्ञप्ति".
- ↑ "OFBiz व्यापार तर्क के लिए Groovy DSL". Apache OFBiz Project Open Wiki.
- ↑ "ग्रोवी का उपयोग करके सरल-तरीके उदाहरण". Apache OFBiz Project Open Wiki.
- ↑ "लिंक्डइन पर Grails". Retrieved 2015-06-02.
- ↑ "एंबेडेड ग्रूवी स्क्रिप्टिंग". www.logicmonitor.com. Retrieved 2020-11-20.
- ↑ "जेनकींस पाइपलाइन".
- ↑ Rocher, Graeme (October 2, 2008). "ग्रीम रोचर का ब्लॉग: Sky.com Grails में लिखा हुआ फिर से लॉन्च किया गया". Graeme Rocher's Blog. Retrieved 2015-06-02.
- ↑ Security Analysis of Emerging Smart Home Applications
- ↑ "स्क्रिप्टिंग और स्क्रिप्ट लाइब्रेरी | स्क्रिप्टिंग और गुण". www.soapui.org. Retrieved 2015-06-02.
- ↑ "अध्याय 11. ग्रूवी एकीकरण". docs.jboss.org. Retrieved 2015-06-02.
- ↑ "vCalc, गणित की दुनिया के लिए अब तक का पहला सामाजिक मंच". 4 November 2014. Retrieved 2016-05-05.
- ↑ "वायर्ड.कॉम" (PDF). www.springsource.org. Retrieved 2015-06-02.
- ↑ "आपका देश" (PDF). www.springsource.org. Retrieved 2015-06-02.
- ↑ "ग्रोसस्क्रिप्ट दस्तावेज़". 12 Sep 2016. Archived from the original on 28 June 2017. Retrieved 4 July 2017.
- ↑ "ग्रूस्क्रिप्ट पर स्प्रिंगवन/2जीएक्स पर प्रस्तुति". 13 Dec 2015.
- ↑ "ग्रोसस्क्रिप्ट ऑनलाइन रूपांतरण". 15 May 2017. Archived from the original on 9 July 2017. Retrieved 4 July 2017.
स्रोत
- König, Dierk; Paul King; Guillaume Laforge; Hamlet D'Arcy; Cédric Champeau; Erik Pragt; Jon Skeet (2015). ग्रूवी इन एक्शन, दूसरा संस्करण. Manning. ISBN 978-1-935182-44-3.
- Barclay, Kenneth; John Savage (2007). ग्रूवी प्रोग्रामिंग: जावा डेवलपर्स के लिए एक परिचय. ISBN 978-0-12-372507-3. Archived from the original on 2010-01-12. Retrieved 2007-07-19.
- Davis, Scott (2008). ग्रूवी रेसिपी: जावा के पहियों को ग्रीस करना. ISBN 978-0-9787392-9-4.
- Subramaniam, Venkat (2008). प्रोग्रामिंग ग्रोवी: जावा डेवलपर के लिए गतिशील उत्पादकता. ISBN 978-1-934356-09-8.
इस पेज में लापता आंतरिक लिंक की सूची
- अनुमान टाइप करें
- छोटी बात
- जेम्स Strachan (प्रोग्रामर)
- प्रोग्रामिंग मुहावरा
- साहचर्य सरणी
- पाठ के प्रस्तुतिकरण के लिए प्रयुक्त भाषा
- पहलू आधारित प्रोग्रामिंग
- आंशिक आवेदन
- अचल स्थिति
- जेनकींस (सॉफ्टवेयर)
- लगातार मेल जोल
- सोपयूआई
- केट (पाठ संपादक)
- Android (ऑपरेटिंग सिस्टम)
- समन्वित विकास पर्यावरण
- ग्रिफ़ॉन (ढांचा)