कॉफीस्क्रिप्ट

From alpha
Jump to navigation Jump to search
CoffeeScript
CoffeeScript-logo.svg
ParadigmMulti-paradigm: prototype-based, functional, imperative, scripting
द्वारा डिज़ाइन किया गयाJeremy Ashkenas
DeveloperJeremy Ashkenas
पहली प्रस्तुतिDecember 13, 2009; 14 years ago (2009-12-13)
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)
फ़ाइल नाम एक्सटेंशनएस.coffee, .litcoffee[citation needed]

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

कॉफीस्क्रिप्ट समर्थन रूबी ऑन रेल्स संस्करण 3.1 में शामिल है[4] और प्ले फ्रेमवर्क[5] 2011 में, ब्रेंडन ईच ने कॉफीस्क्रिप्ट को जावास्क्रिप्ट के भविष्य के बारे में अपने विचारों पर प्रभाव के रूप में संदर्भित किया।[6][7]


इतिहास

13 दिसंबर 2009 को, जेरेमी अशकेनास ने टिप्पणी के साथ कॉफ़ीस्क्रिप्ट का पहला गिट (सॉफ़्टवेयर) कमिट किया: प्रारंभिक कमिटमेंट ऑफ़ द मिस्ट्री लैंग्वेज।[8] कंपाइलर रूबी में लिखा गया था। 24 दिसंबर को, उन्होंने पहली टैग की गई और प्रलेखित रिलीज़, 0.1.0 बनाई। 21 फरवरी, 2010 को, उन्होंने संस्करण 0.5 प्रतिबद्ध किया, जिसने रूबी कंपाइलर को एक स्व-होस्टिंग (संकलक) के साथ बदल दिया। शुद्ध कॉफीस्क्रिप्ट में स्व-होस्टिंग संस्करण। उस समय तक परियोजना ने गिटहब पर कई अन्य योगदानकर्ताओं को आकर्षित किया था, और प्रति दिन 300 से अधिक पेज हिट प्राप्त कर रहा था।

24 दिसंबर 2010 को, Ashkenas ने हैकर न्यूज को स्थिर 1.0.0 जारी करने की घोषणा की, वह साइट जहां पहली बार परियोजना की घोषणा की गई थी।[9][10] 18 सितंबर, 2017 को संस्करण 2.0.0 पेश किया गया था,[11] जिसका उद्देश्य कॉफ़ीस्क्रिप्ट को आधुनिक जावास्क्रिप्ट युग में लाना है, जो कि कॉफ़ीस्क्रिप्ट की पहचान है, स्वच्छ सिंटैक्स को संरक्षित करते हुए जावास्क्रिप्ट के साथ संगतता में अंतराल को बंद करना है।

सिंटेक्स

कॉफीस्क्रिप्ट में लगभग सब कुछ एक अभिव्यक्ति (कंप्यूटर विज्ञान) है, उदाहरण के लिए, if, switch और for एक्सप्रेशंस (जिनका जावास्क्रिप्ट में कोई रिटर्न वैल्यू नहीं है) एक वैल्यू लौटाते हैं। पर्ल की तरह, इन कंट्रोल स्टेटमेंट्स में भी पोस्टफिक्स संस्करण होते हैं; उदाहरण के लिए, if में भी लिखा जा सकता है consequent if condition प्रपत्र।

कई अनावश्यक कोष्ठक और कोष्ठक छोड़े जा सकते हैं; उदाहरण के लिए, कोड के ब्लॉक को ब्रेसिज़ के बजाय इंडेंटेशन द्वारा दर्शाया जा सकता है, फ़ंक्शन कॉल अंतर्निहित हैं, और ऑब्जेक्ट लिटरल अक्सर स्वचालित रूप से पहचाने जाते हैं।

जावास्क्रिप्ट में बॉडी मास इंडेक्स की गणना करने के लिए, कोई लिख सकता है:

<वाक्यविन्यास लैंग = जावास्क्रिप्ट> कास्ट मास = 72 स्थिरांक ऊंचाई = 1.78 const बीएमआई = द्रव्यमान/ऊंचाई ** 2 अगर (18.5 <= बीएमआई और बीएमआई <25) {चेतावनी ('आप स्वस्थ हैं!')} </वाक्यविन्यास हाइलाइट>

कॉफीस्क्रिप्ट के साथ अंतराल सीधे वर्णित है:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> मास = 72 ऊंचाई = 1.78 बीएमआई = द्रव्यमान / ऊंचाई**2 चेतावनी 'आप स्वस्थ हैं!' अगर 18.5 <= बीएमआई <25 </वाक्यविन्यास हाइलाइट>

यूक्लिडियन एल्गोरिथ्म के साथ दो पूर्णांकों के सबसे बड़े सामान्य विभाजक की गणना करने के लिए, जावास्क्रिप्ट में आमतौर पर एक लूप की आवश्यकता होती है:

<वाक्यविन्यास लैंग = जावास्क्रिप्ट> जीसीडी = (एक्स, वाई) => {

 करना {
   [एक्स, वाई] = [वाई, एक्स% वाई];
 } जबकि (y !== 0)
 वापसी एक्स

} </वाक्यविन्यास हाइलाइट>

जबकि कॉफीस्क्रिप्ट में कोई भी उपयोग कर सकता है until[12] बजाय: <वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> जीसीडी = (एक्स, वाई) ->

 [x, y] = [y, x% y] जब तक y 0 न हो जाए
 एक्स

</वाक्यविन्यास हाइलाइट> ? e> कीवर्ड जल्दी से जाँचता है कि क्या कोई चर है null या undefined : <वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> व्यक्ति चेक = ->

 यदि व्यक्ति नहीं? फिर सतर्क (कोई व्यक्ति नहीं) अन्य सतर्क (व्यक्ति रखें)

व्यक्ति = शून्य व्यक्ति चेक () व्यक्ति = इवान व्यक्ति चेक () </वाक्यविन्यास हाइलाइट>

यदि चर है तो यह किसी व्यक्ति को सचेत नहीं करेगा null या undefined और अगर वहाँ कुछ है तो व्यक्ति है।

JQuery लाइब्रेरी का उपयोग करने वाला एक सामान्य पूर्व-es6 JavaScript स्निपेट है:

<वाक्यविन्यास लैंग = जावास्क्रिप्ट> $ (दस्तावेज़)। तैयार (फ़ंक्शन () {

 // इनिशियलाइज़ेशन कोड यहाँ जाता है

}) </वाक्यविन्यास हाइलाइट>

या यहां तक ​​कि सिर्फ:

<वाक्यविन्यास लैंग = जावास्क्रिप्ट> $(फ़ंक्शन() {

 // इनिशियलाइज़ेशन कोड यहाँ जाता है

}) </वाक्यविन्यास हाइलाइट>

कॉफ़ीस्क्रिप्ट में, function कीवर्ड द्वारा प्रतिस्थापित किया गया है -> प्रतीक, और इंडेंटेशन का उपयोग कर्ली ब्रेसिज़ के बजाय किया जाता है, जैसा कि अन्य ऑफ साइड नियम लैंग्वेज जैसे कि पायथन और हास्केल में होता है। साथ ही, फ़ंक्शन या ब्लॉक को निरूपित करने के बजाय इंडेंटेशन स्तर का उपयोग करके कोष्ठकों को आमतौर पर छोड़ा जा सकता है। इस प्रकार, उपरोक्त स्निपेट के बराबर कॉफीस्क्रिप्ट है:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> $(दस्तावेज़).तैयार ->

 # इनिशियलाइज़ेशन कोड यहाँ जाता है

</वाक्यविन्यास हाइलाइट>

या केवल:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> $ ->

 # इनिशियलाइज़ेशन कोड यहाँ जाता है

</वाक्यविन्यास हाइलाइट>

कॉफीस्क्रिप्ट में रूबी-शैली स्ट्रिंग इंटरपोलेशन शामिल है। दोहरे-उद्धृत स्ट्रिंग्स #{...} का उपयोग करते हुए प्रक्षेपित मानों की अनुमति देते हैं, और एकल-उद्धृत स्ट्रिंग्स लिटरल हैं।[13] <वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> लेखक = विट्गेन्स्टाइन उद्धरण = एक तस्वीर एक तथ्य है। -- #{ लेखक }

वाक्य = #{ 22 / 7 } π का ​​एक अच्छा सन्निकटन है </वाक्यविन्यास हाइलाइट>

किसी भी लूप के लिए सूची समझ द्वारा प्रतिस्थापित किया जा सकता है; ताकि दस से छोटी सकारात्मक विषम संख्याओं के वर्गों की गणना करने के लिए (अर्थात ऐसी संख्याएँ जिनका शेष मॉडुलो 2 1 है), कोई ऐसा कर सकता है:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> अलर्ट n*n for n in [1..10] जब n%2 1 है </वाक्यविन्यास हाइलाइट>

वैकल्पिक रूप से, वहाँ है:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> अलर्ट n*n for n in [1..10] by 2 </वाक्यविन्यास हाइलाइट>

जब कीवर्ड का उपयोग करके एक-लाइनर के साथ एक रेखीय खोज लागू की जा सकती है:

<वाक्यविन्यास लैंग = कॉफ़ीस्क्रिप्ट> नाम = [इवान, जोआना, निकोले, मिहेला] रैखिक खोज = (खोज नाम) -> नाम खोज नाम होने पर नामों में नाम के लिए चेतावनी (नाम)। </वाक्यविन्यास हाइलाइट> for ... in e> सिंटैक्स सरणियों पर लूपिंग की अनुमति देता है जबकि for ... of सिंटैक्स वस्तुओं पर लूपिंग की अनुमति देता है।

कॉफीस्क्रिप्ट की असामान्य दायरे (कंप्यूटर विज्ञान) के लिए आलोचना की गई है नियम।[14][15] विशेष रूप से, यह चर छायांकन को पूरी तरह से अस्वीकार करता है जो कोड के बारे में तर्क को और अधिक कठिन बना देता है स्थापित कुछ बुनियादी प्रोग्रामिंग पैटर्न में त्रुटि-प्रवण द्वारा और प्रक्रियात्मक प्रोग्रामिंग के बाद से दी गई सिद्धांतों को परिभाषित किया गया।

उदाहरण के लिए, जावास्क्रिप्ट में निम्नलिखित कोड स्निपेट के साथ किसी को बाहर देखने की जरूरत नहीं है {}जानने के लिए ब्लॉक करें सुनिश्चित करें कि यह संभव नहीं है foo बाहरी दायरे में चर हो सकता है संयोग से ओवरराइड:

<वाक्यविन्यास लैंग = जावास्क्रिप्ट>

 // ...
 समारोह बाज () {
   वर फू = बार
   कंसोल.लॉग (`फू = $ {फू}`)
 }
 // ...

} </वाक्यविन्यास हाइलाइट>

कॉफीस्क्रिप्ट में यह बताने का कोई तरीका नहीं है कि एक चर का दायरा है या नहीं ब्लॉक के बाहर देखे बिना एक ब्लॉक तक सीमित है या नहीं।

विकास और वितरण

कॉफीस्क्रिप्ट कंपाइलर संस्करण 0.5 के बाद से स्वयं-होस्टिंग (संकलक) है। स्वयं-होस्टिंग और Node.js उपयोगिता के रूप में उपलब्ध है; हालाँकि, कोर कंपाइलर Node.js पर निर्भर नहीं करता है और इसे किसी भी जावास्क्रिप्ट वातावरण में चलाया जा सकता है।[16] Node.js उपयोगिता का एक विकल्प कॉफी मावेन प्लगइन है, जो अपाचे मावेन बिल्ड सिस्टम के लिए एक प्लगइन है। प्लगइन जावा (प्रोग्रामिंग भाषा) में लिखे राइनो (जावास्क्रिप्ट इंजन) जावास्क्रिप्ट इंजन का उपयोग करता है।[citation needed] CoffeeScript.org की आधिकारिक साइट के मेन्यू बार में कॉफीस्क्रिप्ट आज़माएं बटन है; इसे क्लिक करने से एक मोडल विंडो खुलती है जिसमें उपयोगकर्ता कॉफीस्क्रिप्ट में प्रवेश कर सकते हैं, जावास्क्रिप्ट आउटपुट देख सकते हैं और इसे सीधे ब्राउज़र में चला सकते हैं। js2coffee[17] साइट द्वि-दिशात्मक अनुवाद प्रदान करती है।

नवीनतम जोड़

  • स्रोत मानचित्र उपयोगकर्ताओं को रन टाइम त्रुटियों पर कॉफीस्क्रिप्ट ट्रेसबैक का समर्थन करते हुए सीधे अपने कॉफीस्क्रिप्ट कोड को डीबग करने की अनुमति देते हैं।
  • कॉफीस्क्रिप्ट साक्षर प्रोग्रामिंग के एक रूप का समर्थन करता है, .coffee.md या .litcoffee फाइल एक्सटेंशन। यह कॉफीस्क्रिप्ट स्रोत कोड को markdown में लिखने की अनुमति देता है। संकलक कोड के रूप में किसी भी इंडेंट किए गए ब्लॉक (स्रोत कोड को इंगित करने का मार्कडाउन तरीका) का इलाज करेगा, और बाकी को टिप्पणियों के रूप में अनदेखा करेगा।

एक्सटेंशन

Iced CoffeeScript, CoffeeScript का सुपरसेट है जो दो नए कीवर्ड जोड़ता है: await और defer. ये जोड़ अतुल्यकालिक नियंत्रण प्रवाह को सरल बनाते हैं, जिससे कोड एक प्रक्रियात्मक प्रोग्रामिंग भाषा की तरह दिखता है, कॉल-बैक श्रृंखला को समाप्त करता है। इसका उपयोग सर्वर साइड और ब्राउज़र में किया जा सकता है।[18]


दत्तक ग्रहण

13 सितंबर 2012 को, ड्रॉपबॉक्स (सेवा) ने घोषणा की कि उनके ब्राउज़र-साइड कोड बेस को जावास्क्रिप्ट से कॉफ़ीस्क्रिप्ट में फिर से लिखा गया है,[19] हालाँकि इसे 2017 में टाइपप्रति में माइग्रेट कर दिया गया था।[20] गिटहब की आंतरिक शैली मार्गदर्शिका ने एक बार कहा था कि कॉफीस्क्रिप्ट में नया जेएस लिखें, हालांकि यह अब नहीं करता है, [21] और उनका एटम (टेक्स्ट एडिटर) भी भाषा में लिखा गया था।[22] पिक्सेल गेम मेकर एमवी अपने गेम डेवलपमेंट वातावरण के हिस्से के रूप में कॉफीस्क्रिप्ट का उपयोग करता है।[23]


यह भी देखें

संदर्भ

  1. https://coffeescript.org/ "CoffeeScript borrows chained comparisons from Python"
  2. Heller, Martin (October 18, 2011). "Turn up your nose at Dart and smell the CoffeeScript". InfoWorld. Retrieved 2020-07-15.
  3. Alex MacCaw (January 2012). The Little Book on CoffeScript. O'Reilly Media. ISBN 978-1-4493-2105-5.
  4. Josh Peek (April 13, 2011). "Tweet by Rails Core Team Member".
  5. "AssetsCoffeeScript - 2.5.x". www.playframework.com. Retrieved 2016-10-31.
  6. Eich, Brendan. "Harmony of My Dreams"
  7. Eich, Brendan. "My JSConf.US Presentation"
  8. Github. 'initial commit of the mystery language'
  9. Hacker News. CoffeeScript 1.0.0 announcement posted by Jeremy Ashkenas on Dec 24, 2010
  10. Hacker News. Original CoffeeScript announcement posted by Jeremy Ashkenas on Dec 24, 2009
  11. coffeescript.org Announcing CoffeeScript 2
  12. CoffeeScript calls this "pattern matching", which is a non-standard use of that term.
  13. "Official CoffeeScript Page". Retrieved 20 November 2013.
  14. "The Problem with Implicit Scoping in CoffeeScript". Retrieved 2018-10-13.
  15. "CoffeeScript's Scoping is Madness". Retrieved 2018-10-13.
  16. CoffeeScript Archived 2012-04-27 at the Wayback Machine. Jashkenas.github.com. Retrieved on 2013-07-21.
  17. Sta Cruz, Rico. "js2coffee". Retrieved 11 May 2014.
  18. "Official IcedCoffeeScript website".
  19. Wheeler, Dan; Mahkovec, Ziga; Varenhorst, Chris (13 September 2012). "Dropbox dives into CoffeeScript". Retrieved 11 May 2013.
  20. Goldstein, David (13 May 2020). "The Great CoffeeScript to Typescript Migration of 2017". Dropbox.Tech. Retrieved 30 June 2020.
  21. "JavaScript · Styleguide · GitHub". Github.com. Archived from the original on 2013-08-15. Retrieved 2015-11-30.
  22. Atom source code. github.com. Retrieved on 2021-06-26.
  23. Cullen, Daniel. "PIXEL GAME MAKER MV (PC)". Christ Centered Gaming. Retrieved 15 January 2021.


अग्रिम पठन


बाहरी संबंध

  • No URL found. Please specify a URL here or add one to Wikidata.