अपाचे ग्रूवी: Difference between revisions

From Vigyanwiki
No edit summary
Line 21: Line 21:
अपाचे ग्रूवी [[जावा (प्रोग्रामिंग भाषा)]] - [[प्लेटफॉर्म|'''प्लेटफॉर्म''']] के लिए जावा-रचनाक्रम-संगत [[वस्तु अभिमुखित प्रोग्रामन भाषा]] है। यह एक स्थिर और गतिशील [[प्रोग्रामिंग भाषा|भाषा]] दोनों है, जिसमें [[पायथन (प्रोग्रामिंग भाषा)]], [[रूबी (प्रोग्रामिंग भाषा)]], और स्मॉलटाक जैसी विशेषताएं हैं। इसे जावा प्लेटफॉर्म के लिए [[प्रोग्रामन भाषा]] और [[लिपिबद्धन भाषा]] दोनों के रूप में उपयोग किया जा सकता है, तथा इसे [[जावा वर्चुअल मशीन|जावा आभासी मशीन]] (जेवीएम) [[बाईटकोड]] में संकलित किया जा सकता है, और अन्य जावा कोड और [[पुस्तकालय (कम्प्यूटिंग)|पुस्तकालयों (कम्प्यूटिंग)]] के साथ सहजता से अंतर्संचालन किया जा सकता है। ग्रूवी जावा के समान एक [[घुंघराले ब्रैकेट प्रोग्रामिंग भाषा|धनु कोष्ठक]] [[रचनाक्रम]] का उपयोग करता है। ग्रूवी [[क्लोजर (कंप्यूटर प्रोग्रामिंग)|संवरक (कंप्यूटर प्रोग्रामिंग)]], बहु श्रृंखला और [[स्ट्रिंग प्रक्षेप|श्रृंखला]] [[में अंतः स्थापित अभिव्यक्ति]] का समर्थन करता है। ग्रूवी की अधिकांश शक्ति इसके [[एएसटी]] रूपांतरणों में निहित है, जो एनोटेशन (टिप्पणी) के माध्यम से प्रवर्तित होती है।
अपाचे ग्रूवी [[जावा (प्रोग्रामिंग भाषा)]] - [[प्लेटफॉर्म|'''प्लेटफॉर्म''']] के लिए जावा-रचनाक्रम-संगत [[वस्तु अभिमुखित प्रोग्रामन भाषा]] है। यह एक स्थिर और गतिशील [[प्रोग्रामिंग भाषा|भाषा]] दोनों है, जिसमें [[पायथन (प्रोग्रामिंग भाषा)]], [[रूबी (प्रोग्रामिंग भाषा)]], और स्मॉलटाक जैसी विशेषताएं हैं। इसे जावा प्लेटफॉर्म के लिए [[प्रोग्रामन भाषा]] और [[लिपिबद्धन भाषा]] दोनों के रूप में उपयोग किया जा सकता है, तथा इसे [[जावा वर्चुअल मशीन|जावा आभासी मशीन]] (जेवीएम) [[बाईटकोड]] में संकलित किया जा सकता है, और अन्य जावा कोड और [[पुस्तकालय (कम्प्यूटिंग)|पुस्तकालयों (कम्प्यूटिंग)]] के साथ सहजता से अंतर्संचालन किया जा सकता है। ग्रूवी जावा के समान एक [[घुंघराले ब्रैकेट प्रोग्रामिंग भाषा|धनु कोष्ठक]] [[रचनाक्रम]] का उपयोग करता है। ग्रूवी [[क्लोजर (कंप्यूटर प्रोग्रामिंग)|संवरक (कंप्यूटर प्रोग्रामिंग)]], बहु श्रृंखला और [[स्ट्रिंग प्रक्षेप|श्रृंखला]] [[में अंतः स्थापित अभिव्यक्ति]] का समर्थन करता है। ग्रूवी की अधिकांश शक्ति इसके [[एएसटी]] रूपांतरणों में निहित है, जो एनोटेशन (टिप्पणी) के माध्यम से प्रवर्तित होती है।


