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

From Vigyanwiki
No edit summary
 
(27 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Programming language}}
{{Infobox programming language
{{Infobox programming language
| name = Groovy
| name = ग्रूवी
| logo = Groovy-logo.svg
| logo = Groovy-logo.svg
| logo caption = Groovy Logo
| logo caption = Groovy Logo
Line 8: Line 7:
| latest preview version = 4.0.0-beta-1
| latest preview version = 4.0.0-beta-1
| latest preview date = {{start date and age|2021|09|06}}<ref name="github-releases" />
| latest preview date = {{start date and age|2021|09|06}}<ref name="github-releases" />
| designer = [[James Strachan (programmer)|James Strachan]]
| designer = [[जेम्स स्ट्रेचन (प्रोग्रामर)|जेम्स स्ट्रेचन]]
| developer = Guillaume Laforge (PMC Chair)<br />Jochen Theodorou (Tech Lead)<br />Paul King<br />Cedric Champeau
| developer = Guillaume Laforge (PMC Chair)<br />Jochen Theodorou (Tech Lead)<br />Paul King<br />Cedric Champeau
| typing = [[Type system#DYNAMIC|Dynamic]], [[Type system#STATIC|static]], [[Strong and weak typing|strong]], [[Duck typing|duck]]
| typing = [[Type system#DYNAMIC|Dynamic]], [[Type system#STATIC|static]], [[Strong and weak typing|strong]], [[Duck typing|duck]]
Line 19: Line 18:
| file ext = <code>.groovy, .gvy, .gy, .gsh</code><ref name="Groovy Goodness: Default Groovy Script File Extensions">{{Cite web|url=https://mrhaki.blogspot.com/2011/10/groovy-goodness-default-groovy-script.html|title=Groovy Goodness: Default Groovy Script File Extensions}}</ref>
| file ext = <code>.groovy, .gvy, .gy, .gsh</code><ref name="Groovy Goodness: Default Groovy Script File Extensions">{{Cite web|url=https://mrhaki.blogspot.com/2011/10/groovy-goodness-default-groovy-script.html|title=Groovy Goodness: Default Groovy Script File Extensions}}</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>
ग्रूवी 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 में, ग्रूवी को, जेसीपी को जेएसआर 241<ref name="JSR">{{cite web |url=http://www.jcp.org/en/jsr/detail?id=241 |title=जावा कम्युनिटी प्रोसेस JSR 241}}</ref> के रूप में प्रस्तुत किया गया और मतपत्र द्वारा स्वीकार किया गया थ। 2004 और 2006 के बीच कई संस्करण प्रकशित किए गए। [[जावा सामुदायिक प्रक्रिया]] (जेसीपी) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को प्रकशित किया गया। 7 अक्टूबर, 2007 को विभिन्न बीटा और प्रकशित उम्मीदवारों की संख्या 1.1 के बाद, ग्रूवी 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 में, ग्रूवी को, जेसीपी को जेएसआर 241<ref name="JSR">{{cite web |url=http://www.jcp.org/en/jsr/detail?id=241 |title=जावा कम्युनिटी प्रोसेस JSR 241}}</ref> के रूप में प्रस्तुत किया गया और मतपत्र द्वारा स्वीकार किया गया था। 2004 और 2006 के बीच कई संस्करण प्रकाशित किए गए। [[जावा सामुदायिक प्रक्रिया]] (जेसीपी) मानकीकरण के प्रयास शुरू होने के बाद, संस्करण क्रमांकन बदल गया, और 1.0 नामक एक संस्करण 2 जनवरी, 2007 को प्रकशित किया गया। 7 अक्टूबर, 2007 को विभिन्न बीटा और प्रकशित उम्मीदवारों की संख्या 1.1 के बाद, ग्रूवी 1.1 अंतिम जारी किया गया था और किए गए कई बदलावों को प्रतिबिंबित करने के लिए तुरंत ग्रूवी 1.5 के रूप में पुन: नामित किया गया था।


2007 में, ग्रूवी ने जेएएक्स 2007 नवीनीकरण पुरस्कार में पहला पुरस्कार जीता।<ref>{{cite web|url=http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award|title=ग्रूवी ने JAX 2007 इनोवेशन अवार्ड में प्रथम पुरस्कार जीता|date=2007-04-26|access-date=2012-10-07|archive-url=https://web.archive.org/web/20150513184206/http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award|archive-date=2015-05-13|url-status=dead}}</ref> 2008 में, [[Grails (ढांचा)|ग्रेल्स]], एक ग्रूवी [[वेब ढांचा]], ने जेएएक्स 2008 नवीनीकरण पुरस्कार में दूसरा पुरस्कार जीता।<ref>{{cite web|url=http://jax-award.de/jax_award08/proposal_view_de.php?id=240&show=more|title=वे कहते हैं कि एक कप कॉफी से बहुत कुछ हो सकता है|access-date=2012-10-07|archive-url=https://web.archive.org/web/20110419130810/http://jax-award.de/jax_award08/proposal_view_de.php?id=240|archive-date=2011-04-19|url-status=dead}}</ref>
2007 में, ग्रूवी ने जेएएक्स 2007 नवीनीकरण पुरस्कार में पहला पुरस्कार जीता।<ref>{{cite web|url=http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award|title=ग्रूवी ने JAX 2007 इनोवेशन अवार्ड में प्रथम पुरस्कार जीता|date=2007-04-26|access-date=2012-10-07|archive-url=https://web.archive.org/web/20150513184206/http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award|archive-date=2015-05-13|url-status=dead}}</ref> 2008 में, [[Grails (ढांचा)|ग्रेल्स]], एक ग्रूवी [[वेब ढांचा]], ने जेएएक्स 2008 नवीनीकरण पुरस्कार में दूसरा पुरस्कार जीता था।<ref>{{cite web|url=http://jax-award.de/jax_award08/proposal_view_de.php?id=240&show=more|title=वे कहते हैं कि एक कप कॉफी से बहुत कुछ हो सकता है|access-date=2012-10-07|archive-url=https://web.archive.org/web/20110419130810/http://jax-award.de/jax_award08/proposal_view_de.php?id=240|archive-date=2011-04-19|url-status=dead}}</ref>


नवंबर 2008 में, [[स्प्रिंगसोर्स]] ने ग्रूवी एंड ग्रेल्स कंपनी (जी2वन) का अधिग्रहण कर लिया।<ref>{{cite web|url=http://www.indicthreads.com/2138/springsource-acquires-groovy-and-grails-company-g2one/|title=स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (G2One) का अधिग्रहण किया|date=11 Nov 2008}}</ref> अगस्त 2009 में [[VMware|वीएमवेयर]] ने स्प्रिंगसोर्स का अधिग्रहण किया।<ref>
नवंबर 2008 में, [[स्प्रिंगसोर्स]] ने ग्रूवी एंड ग्रेल्स कंपनी (जी2वन) का अधिग्रहण कर लिया।<ref>{{cite web|url=http://www.indicthreads.com/2138/springsource-acquires-groovy-and-grails-company-g2one/|title=स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (G2One) का अधिग्रहण किया|date=11 Nov 2008}}</ref> अगस्त 2009 में [[VMware|वीएमवेयर]] ने स्प्रिंगसोर्स का अधिग्रहण किया।<ref>
{{cite web|url=https://techcrunch.com/2009/08/10/vmware-acquires-springsource/|title=VMWare Acquires SpringSource|date=10 Aug 2009}}</ref>
{{cite web|url=https://techcrunch.com/2009/08/10/vmware-acquires-springsource/|title=VMWare Acquires SpringSource|date=10 Aug 2009}}</ref>


अप्रैल 2012 में, आठ साल की निष्क्रियता के बाद, '''स्पेक लीड''' ने जेएसआर 241 की स्थिति को निष्क्रिय कर दिया।<ref name="JSR" />
अप्रैल 2012 में, आठ साल की निष्क्रियता के बाद, स्पेक लीड ने जेएसआर 241 की स्थिति को निष्क्रिय कर दिया।<ref name="JSR" />


2007 में ग्रूवी 1.0 प्रकशित होने से एक साल पहले स्ट्रेचन ने इस परियोजना को चुपचाप छोड़ दिया था।।{{citation needed|date=May 2012}} अक्टूबर 2016 में, स्ट्रेचन ने कहा कि मुझे अभी भी ग्रूवी (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपप्रति और कोटलिन से प्यार है।<ref>{{cite web |url=https://twitter.com/jstrachan/status/784333918078169088 |title=जेम्स स्ट्रेचन का ट्वीट|date=November 24, 2016 |access-date=2016-11-24}}</ref>
2007 में ग्रूवी 1.0 प्रकशित होने से एक साल पहले स्ट्रेचन ने इस परियोजना को चुपचाप छोड़ दिया था। अक्टूबर 2016 में, स्ट्रेचन ने कहा "मुझे अभी भी ग्रूवी पसंद है (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपस्क्रिप्ट और कोटलिन है।<ref>{{cite web |url=https://twitter.com/jstrachan/status/784333918078169088 |title=जेम्स स्ट्रेचन का ट्वीट|date=November 24, 2016 |access-date=2016-11-24}}</ref>


2 जुलाई 2012 को, ग्रूवी 2.0 प्रकशित किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और [[स्थिर प्रकार की जाँच]] सम्मिलित थी।
2 जुलाई 2012 को, ग्रूवी 2.0 प्रकशित किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और [[स्थिर प्रकार की जाँच]] सम्मिलित थी।
Line 40: Line 39:
अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक संक्षिप्त हो सकता है, क्योंकि इसमें उन सभी अवयवो की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है।<ref name=konig32>König 2007, pg. 32</ref> यह जावा प्रोग्रामर्स के लिए ग्रूवी [[कार्यरचना मुहावरों]] को प्राप्त करने से पहले परिचित जावा रचनाक्रम के साथ धीरे-धीरे ग्रूवी सीखना संभव बनाता है।<ref>{{cite web |url=http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers |title=जावा डेवलपर्स के लिए ग्रूवी शैली और भाषा सुविधा दिशानिर्देश|publisher=Groovy.codehaus.org |access-date=2015-01-22 |archive-url=https://web.archive.org/web/20150117214709/http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers |archive-date=2015-01-17 |url-status=dead }}</ref>
अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक संक्षिप्त हो सकता है, क्योंकि इसमें उन सभी अवयवो की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है।<ref name=konig32>König 2007, pg. 32</ref> यह जावा प्रोग्रामर्स के लिए ग्रूवी [[कार्यरचना मुहावरों]] को प्राप्त करने से पहले परिचित जावा रचनाक्रम के साथ धीरे-धीरे ग्रूवी सीखना संभव बनाता है।<ref>{{cite web |url=http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers |title=जावा डेवलपर्स के लिए ग्रूवी शैली और भाषा सुविधा दिशानिर्देश|publisher=Groovy.codehaus.org |access-date=2015-01-22 |archive-url=https://web.archive.org/web/20150117214709/http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers |archive-date=2015-01-17 |url-status=dead }}</ref>


'''जावा में उपलब्ध ग्रूवी सुविधाओं में स्थिर और गतिशील टाइपिंग ('''कीवर्ड डीईएफ़ के साथ) दोनों शामिल हैं <code>def</code>), [[ऑपरेटर ओवरलोडिंग]], सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल समर्थन, [[नियमित अभिव्यक्ति]]यों के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग इंटरपोलेशन, अतिरिक्त सहायक तरीके और [[सुरक्षित नेविगेशन ऑपरेटर]] <code>?.</code> [[नल पॉइंटर]]्स के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, <code>variable?.method()</code>, या <code>variable?.field</code>).<ref>{{cite web |url=http://groovy.codehaus.org/Differences+from+Java |title=ग्रूवी - जावा से अंतर|publisher=Groovy.codehaus.org |access-date=2013-08-12 |url-status=dead |archive-url=https://web.archive.org/web/20090317025737/http://groovy.codehaus.org/Differences+from+Java |archive-date=2009-03-17 }}</ref>
जावा में उपलब्ध ग्रूवी सुविधाओं में स्थिर और गतिशील टाइपिंग (कीवर्ड <code>def</code> के साथ) दोनों सम्मिलित हैं, [[ऑपरेटर ओवरलोडिंग|संचालक ओवरलोडिंग]], सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल समर्थन, [[नियमित अभिव्यक्ति|नियमित अभिव्यक्तियों]] के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग प्रक्षेप, अतिरिक्त सहायक तरीके और [[सुरक्षित नेविगेशन ऑपरेटर]] <code>?.</code> [[नल पॉइंटर|अशक्त संकेत]] के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, <code>variable?.method()</code>, या <code>variable?.field</code>) ये सभी सम्मिलित है।<ref>{{cite web |url=http://groovy.codehaus.org/Differences+from+Java |title=ग्रूवी - जावा से अंतर|publisher=Groovy.codehaus.org |access-date=2013-08-12 |url-status=dead |archive-url=https://web.archive.org/web/20090317025737/http://groovy.codehaus.org/Differences+from+Java |archive-date=2009-03-17 }}</ref>


चूंकि संस्करण 2 ग्रूवी मॉड्यूलरिटी का भी समर्थन करता है (प्रोजेक्ट की जरूरतों के अनुसार केवल आवश्यक जार को शिप करने में सक्षम होने के कारण, इस प्रकार ग्रूवी की लाइब्रेरी के आकार को कम करता है), टाइप चेकिंग, स्टैटिक कंपाइलिंग, प्रोजेक्ट कॉइन सिंटैक्स एन्हांसमेंट, जावा सिंटैक्स # कोड ब्लॉक और चल रहे प्रदर्शन संवर्द्धन का उपयोग कर <code>invokedynamic</code> निर्देश जावा संस्करण के इतिहास में पेश किया गया#Java SE 7.<ref>{{cite web |url=http://www.infoq.com/articles/new-groovy-20 |title=ग्रोवी 2.0 में नया क्या है?|date=28 Jun 2012}}</ref>
चूंकि संस्करण 2 ग्रूवी प्रतिरुपकता का भी समर्थन करता है (प्रोजेक्ट की जरूरतों के अनुसार केवल आवश्यक जार को शिप करने में सक्षम होने के कारण, इस प्रकार ग्रूवी की लाइब्रेरी के आकार को कम करता है), टाइप चेकिंग, स्टैटिक कंपाइलिंग, प्रोजेक्ट कॉइन सिंटैक्स एन्हांसमेंट, [[मल्टीकैच ब्लॉक]] और चल रहे प्रदर्शन संवर्द्धन का उपयोग कर <code>invokedynamic</code> निर्देश [[जावा]] संस्करण के इतिहास में पेश किया गया।<ref>{{cite web |url=http://www.infoq.com/articles/new-groovy-20 |title=ग्रोवी 2.0 में नया क्या है?|date=28 Jun 2012}}</ref>
ग्रूवी विभिन्न मार्कअप भाषाओं जैसे [[XML]] और [[HTML]] के लिए मूल समर्थन प्रदान करता है, जो एक इनलाइन [[दस्तावेज़ वस्तु मॉडल]] (DOM) सिंटैक्स के माध्यम से पूरा किया जाता है। यह सुविधा एक समान और संक्षिप्त सिंटैक्स और प्रोग्रामिंग पद्धति के साथ कई प्रकार की विषम डेटा संपत्तियों की परिभाषा और हेरफेर को सक्षम बनाती है।{{Citation needed|date=November 2008}}


जावा के विपरीत, एक ग्रूवी स्रोत कोड फ़ाइल को एक (असंकलित) स्क्रिप्टिंग भाषा के रूप में निष्पादित किया जा सकता है, यदि इसमें किसी भी वर्ग परिभाषा के बाहर कोड शामिल है, यदि यह मुख्य विधि वाला वर्ग है, या यदि यह रननेबल या ग्रूवीटेस्टकेस है। एक ग्रूवी स्क्रिप्ट पूरी तरह से पार्स, संकलित और निष्पादित करने से पहले उत्पन्न होती है (पायथन और रूबी के समान)। यह हुड के नीचे होता है, और संकलित संस्करण को प्रक्रिया के आर्टिफैक्ट के रूप में सहेजा नहीं जाता है।<ref name="konig37_8">कोनिग 2007, पीपी. 37-8</ref>
ग्रूवी विभिन्न मार्कअप भाषाओं जैसे [[XML|एक्सएमएल]] और [[HTML|एचटीएमएल]] के लिए मूल समर्थन प्रदान करता है, जो एक इनलाइन [[दस्तावेज़ वस्तु मॉडल]] (डीओएम्) सिंटैक्स के माध्यम से पूरा किया जाता है। यह सुविधा एक समान और संक्षिप्त सिंटैक्स और प्रोग्रामिंग पद्धति के साथ कई प्रकार की विषम डेटा संपत्तियों की परिभाषा और हेरफेर को सक्षम बनाती है।
 
जावा के विपरीत, एक ग्रूवी स्रोत कोड फ़ाइल को एक (असंकलित) [[स्क्रिप्ट]] के रूप में निष्पादित किया जा सकता है, अगर इसमें किसी भी वर्ग परिभाषा के बाहर कोड होता है, यदि यह मुख्य विधि वाला वर्ग है, या यदि यह रननेबल या ग्रूवीटेस्टकेस है। एक ग्रूवी स्क्रिप्ट पूरी तरह से पार्स, संकलित और निष्पादित करने से पहले उत्पन्न होती है (पायथन और रूबी के समान)। यह हुड के नीचे होता है, और संकलित संस्करण को प्रक्रिया के आर्टिफैक्ट के रूप में सहेजा नहीं जाता है।<ref name="konig37_8">कोनिग 2007, पीपी. 37-8</ref>


=== ग्रूवीबीन्स, गुण ===
=== ग्रूवीबीन्स, गुण ===
ग्रूवीबीन्स [[JavaBeans|जावाबीन्स]] का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में, <code>सेटकोलर (स्ट्रिंग कलर)</code> तथा <code>गेटकलर()</code> निहित रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न '''विधियों को बुला रही हैं'''।<ref name=konig38_9>कोनिग 2007, पीपी. 38-9</ref>
ग्रूवीबीन्स [[JavaBeans|जावाबीन्स]] का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में, <code>सेटकोलर (स्ट्रिंग कलर)</code> तथा <code>गेटकलर()</code> निहित रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को आमंत्रण कर  रही हैं।<ref name=konig38_9>कोनिग 2007, पीपी. 38-9</ref>
 
<syntaxhighlight lang="groovy">
क्लास एग्रूवीबीन {
class AGroovyBean {
   तार का रंग
   String color
}
}


डिफ माई ग्रूवीBean = नया Aग्रूवीBean ()
def myGroovyBean = new AGroovyBean()


myग्रूवीBean.setColor ('बेबी ब्लू')
myGroovyBean.setColor('baby blue')
जोर myग्रूवीBean.getColor() == 'बेबी ब्लू'
assert myGroovyBean.getColor() == 'baby blue'


myग्रूवीBean.color = 'पेवर'
myGroovyBean.color = 'pewter'
जोर myग्रूवीBean.color == 'पेवर'
assert myGroovyBean.color == 'pewter'
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
ग्रूवी सूची और मानचित्रों को संभालने के लिए सरल, सुसंगत सिंटैक्स प्रदान करता है, जो जावा के सरणी सिंटैक्स की याद दिलाता है।<ref name="konig41_3">कोनिग 2007, पीपी. 41-3</ref>
<syntaxhighlight lang="groovy">
def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai']  // Looks like an array, but is a list
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca'  // Adds an element to the list
assert movieList.size() == 4


ग्रूवी सूची और मानचित्रों को संभालने के लिए सरल, सुसंगत सिंटैक्स प्रदान करता है, जो जावा के सरणी सिंटैक्स की याद दिलाता है।<ref name=konig41_3>कोनिग 2007, पीपी. 41-3</ref>
def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ] // Declares a map
<वाक्यविन्यास लैंग = ग्रूवी>
assert monthMap['March'] == 31  // Accesses an entry
def MovieList = ['देर्सु उजाला', 'रैन', 'सात समुराई'] // एक सरणी की तरह दिखता है, लेकिन एक सूची है
monthMap['April'] = 30  // Adds an entry to the map
Assert MovieList[2] == 'सात समुराई'
assert monthMap.size() == 4
मूवीलिस्ट [3] = 'कैसाब्लांका' // सूची में एक तत्व जोड़ता है
</syntaxhighlight>
Assert MovieList.size() == 4


डीईएफ़ मंथ मैप = [ 'जनवरी' : 31, 'फ़रवरी' : 28, 'मार्च' : 31] // मैप डिक्लेयर करता है
महीने का नक्शा ['मार्च'] == 31 // एक प्रविष्टि तक पहुँचता है
महीनामैप ['अप्रैल'] = 30 // मानचित्र में एक प्रविष्टि जोड़ता है
महीने का नक्शा। आकार () == 4 पर जोर दें
</वाक्यविन्यास हाइलाइट>


=== प्रोटोटाइप एक्सटेंशन ===
ग्रूवी [[प्रोटोटाइप-आधारित प्रोग्रामिंग]] के लिए समर्थन प्रदान करता है <code>ExpandoMetaClass</code>, एक्सटेंशन मॉड्यूल (केवल ग्रूवी 2 में), ऑब्जेक्टिव-सी-जैसे ऑब्जेक्टिव-सी#श्रेणियां और <code>DelegatingMetaClass</code>.<ref>{{cite web |url=http://groovy.codehaus.org/Gnkkhmtlks|title=Gnkkhmtlks|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121001122409/http://groovy.codehaus.org/Gnkkhmtlks|archive-date=2012-10-01 |url-status=dead }}</ref>


<code>ExpandoMetaClass</code> रूबी (प्रोग्रामिंग लैंग्वेज) के समान आसानी से कक्षा में परिवर्तन को व्यक्त करने के लिए एक [[डोमेन-विशिष्ट भाषा]] (डीएसएल) प्रदान करता है। रूबी की ओपन क्लास अवधारणा:


<वाक्यविन्यास लैंग = ग्रूवी>
संख्या.मेटाक्लास {
  sqrt = {गणित.sqrt (प्रतिनिधि)}
}


जोर दें 9.sqrt() == 3
जोर दें 4.sqrt() == 2
</वाक्यविन्यास हाइलाइट>


प्रोटोटाइप के माध्यम से कोड में ग्रूवी के परिवर्तन जावा में दिखाई नहीं दे रहे हैं, क्योंकि ग्रूवी में प्रत्येक विशेषता/विधि आमंत्रण मेटाक्लास रजिस्ट्री के माध्यम से जाता है। परिवर्तित कोड को केवल जावा से मेटाक्लास रजिस्ट्री में जाकर एक्सेस किया जा सकता है।


ग्रूवी भी ओवरराइडिंग विधियों की अनुमति देता है <code>getProperty()</code>, <code>propertyMissing()</code> दूसरों के बीच में, डेवलपर को किसी ऑब्जेक्ट पर कॉल को इंटरसेप्ट करने और उनके लिए एक क्रिया निर्दिष्ट करने में सक्षम बनाता है, एक सरल पहलू-उन्मुख प्रोग्रामिंग|पहलू-उन्मुख तरीके से। निम्न कोड वर्ग को सक्षम बनाता है <code>java.lang.String</code> जवाब देने के लिए <code>hex</code> संपत्ति:


<वाक्यविन्यास लैंग = ग्रूवी>
एनम रंग {
  काला ('#000000'), सफेद ('#FFFFFF'), लाल ('#FF0000'), नीला ('#0000FF')
  स्ट्रिंग हेक्स
  रंग (स्ट्रिंग हेक्स) {
    यह.हेक्स = हेक्स
  }
}


String.metaClass.getProperty = {स्ट्रिंग संपत्ति ->
  def stringColor = प्रतिनिधि
  अगर (संपत्ति == 'हेक्स') {
    Color.values().ढूंढें {it.name().equalsIgnoreCase stringColor}?.hex
  }
}


जोर सफेद। हेक्स == #FFFFFF
जोर नीला .hex == #0000FF
जोर काला .hex == #000000
हरे रंग का जोर दें। हेक्स == अशक्त
</वाक्यविन्यास हाइलाइट>


ग्रेल्स फ्रेमवर्क व्यापक रूप से ग्रेल्स (ढांचे) को सक्षम करने के लिए मेटाप्रोग्रामिंग का उपयोग करता है # दृढ़ता गतिशील खोजकर्ता, जैसे <code>User.findByName('Josh')</code> और दूसरे।<ref>{{cite web |url=http://www.slideshare.net/zenMonkey/metaprogramming-techniques-in-groovy-and-grails |title=ग्रोवी और ग्रेल्स में मेटाप्रोग्रामिंग तकनीकें|date=11 Jun 2009}}</ref>


=== आदिप्ररूप विस्तारण ===
ग्रूवी <code>ExpandoMetaClass</code>, विस्तारण मापांक (केवल ग्रूवी 2 में), ऑब्जेक्टिव-सी-जैसे [[श्रेणियाँ]] और <code>DelegatingMetaClass</code> के माध्यम से [[आदिप्ररूप विस्तारण]] के लिए समर्थन प्रदान करता हैै।<ref>{{cite web |url=http://groovy.codehaus.org/Gnkkhmtlks|title=Gnkkhmtlks|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121001122409/http://groovy.codehaus.org/Gnkkhmtlks|archive-date=2012-10-01 |url-status=dead }}</ref>


=== डॉट और कोष्ठक ===
<code>ExpandoMetaClass</code> रूबी के की ओपन क्लास अवधारणा के समान ,कक्षा में परिवर्तनों को आसानी से व्यक्त करने के लिए एक [[डोमेन-विशिष्ट भाषा|डोमेन-विशिष्ट लैंग्वेज]] (डीएसएल) प्रदान करता है,
ग्रूवी का सिंटैक्स कुछ स्थितियों में कोष्ठकों और बिंदुओं को छोड़ने की अनुमति देता है। निम्नलिखित ग्रूवी कोड
<syntaxhighlight lang="groovy">
Number.metaClass {
  sqrt = { Math.sqrt(delegate) }
}


<वाक्यविन्यास लैंग = ग्रूवी>
assert 9.sqrt() == 3
(कॉफी) .साथ (चीनी, दूध) .और (शराब) लें
assert 4.sqrt() == 2
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>
प्रोटोटाइप के माध्यम से कोड में ग्रूवी के परिवर्तन जावा में दिखाई नहीं दे रहे हैं, क्योंकि ग्रूवी में प्रत्येक विशेषता/विधि आमंत्रण मेटाक्लास रजिस्ट्री के माध्यम से जाता है। परिवर्तित कोड को केवल जावा से मेटाक्लास रजिस्ट्री में जाकर एक्सेस किया जा सकता है।


रूप में लिखा जा सकता है
ग्रूवी दूसरों के बीच <code>getProperty()</code>, <code>propertyMissing()</code>  के रूप में ओवरराइडिंग विधियों की भी अनुमति देता है, जिससे डेवलपर को किसी ऑब्जेक्ट पर कॉल को इंटरसेप्ट करने और सरलीकृत पहलू-उन्मुख तरीके से उनके लिए एक क्रिया निर्दिष्ट करने में सक्षम बनाता है। निम्नलिखित कोड वर्ग <code>java.lang.String</code>को  <code>hex</code> संपत्ति का जवाब देने में सक्षम बनाता है,
<syntaxhighlight lang="groovy">
enum Color {
  BLACK('#000000'), WHITE('#FFFFFF'), RED('#FF0000'), BLUE('#0000FF')
  String hex
  Color(String hex) {
    this.hex = hex
  }
}


<वाक्यविन्यास लैंग = ग्रूवी>
String.metaClass.getProperty = { String property ->
चीनी, दूध और शराब के साथ कॉफी लें
  def stringColor = delegate
</वाक्यविन्यास हाइलाइट>
  if (property == 'hex') {
    Color.values().find { it.name().equalsIgnoreCase stringColor }?.hex
  }
}


डोमेन-विशिष्ट भाषाओं (डीएसएल) के विकास को सक्षम करना जो सादे अंग्रेजी की तरह दिखती हैं।
assert "WHITE".hex == "#FFFFFF"
assert "BLUE".hex == "#0000FF"
assert "BLACK".hex == "#000000"
assert "GREEN".hex == null
</syntaxhighlight>
ग्रेल्स फ्रेमवर्क जीओआरएम् गतिशील खोजकर्ताओं को सक्षम करने के लिए बड़े पैमाने पर मेटाप्रोग्रामिंग का उपयोग करता है , जैसे <code>User.findByName('Josh')</code> और अन्य है।<ref>{{cite web |url=http://www.slideshare.net/zenMonkey/metaprogramming-techniques-in-groovy-and-grails |title=ग्रोवी और ग्रेल्स में मेटाप्रोग्रामिंग तकनीकें|date=11 Jun 2009}}</ref>


=== [[कार्यात्मक प्रोग्रामिंग]] ===
हालाँकि ग्रूवी ज्यादातर एक वस्तु-उन्मुख भाषा है, यह कार्यात्मक प्रोग्रामिंग सुविधाएँ भी प्रदान करती है।


==== क्लोजर ====
ग्रूवी के दस्तावेज़ीकरण के मुताबिक: ग्रूवी में क्लोजर एक 'विधि सूचक' के समान काम करता है, जिससे कोड को बाद के समय में लिखा जा सकता है और चलाया जा सकता है।<ref>{{cite web |url=http://groovy.codehaus.org/Closures |title=ग्रोवी - क्लोजर|url-status=dead |archive-url=https://web.archive.org/web/20120522213410/http://groovy.codehaus.org/Closures |archive-date=2012-05-22 }}</ref> ग्रूवी के क्लोजर फ्री वेरिएबल्स का समर्थन करते हैं, यानी वैरिएबल जिन्हें स्पष्ट रूप से पैरामीटर के रूप में पारित नहीं किया गया है, लेकिन इसके घोषणा संदर्भ में मौजूद है, आंशिक अनुप्रयोग (यह '[[करी]]' शब्द है)<ref name=":0" />), प्रतिनिधिमंडल, अंतर्निहित, टाइप किए गए और अनटाइप किए गए पैरामीटर।


एक निर्धारित प्रकार के संग्रह पर काम करते समय, संग्रह पर एक ऑपरेशन को बंद करने का अनुमान लगाया जा सकता है:


<वाक्यविन्यास लैंग = ग्रूवी>
सूची = [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 संपत्ति गुम (स्ट्रिंग संपत्ति) {
    अगर (संपत्ति == प्रिंट) प्रिंटलाइन मूल्य
  }
}
</वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = ग्रूवी>
// यहां परिभाषित किया गया है कि उपरोक्त कोड के ब्लॉक में भावों का जवाब कौन देगा।
संचालन.प्रतिनिधि = नई अभिव्यक्ति ()
संचालन ()
</वाक्यविन्यास हाइलाइट>


==== करी ====
आमतौर पर आंशिक आवेदन कहा जाता है,<ref name=":0">[http://programmers.stackexchange.com/questions/152868/does-groovy-call-partial-application-currying "Does groovy call partial application 'currying']", 10 Aug 2013</ref> यह ग्रूवी फीचर क्लोजर के मापदंडों को उनके किसी भी तर्क में व्यतिक्रम मापदंडों पर सेट करने की अनुमति देता है, जिससे बाउंड वैल्यू के साथ एक नया क्लोजर बनता है।<code>curry()</code> विधि में एक तर्क देने से तर्क एक ठीक हो जाएगा। । एन तर्क देने से तर्क 1 ठीक हो जाएगा ... एन।


<वाक्यविन्यास लैंग = ग्रूवी>
def joinTwoWordsWithSymbol = {प्रतीक, पहला, दूसरा -> पहला + प्रतीक + दूसरा}
जोर दो शब्दों के साथ प्रतीक में शामिल हों ('#', 'हैलो', 'वर्ल्ड') == 'हैलो # वर्ल्ड'


def concatWords = joinTwoWordsWithSymbol.curry(' ')
=== बिंदु और कोष्ठक ===
मुखर concatWords ('हैलो', 'वर्ल्ड') == 'हैलो वर्ल्ड'
ग्रूवी का रचनाक्रम कुछ स्थितियों में कोष्ठकों और बिंदुओं को छोड़ने की अनुमति देता है। निम्नलिखित ग्रूवी कोड
take(coffee).with(sugar, [[milk]]).and(liquor)
 
डोमेन-विशिष्ट भाषाओं (डीएसएल) के विकास को सक्षम करने वाले
take coffee with sugar, milk and liquor
के रूप में लिखा जा सकता है जो सादे अंग्रेजी की तरह दिखते हैं।


def prependHello = concatWords.curry('Hello')
=== [[कार्यात्मक प्रोग्रामिंग]] ===
// def prependHello = joinTwoWordsWithSymbol.curry('', 'Hello')
हालाँकि ग्रूवी ज्यादातर एक वस्तु-उन्मुख लैंग्वेज है, यह [[कार्यात्मक प्रोग्रामिंग]] सुविधाएँ भी प्रदान करती है।
जोर देना प्रीपेन्ड हैलो ('वर्ल्ड') == 'हैलो वर्ल्ड'
</वाक्यविन्यास हाइलाइट>


करी का उपयोग विपरीत दिशा में भी किया जा सकता है (अंतिम N तर्कों को ठीक करते हुए)। <code>rcurry()</code>.
==== संवरण ====
ग्रूवी के दस्तावेज़ीकरण के मुताबिक, ग्रूवी में संवरण एक 'विधि सूचक' के समान काम करता है, जिससे कोड को बाद के समय में लिखा और चलाया जा सकता है।<ref>{{cite web |url=http://groovy.codehaus.org/Closures |title=ग्रोवी - क्लोजर|url-status=dead |archive-url=https://web.archive.org/web/20120522213410/http://groovy.codehaus.org/Closures |archive-date=2012-05-22 }}</ref> ग्रूवी के संवरण मुक्त चर का समर्थन करते हैं, यानी वे चर जिन्हें स्पष्ट रूप से मापदण्ड के रूप में पारित नहीं किया गया है, लेकिन इसके घोषणा संदर्भ में, [[आंशिक अनुप्रयोग]] (यह '[[करी]]' शब्द है)<ref name=":0" />), प्रतिनिधिमंडल, अंतर्निहित, टाइप किए गए और अनटाइप किए गए पैरामीटर उपस्थित है।


<वाक्यविन्यास लैंग = ग्रूवी>
एक निर्धारित प्रकार के संग्रह पर काम करते समय, संग्रह पर एक संचालन को बंद करने का अनुमान लगाया जा सकता है,
def power = { BigDecimal value, BigDecimal power ->
list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
   मूल्य ** शक्ति
}
/*
  * [[Non-zero numbers are coerced to true, so when it % 2 == 0 (even), it is false.]]
  * [[The type of the implicit "it" parameter can be inferred as an Integer by the IDE.]]
  * [[It could also be written as:]]
  * list.findAll { Integer i -> i % 2 }
   * list.findAll { i -> i % 2 }
  */
[[def]] odds = list.[[findAll]] { it % 2 }
[[assert]] odds == [1, 3, 5, 7, 9]
अभिव्यक्तियों के एक समूह को कार्यान्वयन के संदर्भ के बिना संवरण ब्लॉक में लिखा जा सकता है और प्रतिसाद देने वाली वस्तु को प्रतिनिधिमंडल का उपयोग करके बाद के बिंदु पर नियुक्त किया जा सकता है,
// This block of code contains expressions without reference to an implementation
def operations = {
  declare 5
  sum 4
  divide 3
  print
}


डीईएफ़ वर्ग = power.rcurry(2)
/*
डीईएफ़ क्यूब = power.rcurry(3)
  * This class will handle the operations that can be used in the closure above. Another class
 
  * could be declared having the same methods, but using, for example, webservice operations
जोर शक्ति (2, 2) == 4
  * in the calculations.
मुखर वर्ग (4) == 16
  */
घन (3) == 27 पर जोर दें
[[class Expression]] {
</वाक्यविन्यास हाइलाइट>
  BigDecimal value
 
ग्रूवी [[आलसी मूल्यांकन]] का भी समर्थन करता है,<ref>{{cite web |url=http://groovy.codehaus.org/Lazy+transformation |title=ग्रोवी - आलसी परिवर्तन|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121008091312/http://groovy.codehaus.org/Lazy+transformation |archive-date=2012-10-08 |url-status=dead }}</ref><ref>{{cite web|url=http://ndpar.blogspot.com.br/2011/02/lazy-lists-in-groovy.html|title=साइड नोट्स: ग्रोवी में आलसी सूचियां|date=3 Feb 2011}}</ref> फ़ोल्ड (उच्च-आदेश फ़ंक्शन)|कम करें/फ़ोल्ड करें,<ref>{{cite web |url=http://bendoerr.me/posts/2011-06-20-groovy-inject.html |title=ग्रूवी की तह|date=20 Jun 2011 |access-date=12 February 2015 |archive-url=https://web.archive.org/web/20150213033355/http://bendoerr.me/posts/2011-06-20-groovy-inject.html |archive-date=13 February 2015 |url-status=dead }}</ref> [[डेटा संरचना]] और अपरिवर्तनीयता,<ref>{{cite web |url=http://www.slideshare.net/arturoherrero/functional-programming-with-groovy |title=ग्रोवी के साथ कार्यात्मक प्रोग्रामिंग|date=5 Nov 2011}}</ref> दूसरों के बीच में।<ref>{{cite web |url=http://groovy.codehaus.org/Functional+Programming+with+Groovy |title=ग्रूवी में फंक्शन प्रोग्रामिंग|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121008095622/http://groovy.codehaus.org/Functional+Programming+with+Groovy |archive-date=2012-10-08 |url-status=dead }}</ref>
  /*
    * Though an Integer is passed as a parameter, it is coerced into a BigDecimal, as was
    * defined. If the class had a 'declare(Integer value)' method, it would be used instead.
    */
  [[def]] declare(BigDecimal value) {
    [[this.value =]] value
  }
 
  [[def]] sum(BigDecimal valueToAdd) {
    [[this.value +=]] valueToAdd
  }
 
  [[def]] divide(BigDecimal divisor) {
    [[this.value /=]] divisor
  }
 
  [[def]] propertyMissing(String property) {
    [[if]] (property == "[[print]]") println value
  }
}


// Here is defined who is going to respond the expressions in the block of code above.
operations.[[delegate]] = [[new]] Expression()
operations()


== करी ==
आमतौर पर [[आंशिक आवेदन]] कहा जाता है,<ref name=":0">[http://programmers.stackexchange.com/questions/152868/does-groovy-call-partial-application-currying "Does groovy call partial application 'currying']", 10 Aug 2013</ref> यह ग्रूवी फीचर संवरण के मापदंडों को उनके किसी भी तर्क में व्यतिक्रम मापदंडों पर सेट करने की अनुमति देता है, जिससे बाउंड वैल्यू के साथ एक नया संवरण बनता है।<code>curry()</code> विधि में एक तर्क देने से तर्क एक ठीक हो जाएगा। N तर्क देने से तर्क 1 ठीक हो जाएगा ... N।
[[def]] joinTwoWordsWithSymbol = { symbol, first, second -> first + symbol + second }
[[assert]] joinTwoWordsWithSymbol([['#']], [['Hello']], [['World']]) == [['Hello#World']]
def concatWords = joinTwoWordsWithSymbol.curry(' ')
[[assert]] concatWords([['Hello']], [['World']]) == [['Hello World']]
def prependHello = concatWords.curry('[[Hello]]')
//def prependHello = joinTwoWordsWithSymbol.curry(' ', 'Hello')
[[assert]] prependHello('[[World]]') == [['Hello World']]
करी का उपयोग curry () का उपयोग करके विपरीत दिशा (अंतिम N तर्कों को ठीक करते हुए) में भी किया जा सकता है।
[[def]] power = { BigDecimal value, BigDecimal power ->
  value**power
}
[[def]] square = power.rcurry(2)
[[def]] cube = power.rcurry(3)
[[assert power]](2, 2) == 4
[[assert]] square(4) == 16
[[assert]] cube(3) == 27
ग्रूवी दूसरों के बीच [[आलसी मूल्यांकन|अनुयोगी मूल्यांकन]]<ref>{{cite web |url=http://groovy.codehaus.org/Lazy+transformation |title=ग्रोवी - आलसी परिवर्तन|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121008091312/http://groovy.codehaus.org/Lazy+transformation |archive-date=2012-10-08 |url-status=dead }}</ref><ref>{{cite web|url=http://ndpar.blogspot.com.br/2011/02/lazy-lists-in-groovy.html|title=साइड नोट्स: ग्रोवी में आलसी सूचियां|date=3 Feb 2011}}</ref> ,[[कम/गुना]],<ref>{{cite web |url=http://bendoerr.me/posts/2011-06-20-groovy-inject.html |title=ग्रूवी की तह|date=20 Jun 2011 |access-date=12 February 2015 |archive-url=https://web.archive.org/web/20150213033355/http://bendoerr.me/posts/2011-06-20-groovy-inject.html |archive-date=13 February 2015 |url-status=dead }}</ref> [[डेटा संरचना|अनंत संरचना]] और [[अपरिवर्तनीयता]]<ref>{{cite web |url=http://www.slideshare.net/arturoherrero/functional-programming-with-groovy |title=ग्रोवी के साथ कार्यात्मक प्रोग्रामिंग|date=5 Nov 2011}}</ref> का भी समर्थन करता है।<ref>{{cite web |url=http://groovy.codehaus.org/Functional+Programming+with+Groovy |title=ग्रूवी में फंक्शन प्रोग्रामिंग|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121008095622/http://groovy.codehaus.org/Functional+Programming+with+Groovy |archive-date=2012-10-08 |url-status=dead }}</ref>
===[[JSON]] और XML प्रसंस्करण===
===[[JSON]] और XML प्रसंस्करण===
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) और XML प्रसंस्करण पर, ग्रूवी [[बिल्डर पैटर्न]] को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल,
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) और XML प्रसंस्करण पर, ग्रूवी [[बिल्डर पैटर्न]] को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल,
  <languages>
  <[[languages]]>
   <language year="1995">
   <[[language]] year="[[1995]]">
     <name>Java</name>
     <[[name]]>Java</[[name]]>
     <paradigm>object oriented</paradigm>
     <[[paradigm]]>object oriented</[[paradigm]]>
     <typing>static</typing>
     <[[typing]]>static</[[typing]]>
   </language>
   </[[language]]>
   <language year="1995">
   <language year="1995">
     <name>Ruby</name>
     <[[name]]>Ruby</[[name]]>
     <paradigm>functional, object oriented</paradigm>
     <[[paradigm]]>functional, object oriented</paradigm>
     <typing>duck typing, dynamic</typing>
     <[[typing]]>duck typing, dynamic</[[typing]]>
   </language>
   </[[language]]>
   <language year="2003">
   <[[language]] year="[[2003]]">
     <name>Groovy</name>
     <name>Groovy</name>
     <paradigm>functional, object oriented</paradigm>
     <[[paradigm]]>functional, object oriented</paradigm>
     <typing>duck typing, dynamic, static</typing>
     <[[typing]]>duck [[typing]], dynamic, static</[[typing]]>
   </language>
   </[[language]]>
  </languages>
  </[[languages]]>
निम्नलिखित ग्रूवी कोड के माध्यम से उत्पन्न किया जा सकता है,
निम्नलिखित ग्रूवी कोड के माध्यम से उत्पन्न किया जा सकता है,
  def writer = new StringWriter()
  def writer = new StringWriter()
Line 309: Line 299:


=== सार वाक्य रचना वृक्ष परिवर्तन ===
=== सार वाक्य रचना वृक्ष परिवर्तन ===
ग्रूवी के स्वयं के प्रलेखन के अनुसार, जब ग्रूवी कंपाइलर ग्रूवी स्क्रिप्ट और कक्षाओं को संकलित करता है, तो प्रक्रिया के किसी बिंदु पर, स्रोत कोड को कंक्रीट सिंटैक्स ट्री के रूप में मेमोरी में प्रदर्शित किया जाएगा, फिर एक सार सिंटैक्स ट्री में बदल दिया जाएगा। एएसटी ट्रांसफ़ॉर्मेशन का उद्देश्य डेवलपर्स को एएसटी को संशोधित करने में सक्षम होने के लिए संकलन प्रक्रिया में हुक करने देना है, जो कि जेवीएम द्वारा चलाए जाने वाले बायटेकोड में बदल जाएगा। एएसटी ट्रांसफॉर्मेशन ग्रूवी को बेहतर संकलन-समय मेटाप्रोग्रामिंग क्षमताओं के साथ प्रदान करता है, जिससे रनटाइम प्रदर्शन दंड के बिना भाषा स्तर पर शक्तिशाली लचीलेपन की अनुमति मिलती है।<ref>{{cite web |url=http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations |title=संकलन-समय मेटाप्रोग्रामिंग - एएसटी परिवर्तन|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121014094900/http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations |archive-date=2012-10-14 |url-status=dead }}</ref>
ग्रूवी के स्वयं के प्रलेखन के अनुसार, जब ग्रूवी कंपाइलर ग्रूवी स्क्रिप्ट और कक्षाओं को संकलित करता है, तो प्रक्रिया के किसी बिंदु पर, स्रोत कोड को कंक्रीट सिंटैक्स ट्री के रूप में मेमोरी में प्रदर्शित किया जाएगा, फिर एक सार सिंटैक्स ट्री में बदल दिया जाएगा। एएसटी ट्रांसफ़ॉर्मेशन का उद्देश्य डेवलपर्स को एएसटी को संशोधित करने में सक्षम होने के लिए संकलन प्रक्रिया में हुक करने देना है, जो कि जेवीएम द्वारा चलाए जाने वाले बायटेकोड में बदल जाएगा। एएसटी ट्रांसफॉर्मेशन ग्रूवी को बेहतर संकलन-समय मेटाप्रोग्रामिंग क्षमताओं के साथ प्रदान करता है, जिससे रनटाइम प्रदर्शन दंड के बिना लैंग्वेज स्तर पर शक्तिशाली लचीलेपन की अनुमति मिलती है।<ref>{{cite web |url=http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations |title=संकलन-समय मेटाप्रोग्रामिंग - एएसटी परिवर्तन|access-date=2012-10-07 |archive-url=https://web.archive.org/web/20121014094900/http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations |archive-date=2012-10-14 |url-status=dead }}</ref>


ग्रूवी में एएसटी के उदाहरण हैं,
ग्रूवी में एएसटी के उदाहरण हैं,
Line 321: Line 311:


=== विशेषताएँ ===
=== विशेषताएँ ===
ग्रूवी के प्रलेखन के अनुसार, [[विशेषता (कंप्यूटर प्रोग्रामिंग)|विशेषता]]  भाषा का एक संरचनात्मक निर्माण है जो अनुमति देता है व्यवहारों की संरचना, अंतरापृष्ठ के कार्यावधि कार्यान्वयन, व्यवहार अध्यारोही, और स्थिर प्रकार की जांच/संकलन के साथ संगतता।
ग्रूवी के प्रलेखन के अनुसार, [[विशेषता (कंप्यूटर प्रोग्रामिंग)|विशेषता]]  लैंग्वेज का एक संरचनात्मक निर्माण है जो अनुमति देता है व्यवहारों की संरचना, अंतरापृष्ठ के कार्यावधि कार्यान्वयन, व्यवहार अध्यारोही, और स्थिर प्रकार की जांच/संकलन के साथ संगतता।


लक्षणों को व्यतिक्रम कार्यान्वयन और स्थिति दोनों को ले जाने वाले [[इंटरफेस|अंतरापृष्ठ]] के रूप में देखा जा सकता है। विशेषता कीवर्ड का उपयोग करके एक विशेषता को परिभाषित किया गया है,
लक्षणों को व्यतिक्रम कार्यान्वयन और स्थिति दोनों को ले जाने वाले [[इंटरफेस|अंतरापृष्ठ]] के रूप में देखा जा सकता है। विशेषता कीवर्ड का उपयोग करके एक विशेषता को परिभाषित किया गया है,
Line 334: Line 324:


== अभिग्रहण ==
== अभिग्रहण ==
ग्रूवी अभिग्रहण के उल्लेखनीय उदाहरणों में शामिल हैं,
ग्रूवी अभिग्रहण के उल्लेखनीय उदाहरणों में सम्मिलित हैं,
* एडैप्टाविस्ट स्क्रिप्टरनर, दुनिया भर के 20000 से अधिक संगठनों द्वारा उपयोग किए जाने वाले [[एटलसियन]] टूल्स को स्वचालित और विस्तारित करने के लिए ग्रूवी कार्यान्वयन को एम्बेड करता है।<ref>{{Cite web| title= स्क्रिप्टरनर दस्तावेज़ीकरण| url=https://scriptrunner.adaptavist.com/latest/index.html}}</ref><ref>{{Cite web|title=गोद लेने के आंकड़ों के साथ स्क्रिप्टरनर प्रेस विज्ञप्ति|url=http://www.adaptavist.com/blog/adaptavist-completes-another-acquisition-against-a-backdrop-of-explosive-global-growth/}}</ref>
* एडैप्टाविस्ट स्क्रिप्टरनर, दुनिया भर के 20000 से अधिक संगठनों द्वारा उपयोग किए जाने वाले [[एटलसियन]] टूल्स को स्वचालित और विस्तारित करने के लिए ग्रूवी कार्यान्वयन को एम्बेड करता है।<ref>{{Cite web| title= स्क्रिप्टरनर दस्तावेज़ीकरण| url=https://scriptrunner.adaptavist.com/latest/index.html}}</ref><ref>{{Cite web|title=गोद लेने के आंकड़ों के साथ स्क्रिप्टरनर प्रेस विज्ञप्ति|url=http://www.adaptavist.com/blog/adaptavist-completes-another-acquisition-against-a-backdrop-of-explosive-global-growth/}}</ref>
* [[Apache OFBiz]], [[खुला स्रोत सॉफ्टवेयर|खुला स्रोत]] [[उद्यम संसाधन योजना]] (ईआरपी) प्रणाली, ग्रूवी का उपयोग करता है।<ref>{{cite web|title=OFBiz व्यापार तर्क के लिए Groovy DSL|url=https://cwiki.apache.org/confluence/display/OFBIZ/Groovy+DSL+for+OFBiz+business+logic|website=Apache OFBiz Project Open Wiki}}</ref><ref>{{cite web|title=ग्रोवी का उपयोग करके सरल-तरीके उदाहरण|url=https://cwiki.apache.org/confluence/display/OFBIZ/Simple-methods+examples+using+Groovy|website=Apache OFBiz Project Open Wiki}}</ref>
* [[Apache OFBiz|अपाचे OFBiz]], [[खुला स्रोत सॉफ्टवेयर|खुला स्रोत]] [[उद्यम संसाधन योजना]] (ईआरपी) प्रणाली, ग्रूवी का उपयोग करता है।<ref>{{cite web|title=OFBiz व्यापार तर्क के लिए Groovy DSL|url=https://cwiki.apache.org/confluence/display/OFBIZ/Groovy+DSL+for+OFBiz+business+logic|website=Apache OFBiz Project Open Wiki}}</ref><ref>{{cite web|title=ग्रोवी का उपयोग करके सरल-तरीके उदाहरण|url=https://cwiki.apache.org/confluence/display/OFBIZ/Simple-methods+examples+using+Groovy|website=Apache OFBiz Project Open Wiki}}</ref>
* [[नीलगिरी (सॉफ्टवेयर)|नीलगिरी]] , एक क्लाउड प्रबंधन प्रणाली, ग्रूवी की एक महत्वपूर्ण मात्रा का उपयोग करती है।
* [[नीलगिरी (सॉफ्टवेयर)|नीलगिरी]] , एक क्लाउड प्रबंधन प्रणाली, ग्रूवी की एक महत्वपूर्ण मात्रा का उपयोग करती है।
* [[ग्रेडल]] ग्रूवी का उपयोग करके एक लोकप्रिय बिल्ड ऑटोमेशन टूल है।
* [[ग्रेडल]] ग्रूवी का उपयोग करके एक लोकप्रिय बिल्ड ऑटोमेशन टूल है।
* [[लिंक्डइन]] अपने कुछ उप-प्रणालियों के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = लिंक्डइन पर Grails|url= http://blog.linkedin.com/2008/06/11/grails-at-linkedin/|access-date= 2015-06-02}}</ref>
* [[लिंक्डइन]] अपने कुछ उप-प्रणालियों के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = लिंक्डइन पर Grails|url= http://blog.linkedin.com/2008/06/11/grails-at-linkedin/|access-date= 2015-06-02}}</ref>
* लॉजिकमॉनिटर, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में ग्रूवी का उपयोग करता है।<ref>{{cite web |url=https://www.logicmonitor.com/support/terminology-syntax/scripting-support/embedded-groovy-scripting |title= एंबेडेड ग्रूवी स्क्रिप्टिंग|access-date=2020-11-20 |website=www.logicmonitor.com }}</ref>
* लॉजिकमॉनिटर, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में ग्रूवी का उपयोग करता है।<ref>{{cite web |url=https://www.logicmonitor.com/support/terminology-syntax/scripting-support/embedded-groovy-scripting |title= एंबेडेड ग्रूवी स्क्रिप्टिंग|access-date=2020-11-20 |website=www.logicmonitor.com }}</ref>
* जेनकिंस, निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन शामिल है जो ग्रूवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।<ref>{{Cite web|url=https://jenkins.io/doc/book/pipeline/overview/|title=जेनकींस पाइपलाइन}}</ref>
* जेनकिंस, निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन सम्मिलित है जो ग्रूवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।<ref>{{Cite web|url=https://jenkins.io/doc/book/pipeline/overview/|title=जेनकींस पाइपलाइन}}</ref>
*लिफ़ेरे,उनके कलियो कार्य प्रगति में ग्रूवी का उपयोग करता है
*लिफ़ेरे,उनके कलियो कार्य प्रगति में ग्रूवी का उपयोग करता है
* बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए Sky.com ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = ग्रीम रोचर का ब्लॉग: Sky.com Grails में लिखा हुआ फिर से लॉन्च किया गया|url= http://graemerocher.blogspot.com.br/2008/10/skycom-relaunches-written-in-grails.html|website= Graeme Rocher's Blog|date= October 2, 2008|access-date= 2015-06-02|first= Graeme|last= Rocher}}</ref>
* बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए Sky.com ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = ग्रीम रोचर का ब्लॉग: Sky.com Grails में लिखा हुआ फिर से लॉन्च किया गया|url= http://graemerocher.blogspot.com.br/2008/10/skycom-relaunches-written-in-grails.html|website= Graeme Rocher's Blog|date= October 2, 2008|access-date= 2015-06-02|first= Graeme|last= Rocher}}</ref>
* [[SmartThings]], [[स्मार्ट घर|स्मार्ट घरों]] और उपभोक्ता [[चीजों की इंटरनेट]] के लिए एक खुला मंच, ग्रूवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है<ref>[https://iotsecurity.eecs.umich.edu/img/Paper27_CameraReady_SmartThings_Revised_IEEEGen.pdf Security Analysis of Emerging Smart Home Applications]</ref>
* [[SmartThings|स्मार्ट थिंग्स]], [[स्मार्ट घर|स्मार्ट घरों]] और उपभोक्ता [[चीजों की इंटरनेट]] के लिए एक खुला मंच, ग्रूवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है<ref>[https://iotsecurity.eecs.umich.edu/img/Paper27_CameraReady_SmartThings_Revised_IEEEGen.pdf Security Analysis of Emerging Smart Home Applications]</ref>
* सोपूआई ग्रूवी को वेबसर्विस परीक्षण विकास के लिए एक भाषा के रूप में प्रदान करता है।<ref>{{Cite web|title = स्क्रिप्टिंग और स्क्रिप्ट लाइब्रेरी {{!}} स्क्रिप्टिंग और गुण|url= http://www.soapui.org/Scripting-Properties/scripting-and-the-script-library.html|website= www.soapui.org|access-date= 2015-06-02}}</ref>
* सोपूआई ग्रूवी को वेबसर्विस परीक्षण विकास के लिए एक लैंग्वेज के रूप में प्रदान करता है।<ref>{{Cite web|title = स्क्रिप्टिंग और स्क्रिप्ट लाइब्रेरी {{!}} स्क्रिप्टिंग और गुण|url= http://www.soapui.org/Scripting-Properties/scripting-and-the-script-library.html|website= www.soapui.org|access-date= 2015-06-02}}</ref>
* [[सुरवता]], एक बाजार अनुसंधान उद्घाटन,, ग्रूवी और ग्रेल्स का उपयोग करता है।{{citation needed|date=June 2016}}
* [[सुरवता]], एक बाजार अनुसंधान उद्घाटन,, ग्रूवी और ग्रेल्स का उपयोग करता है।{{citation needed|date=June 2016}}
* यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक [[डेटाफ्लो प्रोग्रामिंग|डेटा प्रवाह कार्यरचना]] भाषा विकसित की।{{citation needed|date=May 2012}}
* यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक [[डेटाफ्लो प्रोग्रामिंग|डेटा प्रवाह कार्यरचना]] लैंग्वेज विकसित की।{{citation needed|date=May 2012}}
* हालांकि ग्रूवी को किसी भी जेवीएम वातावरण में एकीकृत किया जा सकता है, JBoss सीम फ्रेमवर्क ग्रूवी को जावा के अलावा, एक विकास भाषा के रूप में, बॉक्स से बाहर प्रदान करता है।<ref>{{Cite web|title = अध्याय 11. ग्रूवी एकीकरण|url= http://docs.jboss.org/seam/2.0.2.GA/reference/en-US/html/groovy.html|website= docs.jboss.org|access-date= 2015-06-02}}</ref>
* हालांकि ग्रूवी को किसी भी जेवीएम वातावरण में एकीकृत किया जा सकता है, JBoss सीम फ्रेमवर्क ग्रूवी को जावा के अलावा, एक विकास लैंग्वेज के रूप में, बॉक्स से बाहर प्रदान करता है।<ref>{{Cite web|title = अध्याय 11. ग्रूवी एकीकरण|url= http://docs.jboss.org/seam/2.0.2.GA/reference/en-US/html/groovy.html|website= docs.jboss.org|access-date= 2015-06-02}}</ref>
* vCalc.com अपने गणित क्राउड-सोर्सिंग इंजन में सभी उपयोगकर्ता परिभाषित गणित के लिए ग्रूवी का उपयोग करता है।<ref>{{Cite web|url= http://www.anu.ac.ke/1403/vcalc-the-first-ever-social-platform-for-the-world-of-math/|title = vCalc, गणित की दुनिया के लिए अब तक का पहला सामाजिक मंच|date = 4 November 2014|access-date= 2016-05-05}}</ref>
* vCalc.com अपने गणित क्राउड-सोर्सिंग इंजन में सभी उपयोगकर्ता परिभाषित गणित के लिए ग्रूवी का उपयोग करता है।<ref>{{Cite web|url= http://www.anu.ac.ke/1403/vcalc-the-first-ever-social-platform-for-the-world-of-math/|title = vCalc, गणित की दुनिया के लिए अब तक का पहला सामाजिक मंच|date = 4 November 2014|access-date= 2016-05-05}}</ref>
* Wired.com वेबसाइट के उत्पाद समीक्षा स्टैंडअलोन अनुभाग के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = वायर्ड.कॉम|url= http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_Wired_USLET_EN.pdf|website= www.springsource.org|access-date= 2015-06-02}}</ref>
* Wired.com वेबसाइट के उत्पाद समीक्षा स्टैंडअलोन अनुभाग के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।<ref>{{Cite web|title = वायर्ड.कॉम|url= http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_Wired_USLET_EN.pdf|website= www.springsource.org|access-date= 2015-06-02}}</ref>
* [[XWiki]] SAS अपने सहयोगी खुला स्त्रोत उत्पाद में ग्रूवी को स्क्रिप्टिंग भाषा के रूप में उपयोग करता है।<ref>{{Cite web|title = आपका देश|url= http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_XWiki.pdf|website= www.springsource.org|access-date= 2015-06-02}}</ref>
* [[XWiki]] SAS अपने सहयोगी खुला स्त्रोत उत्पाद में ग्रूवी को स्क्रिप्टिंग लैंग्वेज के रूप में उपयोग करता है।<ref>{{Cite web|title = आपका देश|url= http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_XWiki.pdf|website= www.springsource.org|access-date= 2015-06-02}}</ref>
== आईडीई समर्थन ==
== आईडीई समर्थन ==
कई [[एकीकृत विकास वातावरण]] (आईडीई) और [[पाठ संपादक]] ग्रूवी का समर्थन करते हैं,
कई [[एकीकृत विकास वातावरण]] (आईडीई) और [[पाठ संपादक]] ग्रूवी का समर्थन करते हैं,
Line 359: Line 349:
* [[ग्रहण (सॉफ्टवेयर)|ग्रहण]] , ग्रूवी-ग्रहण के माध्यम से
* [[ग्रहण (सॉफ्टवेयर)|ग्रहण]] , ग्रूवी-ग्रहण के माध्यम से
* [[Emacs|ईमैकस]], ग्रूवी-ईमैकस-मोड प्रक्षेपण के ग्रूवी-मोड का उपयोग करते हुए।
* [[Emacs|ईमैकस]], ग्रूवी-ईमैकस-मोड प्रक्षेपण के ग्रूवी-मोड का उपयोग करते हुए।
* [[IntelliJ IDEA]], सामुदायिक संस्करण, ग्रेल्स/Griffon केवल अल्टीमेट एडिशन में
* [[IntelliJ IDEA|इंटेलीज आइडिया]], सामुदायिक संस्करण, ग्रेल्स/ग्रिफ्फॉन केवल अल्टीमेट एडिशन में
* [[JDeveloper]], [[Oracle ADF]] के साथ प्रयोग के लिए
* [[JDeveloper]], [[Oracle ADF|ओरेकल एडीएफ]] के साथ प्रयोग के लिए
* [[jEdit]], जावा प्लेटफॉर्म के लिए एक उन्नत पाठ संपादक
* [[jEdit]], जावा प्लेटफॉर्म के लिए एक उन्नत पाठ संपादक
* [[केडीई]] के लिए एक उन्नत पाठ संपादक [[केट]] ग्रूवी और 200 से अधिक अन्य फ़ाइल स्वरूपों का समर्थन करता है
* [[केडीई]] के लिए एक उन्नत पाठ संपादक [[केट]] ग्रूवी और 200 से अधिक अन्य फ़ाइल स्वरूपों का समर्थन करता है
* [[NetBeans]], संस्करण 6.5 के बाद से
* [[NetBeans|नेटबीन्स]], संस्करण 6.5 के बाद से
* [[नोटपैड++]] ++, [[माइक्रोसॉफ़्ट विंडोज़]] के लिए एक उन्नत पाठ संपादक
* [[नोटपैड++]] ++, [[माइक्रोसॉफ़्ट विंडोज़]] के लिए एक उन्नत पाठ संपादक
* [[उदात्त पाठ]], एक संकरीकरण प्लेटफॉर्म पाठ संपादक
* [[उदात्त पाठ]], एक संकरीकरण प्लेटफॉर्म पाठ संपादक
Line 396: Line 386:
* {{cite book |first= Venkat |last= Subramaniam |title= प्रोग्रामिंग ग्रोवी: जावा डेवलपर के लिए गतिशील उत्पादकता|isbn= 978-1-934356-09-8 |url= https://archive.org/details/programminggroov0000subr |year= 2008 }}
* {{cite book |first= Venkat |last= Subramaniam |title= प्रोग्रामिंग ग्रोवी: जावा डेवलपर के लिए गतिशील उत्पादकता|isbn= 978-1-934356-09-8 |url= https://archive.org/details/programminggroov0000subr |year= 2008 }}
{{Refend}}
{{Refend}}
==इस पेज में लापता आंतरिक लिंक की सूची==
*अनुमान टाइप करें
*छोटी बात
*जेम्स Strachan (प्रोग्रामर)
*प्रोग्रामिंग मुहावरा
*साहचर्य सरणी
*पाठ के प्रस्तुतिकरण के लिए प्रयुक्त भाषा
*पहलू आधारित प्रोग्रामिंग
*आंशिक आवेदन
*अचल स्थिति
*जेनकींस (सॉफ्टवेयर)
*लगातार मेल जोल
*सोपयूआई
*केट (पाठ संपादक)
*Android (ऑपरेटिंग सिस्टम)
*समन्वित विकास पर्यावरण
*ग्रिफ़ॉन (ढांचा)
==बाहरी संबंध==
==बाहरी संबंध==
* {{Official website}}
* {{Curlie|Computers/Programming/Languages/Java/Extensions/Groovy|Groovy}}
* {{Curlie|Computers/Programming/Languages/Java/Extensions/Groovy|Groovy}}


{{Apache Software Foundation}}
{{Programming languages}}
{{Java (Sun)}}
{{Authority control}}
{{Authority control}}
[[Category: उदाहरण कोड वाले लेख]]
[[Category:Machine Translated Page]]
[[Category: गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएं]]
[[Category: जावा प्रोग्रामिंग भाषा परिवार]]
[[Category: जावा विशिष्टता अनुरोध]]
[[Category:जेवीएम प्रोग्रामिंग भाषाएं]]
[[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएं]]
[[Category: 2003 में बनाई गई प्रोग्रामिंग भाषा]]
[[Category: स्क्रिप्टिंग भाषाएं]]
[[Category:अपाचे लाइसेंस का प्रयोग करने वाला सॉफ्टवेयर]]
[[Category: प्रोग्रामिंग भाषाएं]]
[[Category: गतिशील प्रोग्रामिंग भाषाएं]]
[[Category: 2003 सॉफ्टवेयर]]
[[Category:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर]]
[[Category:क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]]
[[Category:उच्च स्तरीय प्रोग्रामिंग भाषाएं]]
 


[[Category: Machine Translated Page]]
[[Category:2003 में बनाई गई प्रोग्रामिंग भाषा]]
[[Category:Created On 30/11/2022]]
[[Category:2003 सॉफ्टवेयर]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with Curlie links]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with short description]]
[[Category:Articles with unsourced statements from June 2016]]
[[Category:Articles with unsourced statements from May 2012]]
[[Category:Articles with unsourced statements from November 2008]]
[[Category:CS1 français-language sources (fr)]]
[[Category:CS1 maint]]
[[Category:CS1 Ελληνικά-language sources (el)]]
[[Category:Citation Style 1 templates|W]]
[[Category:Collapse templates]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with empty portal template]]
[[Category:Pages with reference errors]]
[[Category:Pages with script errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite web]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates used by AutoWikiBrowser|Cite web]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite web]]
[[Category:Wikipedia metatemplates]]

Latest revision as of 13:03, 16 October 2023

ग्रूवी
Groovy-logo.svg
Groovy Logo
ParadigmMulti-paradigm: object-oriented, imperative, functional, aspect-oriented, scripting
द्वारा डिज़ाइन किया गयाजेम्स स्ट्रेचन
DeveloperGuillaume Laforge (PMC Chair)
Jochen Theodorou (Tech Lead)
Paul King
Cedric Champeau
पहली प्रस्तुति2003; 21 years ago (2003)
Preview release
4.0.0-beta-1 / September 6, 2021; 3 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 में, ग्रूवी को, जेसीपी को जेएसआर 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 प्रकशित होने से एक साल पहले स्ट्रेचन ने इस परियोजना को चुपचाप छोड़ दिया था। अक्टूबर 2016 में, स्ट्रेचन ने कहा "मुझे अभी भी ग्रूवी पसंद है (जेनकींस पाइपलाइन बहुत ग्रूवी हैं!), जावा, गो, टाइपस्क्रिप्ट और कोटलिन है।[13]

2 जुलाई 2012 को, ग्रूवी 2.0 प्रकशित किया गया था, जिसमें अन्य नई सुविधाओं के साथ, स्थिर संकलन और स्थिर प्रकार की जाँच सम्मिलित थी।

जब अप्रैल 2013 में ईएमसी संस्था (ईएमसी) और वीएमवेयर द्वारा निर्णायक सॉफ्टवेयर संयुक्त उद्यम को अलग कर दिया गया, तो ग्रूवी और ग्रेल्स ने इसके उत्पाद पोर्टफोलियो का हिस्सा बना लिया। निर्णायक ने अप्रैल 2015 से ग्रूवी और ग्रेल्स को प्रायोजित करना बंद कर दिया।[5] उसी महीने, ग्रूवी ने अपने ऊष्मायित्र के माध्यम से अपाचे सॉफ्टवेयर संस्था में कोडहॉस संग्रहालय से परियोजना प्रबंधन समिति (पीएमसी) में अपनी शासन संरचना को बदल दिया।[6] ग्रूवी ने अपाचे के ऊष्मायित्र से स्नातक किया और नवंबर 2015 में एक शीर्ष-स्तरीय परियोजना बन गई।[14]

विशेषताएं

अधिकांश मान्य जावा फ़ाइलें भी मान्य ग्रूवी फ़ाइलें हैं। हालाँकि दो भाषाएँ समान हैं, ग्रूवी कोड अधिक संक्षिप्त हो सकता है, क्योंकि इसमें उन सभी अवयवो की आवश्यकता नहीं होती है जिनकी जावा को आवश्यकता होती है।[15] यह जावा प्रोग्रामर्स के लिए ग्रूवी कार्यरचना मुहावरों को प्राप्त करने से पहले परिचित जावा रचनाक्रम के साथ धीरे-धीरे ग्रूवी सीखना संभव बनाता है।[16]

जावा में उपलब्ध ग्रूवी सुविधाओं में स्थिर और गतिशील टाइपिंग (कीवर्ड def के साथ) दोनों सम्मिलित हैं, संचालक ओवरलोडिंग, सूचियों और साहचर्य सरणियों (मानचित्रों) के लिए मूल समर्थन, नियमित अभिव्यक्तियों के लिए मूल समर्थन, बहुरूपी पुनरावृत्ति, स्ट्रिंग प्रक्षेप, अतिरिक्त सहायक तरीके और सुरक्षित नेविगेशन ऑपरेटर ?. अशक्त संकेत के लिए स्वचालित रूप से जाँच करने के लिए (उदाहरण के लिए, variable?.method(), या variable?.field) ये सभी सम्मिलित है।[17]

चूंकि संस्करण 2 ग्रूवी प्रतिरुपकता का भी समर्थन करता है (प्रोजेक्ट की जरूरतों के अनुसार केवल आवश्यक जार को शिप करने में सक्षम होने के कारण, इस प्रकार ग्रूवी की लाइब्रेरी के आकार को कम करता है), टाइप चेकिंग, स्टैटिक कंपाइलिंग, प्रोजेक्ट कॉइन सिंटैक्स एन्हांसमेंट, मल्टीकैच ब्लॉक और चल रहे प्रदर्शन संवर्द्धन का उपयोग कर invokedynamic निर्देश जावा संस्करण के इतिहास में पेश किया गया।[18]

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

जावा के विपरीत, एक ग्रूवी स्रोत कोड फ़ाइल को एक (असंकलित) स्क्रिप्ट के रूप में निष्पादित किया जा सकता है, अगर इसमें किसी भी वर्ग परिभाषा के बाहर कोड होता है, यदि यह मुख्य विधि वाला वर्ग है, या यदि यह रननेबल या ग्रूवीटेस्टकेस है। एक ग्रूवी स्क्रिप्ट पूरी तरह से पार्स, संकलित और निष्पादित करने से पहले उत्पन्न होती है (पायथन और रूबी के समान)। यह हुड के नीचे होता है, और संकलित संस्करण को प्रक्रिया के आर्टिफैक्ट के रूप में सहेजा नहीं जाता है।[19]

ग्रूवीबीन्स, गुण

ग्रूवीबीन्स जावाबीन्स का ग्रूवी का संस्करण है। ग्रूवी निहित रूप से ग्राही और सुरेखक उत्पन्न करता है। निम्नलिखित कोड में, सेटकोलर (स्ट्रिंग कलर) तथा गेटकलर() निहित रूप से उत्पन्न होते हैं। अंतिम दो पंक्तियाँ, जो सीधे रंग तक पहुँचती दिखाई देती हैं, वास्तव में निहित रूप से उत्पन्न विधियों को आमंत्रण कर रही हैं।[20]

class AGroovyBean {
  String color
}

def myGroovyBean = new AGroovyBean()

myGroovyBean.setColor('baby blue')
assert myGroovyBean.getColor() == 'baby blue'

myGroovyBean.color = 'pewter'
assert myGroovyBean.color == 'pewter'

ग्रूवी सूची और मानचित्रों को संभालने के लिए सरल, सुसंगत सिंटैक्स प्रदान करता है, जो जावा के सरणी सिंटैक्स की याद दिलाता है।[21]

def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai']  // Looks like an array, but is a list
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca'  // Adds an element to the list
assert movieList.size() == 4

def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ]  // Declares a map
assert monthMap['March'] == 31  // Accesses an entry
monthMap['April'] = 30  // Adds an entry to the map
assert monthMap.size() == 4







आदिप्ररूप विस्तारण

ग्रूवी ExpandoMetaClass, विस्तारण मापांक (केवल ग्रूवी 2 में), ऑब्जेक्टिव-सी-जैसे श्रेणियाँ और DelegatingMetaClass के माध्यम से आदिप्ररूप विस्तारण के लिए समर्थन प्रदान करता हैै।[22]

ExpandoMetaClass रूबी के की ओपन क्लास अवधारणा के समान ,कक्षा में परिवर्तनों को आसानी से व्यक्त करने के लिए एक डोमेन-विशिष्ट लैंग्वेज (डीएसएल) प्रदान करता है,

Number.metaClass {
  sqrt = { Math.sqrt(delegate) }
}

assert 9.sqrt() == 3
assert 4.sqrt() == 2

प्रोटोटाइप के माध्यम से कोड में ग्रूवी के परिवर्तन जावा में दिखाई नहीं दे रहे हैं, क्योंकि ग्रूवी में प्रत्येक विशेषता/विधि आमंत्रण मेटाक्लास रजिस्ट्री के माध्यम से जाता है। परिवर्तित कोड को केवल जावा से मेटाक्लास रजिस्ट्री में जाकर एक्सेस किया जा सकता है।

ग्रूवी दूसरों के बीच getProperty(), propertyMissing() के रूप में ओवरराइडिंग विधियों की भी अनुमति देता है, जिससे डेवलपर को किसी ऑब्जेक्ट पर कॉल को इंटरसेप्ट करने और सरलीकृत पहलू-उन्मुख तरीके से उनके लिए एक क्रिया निर्दिष्ट करने में सक्षम बनाता है। निम्नलिखित कोड वर्ग java.lang.Stringको hex संपत्ति का जवाब देने में सक्षम बनाता है,

enum Color {
  BLACK('#000000'), WHITE('#FFFFFF'), RED('#FF0000'), BLUE('#0000FF')
  String hex
  Color(String hex) { 
    this.hex = hex 
  }
}

String.metaClass.getProperty = { String property ->
  def stringColor = delegate
  if (property == 'hex') {
    Color.values().find { it.name().equalsIgnoreCase stringColor }?.hex
  }
}

assert "WHITE".hex == "#FFFFFF"
assert "BLUE".hex == "#0000FF"
assert "BLACK".hex == "#000000"
assert "GREEN".hex == null

ग्रेल्स फ्रेमवर्क जीओआरएम् गतिशील खोजकर्ताओं को सक्षम करने के लिए बड़े पैमाने पर मेटाप्रोग्रामिंग का उपयोग करता है , जैसे User.findByName('Josh') और अन्य है।[23]







बिंदु और कोष्ठक

ग्रूवी का रचनाक्रम कुछ स्थितियों में कोष्ठकों और बिंदुओं को छोड़ने की अनुमति देता है। निम्नलिखित ग्रूवी कोड

take(coffee).with(sugar, milk).and(liquor)
 

डोमेन-विशिष्ट भाषाओं (डीएसएल) के विकास को सक्षम करने वाले

take coffee with sugar, milk and liquor

के रूप में लिखा जा सकता है जो सादे अंग्रेजी की तरह दिखते हैं।

कार्यात्मक प्रोग्रामिंग

हालाँकि ग्रूवी ज्यादातर एक वस्तु-उन्मुख लैंग्वेज है, यह कार्यात्मक प्रोग्रामिंग सुविधाएँ भी प्रदान करती है।

संवरण

ग्रूवी के दस्तावेज़ीकरण के मुताबिक, ग्रूवी में संवरण एक 'विधि सूचक' के समान काम करता है, जिससे कोड को बाद के समय में लिखा और चलाया जा सकता है।[24] ग्रूवी के संवरण मुक्त चर का समर्थन करते हैं, यानी वे चर जिन्हें स्पष्ट रूप से मापदण्ड के रूप में पारित नहीं किया गया है, लेकिन इसके घोषणा संदर्भ में, आंशिक अनुप्रयोग (यह 'करी' शब्द है)[25]), प्रतिनिधिमंडल, अंतर्निहित, टाइप किए गए और अनटाइप किए गए पैरामीटर उपस्थित है।

एक निर्धारित प्रकार के संग्रह पर काम करते समय, संग्रह पर एक संचालन को बंद करने का अनुमान लगाया जा सकता है,

list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

/* 
 * Non-zero numbers are coerced to true, so when it % 2 == 0 (even), it is false.
 * The type of the implicit "it" parameter can be inferred as an Integer by the IDE.
 * It could also be written as:
 * list.findAll { Integer i -> i % 2 }
 * list.findAll { i -> i % 2 }
 */
def odds = list.findAll { it % 2 }

assert odds == [1, 3, 5, 7, 9]

अभिव्यक्तियों के एक समूह को कार्यान्वयन के संदर्भ के बिना संवरण ब्लॉक में लिखा जा सकता है और प्रतिसाद देने वाली वस्तु को प्रतिनिधिमंडल का उपयोग करके बाद के बिंदु पर नियुक्त किया जा सकता है,

// This block of code contains expressions without reference to an implementation
def operations = {
  declare 5
  sum 4
  divide 3
  print
}
/* 
 * This class will handle the operations that can be used in the closure above. Another class
 * could be declared having the same methods, but using, for example, webservice operations
 * in the calculations.
 */
class Expression {
  BigDecimal value

  /* 
   * Though an Integer is passed as a parameter, it is coerced into a BigDecimal, as was 
   * defined. If the class had a 'declare(Integer value)' method, it would be used instead.
   */
  def declare(BigDecimal value) {
    this.value = value
  }
  
  def sum(BigDecimal valueToAdd) {
    this.value += valueToAdd
  }
  
  def divide(BigDecimal divisor) {
    this.value /= divisor
  }
  
  def propertyMissing(String property) {
    if (property == "print") println value
  }
}
// Here is defined who is going to respond the expressions in the block of code above.
operations.delegate = new Expression()
operations()

करी

आमतौर पर आंशिक आवेदन कहा जाता है,[25] यह ग्रूवी फीचर संवरण के मापदंडों को उनके किसी भी तर्क में व्यतिक्रम मापदंडों पर सेट करने की अनुमति देता है, जिससे बाउंड वैल्यू के साथ एक नया संवरण बनता है।curry() विधि में एक तर्क देने से तर्क एक ठीक हो जाएगा। N तर्क देने से तर्क 1 ठीक हो जाएगा ... N।

def joinTwoWordsWithSymbol = { symbol, first, second -> first + symbol + second }
assert joinTwoWordsWithSymbol('#', 'Hello', 'World') == 'Hello#World'

def concatWords = joinTwoWordsWithSymbol.curry(' ')
assert concatWords('Hello', 'World') == 'Hello World'

def prependHello = concatWords.curry('Hello')
//def prependHello = joinTwoWordsWithSymbol.curry(' ', 'Hello')
assert prependHello('World') == 'Hello World'

करी का उपयोग curry () का उपयोग करके विपरीत दिशा (अंतिम N तर्कों को ठीक करते हुए) में भी किया जा सकता है।

def power = { BigDecimal value, BigDecimal power ->
  value**power
}

def square = power.rcurry(2)
def cube = power.rcurry(3)

assert power(2, 2) == 4
assert square(4) == 16
assert cube(3) == 27

ग्रूवी दूसरों के बीच अनुयोगी मूल्यांकन[26][27] ,कम/गुना,[28] अनंत संरचना और अपरिवर्तनीयता[29] का भी समर्थन करता है।[30]

JSON और XML प्रसंस्करण

जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) और XML प्रसंस्करण पर, ग्रूवी बिल्डर पैटर्न को नियोजित करता है, जिससे डेटा संरचना का उत्पादन कम वर्बोज़ हो जाता है। उदाहरण के लिए, निम्नलिखित एक्सएमएल,

<languages>
  <language year="1995">
    <name>Java</name>
    <paradigm>object oriented</paradigm>
    <typing>static</typing>
  </language>
  <language year="1995">
    <name>Ruby</name>
    <paradigm>functional, object oriented</paradigm>
    <typing>duck typing, dynamic</typing>
  </language>
  <language year="2003">
    <name>Groovy</name>
    <paradigm>functional, object oriented</paradigm>
    <typing>duck typing, dynamic, static</typing>
  </language>
</languages>

निम्नलिखित ग्रूवी कोड के माध्यम से उत्पन्न किया जा सकता है,

def writer = new StringWriter()
def builder = new groovy.xml.MarkupBuilder(writer)
builder.languages {
  language(year: 1995) {
    name "Java"
    paradigm "object oriented"
    typing "static"
  }
  language (year: 1995) {
    name "Ruby"
    paradigm "functional, object oriented"
    typing "duck typing, dynamic"
  }
  language (year: 2003) {
    name "Groovy"
    paradigm "functional, object oriented"
    typing "duck typing, dynamic, static"
  }
}

और स्ट्रीमिंगमार्कअपबिल्डर के माध्यम से स्ट्रीमिंग तरीके से भी संसाधित किया जा सकता है। जेएसओएन में कार्यान्वयन को बदलने के लिए, मार्कअपबिल्डर को जेसनबिल्डर में बदल दिया जा सकता है।[31]

def languages = new XmlSlurper().parseText writer.toString()

// Here is employed Groovy's regex syntax for a matcher (=~) that will be coerced to a 
// boolean value: either true, if the value contains our string, or false otherwise.
def functional = languages.language.findAll { it.paradigm =~ "functional" }
assert functional.collect { it.name } == ["Groovy", "Ruby"]

स्ट्रिंग प्रक्षेप

ग्रूवी में, Gस्ट्रिंग का उपयोग करके स्ट्रिंग्स को वेरिएबल्स और एक्सप्रेशंस के साथ इंटरपोलेट किया जा सकता है[32]

BigDecimal account = 10.0
def text = "The account shows currently a balance of $account"
assert text == "The account shows currently a balance of 10.0"

वेरिएबल्स और एक्सप्रेशन वाले Gस्ट्रिंग को दोहरे उद्धरण चिह्नों का उपयोग करके घोषित किया जाना चाहिए।

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

BigDecimal minus = 4.0
text = "The account shows currently a balance of ${account - minus}"
assert text == "The account shows currently a balance of 6.0"

// Without the brackets to isolate the expression, this would result:
text = "The account shows currently a balance of $account - minus"
assert text == "The account shows currently a balance of 10.0 - minus"

एरो सिंटैक्स को नियोजित करके अभिव्यक्ति मूल्यांकन को स्थगित किया जा सकता है,

BigDecimal tax = 0.15
text = "The account shows currently a balance of ${->account - account*tax}"
tax = 0.10

// The tax value was changed AFTER declaration of the GString. The expression 
// variables are bound only when the expression must actually be evaluated:
assert text == "The account shows currently a balance of 9.000"

सार वाक्य रचना वृक्ष परिवर्तन

ग्रूवी के स्वयं के प्रलेखन के अनुसार, जब ग्रूवी कंपाइलर ग्रूवी स्क्रिप्ट और कक्षाओं को संकलित करता है, तो प्रक्रिया के किसी बिंदु पर, स्रोत कोड को कंक्रीट सिंटैक्स ट्री के रूप में मेमोरी में प्रदर्शित किया जाएगा, फिर एक सार सिंटैक्स ट्री में बदल दिया जाएगा। एएसटी ट्रांसफ़ॉर्मेशन का उद्देश्य डेवलपर्स को एएसटी को संशोधित करने में सक्षम होने के लिए संकलन प्रक्रिया में हुक करने देना है, जो कि जेवीएम द्वारा चलाए जाने वाले बायटेकोड में बदल जाएगा। एएसटी ट्रांसफॉर्मेशन ग्रूवी को बेहतर संकलन-समय मेटाप्रोग्रामिंग क्षमताओं के साथ प्रदान करता है, जिससे रनटाइम प्रदर्शन दंड के बिना लैंग्वेज स्तर पर शक्तिशाली लचीलेपन की अनुमति मिलती है।[33]

ग्रूवी में एएसटी के उदाहरण हैं,

  • श्रेणी और मिक्सिन परिवर्तन
  • अपरिवर्तनीय एएसटी मैक्रो
  • परिवर्तन को नया रूप दें
  • सिंगलटन परिवर्तन

दूसरों के बीच में।

विशेषताएँ

ग्रूवी के प्रलेखन के अनुसार, विशेषता लैंग्वेज का एक संरचनात्मक निर्माण है जो अनुमति देता है व्यवहारों की संरचना, अंतरापृष्ठ के कार्यावधि कार्यान्वयन, व्यवहार अध्यारोही, और स्थिर प्रकार की जांच/संकलन के साथ संगतता।

लक्षणों को व्यतिक्रम कार्यान्वयन और स्थिति दोनों को ले जाने वाले अंतरापृष्ठ के रूप में देखा जा सकता है। विशेषता कीवर्ड का उपयोग करके एक विशेषता को परिभाषित किया गया है,

trait FlyingAbility { /* declaration of a trait */
  String fly() { "I'm flying!" } /* declaration of a method inside a trait */

फिर, इसे कीवर्ड उपकरण का उपयोग करके एक सामान्य अंतरापृष्ठ की तरह इस्तेमाल किया जा सकता है,

class Bird implements FlyingAbility {} /* Adds the trait FlyingAbility to the Bird class capabilities */
def bird = new Bird() /* instantiate a new Bird */
assert bird.fly() == "I'm flying!" /* the Bird class automatically gets the behavior of the FlyingAbility trait */

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

अभिग्रहण

ग्रूवी अभिग्रहण के उल्लेखनीय उदाहरणों में सम्मिलित हैं,

  • एडैप्टाविस्ट स्क्रिप्टरनर, दुनिया भर के 20000 से अधिक संगठनों द्वारा उपयोग किए जाने वाले एटलसियन टूल्स को स्वचालित और विस्तारित करने के लिए ग्रूवी कार्यान्वयन को एम्बेड करता है।[34][35]
  • अपाचे OFBiz, खुला स्रोत उद्यम संसाधन योजना (ईआरपी) प्रणाली, ग्रूवी का उपयोग करता है।[36][37]
  • नीलगिरी , एक क्लाउड प्रबंधन प्रणाली, ग्रूवी की एक महत्वपूर्ण मात्रा का उपयोग करती है।
  • ग्रेडल ग्रूवी का उपयोग करके एक लोकप्रिय बिल्ड ऑटोमेशन टूल है।
  • लिंक्डइन अपने कुछ उप-प्रणालियों के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।[38]
  • लॉजिकमॉनिटर, एक क्लाउड-आधारित निगरानी प्लेटफ़ॉर्म, स्क्रिप्ट-आधारित डेटा स्रोतों में ग्रूवी का उपयोग करता है।[39]
  • जेनकिंस, निरंतर एकीकरण के लिए एक मंच। संस्करण 2 के साथ, जेनकींस में एक पाइपलाइन प्लगइन सम्मिलित है जो ग्रूवी में लिखे जाने वाले निर्देशों के निर्माण की अनुमति देता है।[40]
  • लिफ़ेरे,उनके कलियो कार्य प्रगति में ग्रूवी का उपयोग करता है
  • बड़े पैमाने पर ऑनलाइन मीडिया सामग्री प्रदान करने के लिए Sky.com ग्रूवी और ग्रेल्स का उपयोग करता है।[41]
  • स्मार्ट थिंग्स, स्मार्ट घरों और उपभोक्ता चीजों की इंटरनेट के लिए एक खुला मंच, ग्रूवी के सुरक्षा-उन्मुख सबसेट का उपयोग करता है[42]
  • सोपूआई ग्रूवी को वेबसर्विस परीक्षण विकास के लिए एक लैंग्वेज के रूप में प्रदान करता है।[43]
  • सुरवता, एक बाजार अनुसंधान उद्घाटन,, ग्रूवी और ग्रेल्स का उपयोग करता है।[citation needed]
  • यूरोपीय पेटेंट कार्यालय (ईपीओ) ने प्रत्येक देश के पेटेंट कार्यालय के साथ संचार करने के लिए प्रक्रियाओं में समानता का लाभ उठाने और उन्हें एक एकल, सार्वभौमिक प्रक्रिया में बदलने के लिए ग्रूवी में एक डेटा प्रवाह कार्यरचना लैंग्वेज विकसित की।[citation needed]
  • हालांकि ग्रूवी को किसी भी जेवीएम वातावरण में एकीकृत किया जा सकता है, JBoss सीम फ्रेमवर्क ग्रूवी को जावा के अलावा, एक विकास लैंग्वेज के रूप में, बॉक्स से बाहर प्रदान करता है।[44]
  • vCalc.com अपने गणित क्राउड-सोर्सिंग इंजन में सभी उपयोगकर्ता परिभाषित गणित के लिए ग्रूवी का उपयोग करता है।[45]
  • Wired.com वेबसाइट के उत्पाद समीक्षा स्टैंडअलोन अनुभाग के लिए ग्रूवी और ग्रेल्स का उपयोग करता है।[46]
  • XWiki SAS अपने सहयोगी खुला स्त्रोत उत्पाद में ग्रूवी को स्क्रिप्टिंग लैंग्वेज के रूप में उपयोग करता है।[47]

आईडीई समर्थन

कई एकीकृत विकास वातावरण (आईडीई) और पाठ संपादक ग्रूवी का समर्थन करते हैं,

उपभाषा

ग्रूवी का एक वैकल्पिक कार्यान्वयन है,

  • ग्रूस्क्रिप्ट ग्रूवी कोड को जावास्क्रिप्ट कोड में परिवर्तित करता है।[48] हालाँकि अपाचे ग्रूवी की तुलना में ग्रूस्क्रिप्ट की कुछ सीमाएँ हैं, यह परिवेषक और ग्राहक दोनों में प्रक्षेत्र कक्षाओ का उपयोग कर सकता है।[49] ग्रेल्स संस्करण 3.0 के लिए प्लगइन समर्थन प्रदान किया गया है, साथ ही ऑनलाइन कोड रूपांतरण भी प्रदान किया गया है।[50]

यह भी देखें

संदर्भ

उद्धरण

  1. Cite error: Invalid <ref> tag; no text was provided for refs named github-releases
  2. "Groovy Goodness: Default Groovy Script File Extensions".
  3. "ग्रोवी 2.0 प्रदर्शन जावा की तुलना में". 25 Aug 2012.
  4. "जावा बनाम ग्रूवी 2.0 बनाम स्काला सिंपल परफॉर्मेंस टेस्ट". 10 Jul 2012. Archived from the original on 10 December 2012. Retrieved 7 October 2012.
  5. 5.0 5.1 "Groovy 2.4 और Grails 3.0 प्रमुख प्रायोजन के तहत अंतिम प्रमुख रिलीज होने के लिए". 19 Jan 2015.
  6. 6.0 6.1 "ग्रोवी अपाचे इनक्यूबेटर में शामिल हो गया". 11 Mar 2015.
  7. James Strachan (29 Aug 2003). "ग्रूवी - जावा प्लेटफॉर्म के लिए एक नई गतिशील भाषा का जन्म". Archived from the original on 1 September 2003.
  8. 8.0 8.1 "जावा कम्युनिटी प्रोसेस JSR 241".
  9. "ग्रूवी ने JAX 2007 इनोवेशन अवार्ड में प्रथम पुरस्कार जीता". 2007-04-26. Archived from the original on 2015-05-13. Retrieved 2012-10-07.
  10. "वे कहते हैं कि एक कप कॉफी से बहुत कुछ हो सकता है". Archived from the original on 2011-04-19. Retrieved 2012-10-07.
  11. "स्प्रिंगसोर्स ने ग्रूवी एंड ग्रेल्स कंपनी (G2One) का अधिग्रहण किया". 11 Nov 2008.
  12. "VMWare Acquires SpringSource". 10 Aug 2009.
  13. "जेम्स स्ट्रेचन का ट्वीट". November 24, 2016. Retrieved 2016-11-24.
  14. "देव मेलिंग सूची पर घोषणा".
  15. König 2007, pg. 32
  16. "जावा डेवलपर्स के लिए ग्रूवी शैली और भाषा सुविधा दिशानिर्देश". Groovy.codehaus.org. Archived from the original on 2015-01-17. Retrieved 2015-01-22.
  17. "ग्रूवी - जावा से अंतर". Groovy.codehaus.org. Archived from the original on 2009-03-17. Retrieved 2013-08-12.
  18. "ग्रोवी 2.0 में नया क्या है?". 28 Jun 2012.
  19. कोनिग 2007, पीपी. 37-8
  20. कोनिग 2007, पीपी. 38-9
  21. कोनिग 2007, पीपी. 41-3
  22. "Gnkkhmtlks". Archived from the original on 2012-10-01. Retrieved 2012-10-07.
  23. "ग्रोवी और ग्रेल्स में मेटाप्रोग्रामिंग तकनीकें". 11 Jun 2009.
  24. "ग्रोवी - क्लोजर". Archived from the original on 2012-05-22.
  25. 25.0 25.1 "Does groovy call partial application 'currying'", 10 Aug 2013
  26. "ग्रोवी - आलसी परिवर्तन". Archived from the original on 2012-10-08. Retrieved 2012-10-07.
  27. "साइड नोट्स: ग्रोवी में आलसी सूचियां". 3 Feb 2011.
  28. "ग्रूवी की तह". 20 Jun 2011. Archived from the original on 13 February 2015. Retrieved 12 February 2015.
  29. "ग्रोवी के साथ कार्यात्मक प्रोग्रामिंग". 5 Nov 2011.
  30. "ग्रूवी में फंक्शन प्रोग्रामिंग". Archived from the original on 2012-10-08. Retrieved 2012-10-07.
  31. "जेसनबिल्डर". Archived from the original on 2012-10-02. Retrieved 2012-10-07.
  32. "ग्रूवी स्ट्रिंग्स - उन्हें बनाने के विभिन्न तरीके". 26 Dec 2009.
  33. "संकलन-समय मेटाप्रोग्रामिंग - एएसटी परिवर्तन". Archived from the original on 2012-10-14. Retrieved 2012-10-07.
  34. "स्क्रिप्टरनर दस्तावेज़ीकरण".
  35. "गोद लेने के आंकड़ों के साथ स्क्रिप्टरनर प्रेस विज्ञप्ति".
  36. "OFBiz व्यापार तर्क के लिए Groovy DSL". Apache OFBiz Project Open Wiki.
  37. "ग्रोवी का उपयोग करके सरल-तरीके उदाहरण". Apache OFBiz Project Open Wiki.
  38. "लिंक्डइन पर Grails". Retrieved 2015-06-02.
  39. "एंबेडेड ग्रूवी स्क्रिप्टिंग". www.logicmonitor.com. Retrieved 2020-11-20.
  40. "जेनकींस पाइपलाइन".
  41. Rocher, Graeme (October 2, 2008). "ग्रीम रोचर का ब्लॉग: Sky.com Grails में लिखा हुआ फिर से लॉन्च किया गया". Graeme Rocher's Blog. Retrieved 2015-06-02.
  42. Security Analysis of Emerging Smart Home Applications
  43. "स्क्रिप्टिंग और स्क्रिप्ट लाइब्रेरी | स्क्रिप्टिंग और गुण". www.soapui.org. Retrieved 2015-06-02.
  44. "अध्याय 11. ग्रूवी एकीकरण". docs.jboss.org. Retrieved 2015-06-02.
  45. "vCalc, गणित की दुनिया के लिए अब तक का पहला सामाजिक मंच". 4 November 2014. Retrieved 2016-05-05.
  46. "वायर्ड.कॉम" (PDF). www.springsource.org. Retrieved 2015-06-02.
  47. "आपका देश" (PDF). www.springsource.org. Retrieved 2015-06-02.
  48. "ग्रोसस्क्रिप्ट दस्तावेज़". 12 Sep 2016. Archived from the original on 28 June 2017. Retrieved 4 July 2017.
  49. "ग्रूस्क्रिप्ट पर स्प्रिंगवन/2जीएक्स पर प्रस्तुति". 13 Dec 2015.
  50. "ग्रोसस्क्रिप्ट ऑनलाइन रूपांतरण". 15 May 2017. Archived from the original on 9 July 2017. Retrieved 4 July 2017.


स्रोत

बाहरी संबंध