कॉफीस्क्रिप्ट एक प्रोग्रामिंग भाषा है जो जावास्क्रिप्ट में संकलित होती है, जिसे जावास्क्रिप्ट कोड की पठनीयता और संक्षिप्तता को बढ़ाने के लिए एक साफ़ सिंटैक्स और बायलरप्लेट कोड की कमी के माध्यम से डिज़ाइन किया गया है। यह प्रोग्रामिंग की एक अधिक परिष्कृत शैली को बढ़ावा देता है, जो पायथन और रूबी से प्रेरित है, इस प्रकार विकास प्रक्रिया को सुगम बनाने का लक्ष्य रखता है, विशेष रूप से वेब अनुप्रयोगों के लिए। कॉफीस्क्रिप्ट को डेवलपर्स को तेजी से और स्पष्ट रूप से कोड लिखने में मदद करने के लिए भी डिज़ाइन किया गया था, जबकि यह मानक जावास्क्रिप्ट में संकलित होता है, जो इसे किसी भी ब्राउज़र या वातावरण पर चलाने की अनुमति देता है जो जावास्क्रिप्ट का समर्थन करता है।
कॉफीस्क्रिप्ट का निर्माण जेरमी एशकेनास ने किया था और इसे पहली बार 2009 में जारी किया गया था। यह भाषा जावास्क्रिप्ट को सरल बनाने की आवश्यकता से उत्पन्न हुई, जो कि वेब विकास में इसकी व्यापकता के बावजूद, अपने सिंटैक्स की आवश्यकताओं के कारण बोझिल और अक्सर विस्तृत हो गई थी। डेवलपर्स साफ़, अधिक रखरखाव योग्य कोड लिखने के तरीकों की तलाश कर रहे थे, और एशकेनास ने एक नए सिंटैक्स को लागू करने का अवसर लिया जो अधिक स्वाभाविक और अभिव्यक्तिपूर्ण लगेगा।
कॉफीस्क्रिप्ट को पायथन और रूबी से महत्वपूर्ण प्रेरणा मिली है, जो दो भाषाएँ हैं जो अपनी सुरुचिपूर्ण और संक्षिप्त सिंटैक्स के लिए जानी जाती हैं। यह भाषा तेजी से लोकप्रिय हुई, विशेष रूप से जब वेब विकास समुदाय ने नोड.जेएस और बैकबोन.जेएस जैसे ढांचे को अपनाना शुरू किया, जिन्हें अधिक सुव्यवस्थित सिंटैक्स से लाभ हुआ। एंगुलरजेएस और रिएक्ट जैसे फ्रंट-एंड ढांचे के उदय ने भी कॉफीस्क्रिप्ट के उपयोग के लिए एक और मंच प्रदान किया।
अब तक, कॉफीस्क्रिप्ट की लोकप्रियता अपने प्रारंभिक वर्षों की तुलना में कम हो गई है, मुख्य रूप से ES6 (ECMAScript 2015) के आगमन के कारण, जिसने कई विशेषताएँ पेश कीं जो कॉफीस्क्रिप्ट प्रदान करने का प्रयास कर रहा था, जैसे कि एरो फ़ंक्शंस, कक्षाएँ, और टेम्पलेट लिटेरल। कॉफीस्क्रिप्ट के चारों ओर समुदाय अभी भी सक्रिय है, और यह कुछ विरासती परियोजनाओं में उपयोग में है, लेकिन अब कई डेवलपर्स आधुनिक जावास्क्रिप्ट के साथ रहना पसंद करते हैं।
कॉफीस्क्रिप्ट की सबसे उल्लेखनीय विशेषताओं में से एक इसका इंडेंटेशन का उपयोग है जो स्कोप को दर्शाता है, इस प्रकार कर्ली ब्रेसेस की आवश्यकता को समाप्त करता है।
square = (x) ->
x * x
कॉफीस्क्रिप्ट में फ़ंक्शन परिभाषाएँ संक्षिप्त होती हैं और इन्हें ->
(या बाउंड फ़ंक्शंस के लिए =>
) का उपयोग करके घोषित किया जा सकता है।
add = (a, b) -> a + b
कॉफीस्क्रिप्ट सूची समर्पण का समर्थन करता है, जो संक्षिप्त और अभिव्यक्तिपूर्ण एरे निर्माण की अनुमति देता है।
squares = (x * x for x in [1..5]) # [1, 4, 9, 16, 25]
स्ट्रिंग का इंटरपोलेशन सीधा है, जिससे वेरिएबल के साथ स्ट्रिंग बनाना आसान हो जाता है।
name = "World"
greeting = "Hello, #{name}!" # "Hello, World!"
कॉफीस्क्रिप्ट में कक्षाएँ परिभाषित करना और उन्हें विस्तारित करना सहज है, जो जावास्क्रिप्ट की तुलना में एक साफ़ सिंटैक्स प्रदान करता है।
class Animal
constructor: (@name) ->
class Dog extends Animal
bark: -> console.log "#{@name} barks."
कॉफीस्क्रिप्ट स्प्लैट ऑपरेटर (...
) का उपयोग करके एक एरे को अलग-अलग तर्कों के रूप में पास करता है।
multiply = (args...) ->
result = 1
for arg in args
result *= arg
result
आप फ़ंक्शन परिभाषित करते समय डिफ़ॉल्ट पैरामीटर भी सेट कर सकते हैं।
greet = (name = "stranger") -> "Hello, #{name}!"
डेस्ट्रक्चरिंग एरे और ऑब्जेक्ट से अधिक संक्षिप्त असाइनमेंट की अनुमति देती है।
[a, b] = [1, 2]
{foo, bar} = {foo: "Hello", bar: "World"}
unless
कथनकॉफीस्क्रिप्ट unless
कथन को if not
के लिए एक अधिक पठनीय विकल्प के रूप में पेश करता है।
unless isRaining
console.log "Let's go outside!"
कॉफीस्क्रिप्ट में फैट एरो (=>
) है जो this
के संदर्भ को बनाए रखता है, जो जावास्क्रिप्ट के एरो फ़ंक्शंस के समान है।
button.addEventListener 'click', =>
console.log "Button clicked!"
कॉफीस्क्रिप्ट में एक संकलक शामिल है जो .coffee
फ़ाइलों को इनपुट के रूप में लेता है और मानक जावास्क्रिप्ट आउटपुट करता है। इस संकलक को सीधे कमांड लाइन में चलाया जा सकता है या ग्रंट और गल्प जैसे निर्माण प्रणालियों में एकीकृत किया जा सकता है।
अधिकांश लोकप्रिय IDEs और टेक्स्ट संपादक जैसे कि विजुअल स्टूडियो कोड, एटम, और सब्लाइम टेक्स्ट कॉफीस्क्रिप्ट समर्थन के लिए प्लगइन्स प्रदान करते हैं, जिसमें सिंटैक्स हाइलाइटिंग और एकीकृत संकलन शामिल है।
कॉफीस्क्रिप्ट परियोजना को संकलित करने के लिए, आप बस इस कमांड का उपयोग कर सकते हैं:
coffee -c project.coffee
आप फ़ाइलों में परिवर्तनों के लिए इस तरह देख सकते हैं:
coffee -w -c project.coffee
कॉफीस्क्रिप्ट का मुख्य रूप से वेब विकास में उपयोग किया गया है, विशेष रूप से एसपीए (सिंगल पेज अनुप्रयोगों) में क्लाइंट-साइड स्क्रिप्टिंग के लिए। बैकबोन.जेएस और रेल्स जैसे ढांचे ने कॉफीस्क्रिप्ट का उपयोग किया है, और कई उत्पादन अनुप्रयोग अभी भी मौजूद हैं जो इस भाषा के साथ बनाए गए थे।
कॉफीस्क्रिप्ट जावास्क्रिप्ट के ऊपर एक सिंटैक्स शुगर के रूप में कार्य करता है, जो एक अधिक संक्षिप्त और पठनीय कोडिंग शैली को सक्षम बनाता है। जावास्क्रिप्ट स्वाभाविक रूप से सूची समर्पण और स्प्लैट ऑपरेटर जैसी सुविधाओं का समर्थन नहीं करता है, जो कुछ उपयोग के मामलों के लिए कॉफीस्क्रिप्ट को आकर्षक बनाता है।
जबकि कॉफीस्क्रिप्ट जावास्क्रिप्ट पारिस्थितिकी तंत्र में अच्छी तरह से फिट बैठता है, पायथन डेटा विश्लेषण, वैज्ञानिक कंप्यूटिंग, और वेब विकास के लिए अधिक व्यापक पुस्तकालयों और ढांचों की पेशकश करता है। कॉफीस्क्रिप्ट विशेष रूप से फ्रंट-एंड विकास के लिए बेहतर है।
कॉफीस्क्रिप्ट और रूबी में मुहावरेदार अभिव्यक्तियाँ साझा होती हैं, लेकिन कॉफीस्क्रिप्ट का उद्देश्य जावास्क्रिप्ट इंटरऑपरेबिलिटी पर केंद्रित है। रूबी एक अधिक सामान्य उद्देश्य की भाषा है जिसमें एक समृद्ध पारिस्थितिकी तंत्र है लेकिन सीधे वेब ब्राउज़र संकलन क्षमताओं की कमी है।
टाइपस्क्रिप्ट स्थिर प्रकार की जांच प्रदान करता है जो संकलन समय पर त्रुटियों को पकड़ने में मदद कर सकता है। इसके विपरीत, कॉफीस्क्रिप्ट केवल जावास्क्रिप्ट सिंटैक्स को सरल बनाने पर ध्यान केंद्रित करता है बिना प्रकार के प्रवर्तन के।
कॉफीस्क्रिप्ट के लिए सबसे उपयोगी स्रोत से स्रोत अनुवाद उपकरणों में कॉफीस्क्रिप्ट-ईएस6 शामिल है जो कॉफीस्क्रिप्ट को ईएस6 जावास्क्रिप्ट में परिवर्तित कर सकता है। इसके अतिरिक्त, कोड अनुवाद उपकरणों के संबंध में, बैबल भी जावास्क्रिप्ट रूपांतरणों को संभाल सकता है, जिससे डेवलपर्स को आधुनिक जावास्क्रिप्ट सुविधाओं के साथ काम करने की अनुमति मिलती है जबकि पुराने संस्करणों का समर्थन भी किया जाता है।
कॉफीस्क्रिप्ट से अनुवाद करते समय, यह महत्वपूर्ण है कि इंडेंटेशन को सही तरीके से संभालने पर विचार करें क्योंकि यह सिंटैक्स के लिए महत्वपूर्ण है और कॉफीस्क्रिप्ट की विशेषताओं को अन्य भाषाओं में उनके समकक्ष में प्रभावी ढंग से परिवर्तित करने के लिए।