Groovy 1.0 को 2 जनवरी, 2007 को और Groovy 2.0 को जुलाई, 2012 में जारी किया गया था। संस्करण 2 के बाद से, Groovy टाइप सिस्टम #STATIC हो सकता है, जो जावा के निकट प्रकार के अनुमान और प्रदर्शन की पेशकश करता है।<ref>{{cite web|url=http://objectscape.blogspot.com.br/2012/08/groovy-20-performance-compared-to-java.html|title=ग्रोवी 2.0 प्रदर्शन जावा की तुलना में|date=25 Aug 2012}}</ref><ref>{{cite web|url=http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html|title=जावा बनाम ग्रूवी 2.0 बनाम स्काला सिंपल परफॉर्मेंस टेस्ट|date=10 Jul 2012|access-date=7 October 2012|archive-url=https://web.archive.org/web/20121210210126/http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html|archive-date=10 December 2012|url-status=dead}}</ref> [[Pivotal Software]] के प्रायोजन के तहत Groovy 2.4 अंतिम प्रमुख रिलीज़ थी जो मार्च 2015 में समाप्त हो गई।<ref name="blog.pivotal.io">{{cite web|url=http://blog.pivotal.io/pivotal/news-2/groovy-2-4-and-grails-3-0-to-be-last-major-releases-under-pivotal-sponsorship|title=Groovy 2.4 और Grails 3.0 प्रमुख प्रायोजन के तहत अंतिम प्रमुख रिलीज होने के लिए|date=19 Jan 2015}}</ref> ग्रूवी ने तब से [[अपाचे सॉफ्टवेयर फाउंडेशन]] में एक परियोजना प्रबंधन समिति के लिए अपनी शासन संरचना को बदल दिया है।<ref name="Groovy Incubator">{{cite web|url=https://blogs.apache.org/foundation/entry/groovy_submitted_to_become_a|title=ग्रोवी अपाचे इनक्यूबेटर में शामिल हो गया|date=11 Mar 2015}}</ref>
ग्रूवी 1.0 को 2 जनवरी, 2007 को और ग्रूवी 2.0 को जुलाई, 2012 में प्रकाशित किया गया था। संस्करण 2 के बाद से, ग्रूवी को स्थिर रूप से संकलित किया जा सकता है, जो जावा के निकट प्रकार के अनुमान और प्रदर्शन की पेशकश करता है।<ref>{{cite web|url=http://objectscape.blogspot.com.br/2012/08/groovy-20-performance-compared-to-java.html|title=ग्रोवी 2.0 प्रदर्शन जावा की तुलना में|date=25 Aug 2012}}</ref><ref>{{cite web|url=http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html|title=जावा बनाम ग्रूवी 2.0 बनाम स्काला सिंपल परफॉर्मेंस टेस्ट|date=10 Jul 2012|access-date=7 October 2012|archive-url=https://web.archive.org/web/20121210210126/http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html|archive-date=10 December 2012|url-status=dead}}</ref> [[Pivotal Software|निर्णायक सॉफ्टवेयर]] के प्रायोजन के तहत ग्रूवी 2.4 अंतिम प्रमुख प्रकाशन था जो मार्च 2015 में समाप्त हो गया।<ref name="blog.pivotal.io">{{cite web|url=http://blog.pivotal.io/pivotal/news-2/groovy-2-4-and-grails-3-0-to-be-last-major-releases-under-pivotal-sponsorship|title=Groovy 2.4 और Grails 3.0 प्रमुख प्रायोजन के तहत अंतिम प्रमुख रिलीज होने के लिए|date=19 Jan 2015}}</ref> ग्रूवी ने तब से [[अपाचे सॉफ्टवेयर फाउंडेशन|अपाचे सॉफ्टवेयर संस्था]] में एक परियोजना प्रबंधन समिति के लिए अपनी शासन संरचना को बदल दिया है।<ref name="Groovy Incubator">{{cite web|url=https://blogs.apache.org/foundation/entry/groovy_submitted_to_become_a|title=ग्रोवी अपाचे इनक्यूबेटर में शामिल हो गया|date=11 Mar 2015}}</ref>
 
 
== इतिहास ==
== इतिहास ==
जेम्स स्ट्रेचन (प्रोग्रामर) ने पहली बार अगस्त 2003 में अपने ब्लॉग पर ग्रूवी के विकास के बारे में बात की थी।<ref>{{cite web|url=http://radio.weblogs.com/0112098/2003/08/29.html|archive-url=https://web.archive.org/web/20030901064404/http://radio.weblogs.com/0112098/2003/08/29.html|url-status=dead|archive-date=1 September 2003|title=ग्रूवी - जावा प्लेटफॉर्म के लिए एक नई गतिशील भाषा का जन्म|author=James Strachan|date=29 Aug 2003}}</ref> मार्च 2004 में, Groovy को JCP को JSR 241 के रूप में प्रस्तुत किया गया था<ref name="JSR">{{cite web |url=http://www.jcp.org/en/jsr/detail?id=241 |title=जावा कम्युनिटी प्रोसेस JSR 241}}</ref> और मतपत्र द्वारा स्वीकार किया गया। 2004 और 2006 के बीच कई संस्करण जारी किए गए। [[जावा सामुदायिक प्रक्रिया]] (JCP) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को जारी किया गया। 7 अक्टूबर, 2007 को ग्रूवी 1.1 फाइनल जारी किया गया था और किए गए कई परिवर्तनों को दर्शाने के लिए तुरंत ग्रूवी 1.5 के रूप में फिर से शुरू किया गया।
जेम्स स्ट्रेचन (प्रोग्रामर) ने पहली बार अगस्त 2003 में अपने ब्लॉग पर ग्रूवी के विकास के बारे में बात की थी।<ref>{{cite web|url=http://radio.weblogs.com/0112098/2003/08/29.html|archive-url=https://web.archive.org/web/20030901064404/http://radio.weblogs.com/0112098/2003/08/29.html|url-status=dead|archive-date=1 September 2003|title=ग्रूवी - जावा प्लेटफॉर्म के लिए एक नई गतिशील भाषा का जन्म|author=James Strachan|date=29 Aug 2003}}</ref> मार्च 2004 में, Groovy को JCP को JSR 241 के रूप में प्रस्तुत किया गया था<ref name="JSR">{{cite web |url=http://www.jcp.org/en/jsr/detail?id=241 |title=जावा कम्युनिटी प्रोसेस JSR 241}}</ref> और मतपत्र द्वारा स्वीकार किया गया। 2004 और 2006 के बीच कई संस्करण जारी किए गए। [[जावा सामुदायिक प्रक्रिया]] (JCP) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को जारी किया गया। 7 अक्टूबर, 2007 को ग्रूवी 1.1 फाइनल जारी किया गया था और किए गए कई परिवर्तनों को दर्शाने के लिए तुरंत ग्रूवी 1.5 के रूप में फिर से शुरू किया गया।

Revision as of 13:21, 18 December 2022

Groovy
Groovy-logo.svg
Groovy Logo
ParadigmMulti-paradigm: object-oriented, imperative, functional, aspect-oriented, scripting
द्वारा डिज़ाइन किया गयाJames Strachan
DeveloperGuillaume Laforge (PMC Chair)
Jochen Theodorou (Tech Lead)
Paul King
Cedric Champeau
पहली प्रस्तुति2003; 23 years ago (2003)
Preview release
4.0.0-beta-1 / September 6, 2021; 4 years ago (2021-09-06)[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 में, Groovy को JCP को JSR 241 के रूप में प्रस्तुत किया गया था[8] और मतपत्र द्वारा स्वीकार किया गया। 2004 और 2006 के बीच कई संस्करण जारी किए गए। जावा सामुदायिक प्रक्रिया (JCP) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 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 () == मैं उड़ रहा हूँ! /* पक्षी वर्ग स्वचालित रूप से फ़्लाइंगएबिलिटी ट्रेट का व्यवहार प्राप्त करता है */ </वाक्यविन्यास हाइलाइट>

लक्षण सरल संरचना से परीक्षण तक क्षमताओं की एक विस्तृत श्रृंखला की अनुमति देते हैं।

दत्तक ग्रहण

ग्रोवी एडॉप्शन के उल्लेखनीय उदाहरणों में शामिल हैं: