CoffeeScript یک زبان برنامهنویسی است که به JavaScript کامپایل میشود و برای افزایش خوانایی و اختصار کد JavaScript طراحی شده است. این زبان با استفاده از یک سینتکس تمیز و کاهش کدهای تکراری، سبک برنامهنویسی پیچیدهتری را ترویج میکند که به شدت تحت تأثیر Python و Ruby است و هدف آن تسهیل فرآیند توسعه، به ویژه برای برنامههای وب است. CoffeeScript همچنین به گونهای طراحی شده است که به توسعهدهندگان کمک کند کد را سریعتر و واضحتر بنویسند، در حالی که هنوز به JavaScript استاندارد کامپایل میشود که به آن اجازه میدهد در هر مرورگر یا محیطی که از JavaScript پشتیبانی میکند، اجرا شود.
CoffeeScript توسط Jeremy Ashkenas ایجاد شد و اولین بار در سال 2009 منتشر شد. این زبان از نیاز به سادهسازی JavaScript به وجود آمد، زبانی که با وجود فراوانیاش در توسعه وب، به دلیل الزامات نحویاش، به تدریج دشوار و اغلب verbose شده بود. توسعهدهندگان به دنبال راههایی برای نوشتن کدهای تمیزتر و قابل نگهداریتر بودند و Ashkenas از این فرصت استفاده کرد تا سینتکسی جدید را پیادهسازی کند که احساس طبیعیتر و بیانگرانهتری داشته باشد.
CoffeeScript از Python و Ruby، دو زبانی که به خاطر سینتکس زیبا و مختصرشان شناخته شدهاند، الهام زیادی گرفته است. این زبان به سرعت محبوبیت پیدا کرد، به ویژه زمانی که جامعه توسعه وب شروع به پذیرش فریمورکهایی مانند Node.js و Backbone.js کرد که از سینتکس سادهتر بهرهمند شدند. ظهور فریمورکهای فرانتاند مانند AngularJS و React نیز پلتفرم دیگری برای استفاده از CoffeeScript فراهم کرد.
در حال حاضر، محبوبیت CoffeeScript در مقایسه با سالهای اولیهاش کاهش یافته است، عمدتاً به دلیل ظهور ES6 (ECMAScript 2015) که بسیاری از ویژگیهایی را که CoffeeScript سعی در ارائه آنها داشت، مانند توابع پیکانی، کلاسها و رشتههای الگو معرفی کرد. جامعه حول CoffeeScript هنوز فعال است و در برخی پروژههای قدیمی همچنان مورد استفاده قرار میگیرد، اما بسیاری از توسعهدهندگان اکنون ترجیح میدهند با JavaScript مدرن کار کنند.
یکی از ویژگیهای بارز CoffeeScript استفاده از تورفتگی برای نشان دادن دامنهها است که نیاز به آکولادها را از بین میبرد.
square = (x) ->
x * x
تعریف توابع در CoffeeScript مختصر است و میتوان آنها را با استفاده از ->
(یا =>
برای توابع متصل) اعلام کرد.
add = (a, b) -> a + b
CoffeeScript از درک لیستها پشتیبانی میکند که امکان ایجاد آرایههای مختصر و بیانگرانه را فراهم میکند.
squares = (x * x for x in [1..5]) # [1, 4, 9, 16, 25]
درونریزی رشتهها ساده است و ساخت رشتهها با متغیرها را آسانتر میکند.
name = "World"
greeting = "Hello, #{name}!" # "Hello, World!"
تعریف کلاسها و گسترش آنها در CoffeeScript به راحتی انجام میشود و سینتکسی تمیزتر از JavaScript ارائه میدهد.
class Animal
constructor: (@name) ->
class Dog extends Animal
bark: -> console.log "#{@name} barks."
CoffeeScript از اپراتور splat (...
) برای ارسال یک آرایه به عنوان آرگومانهای جداگانه استفاده میکند.
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
CoffeeScript دستور unless
را به عنوان یک جایگزین خواناتر برای if not
معرفی میکند.
unless isRaining
console.log "Let's go outside!"
CoffeeScript دارای پیکان چاق (=>
) است که زمینه this
را حفظ میکند، مشابه توابع پیکانی JavaScript.
button.addEventListener 'click', =>
console.log "Button clicked!"
CoffeeScript شامل یک کامپایلر است که فایلهای .coffee
را به عنوان ورودی میگیرد و JavaScript استاندارد را خروجی میدهد. این کامپایلر میتواند به طور مستقیم در خط فرمان اجرا شود یا در سیستمهای ساخت مانند Grunt و Gulp ادغام شود.
بیشتر IDEها و ویرایشگرهای متنی محبوب مانند Visual Studio Code، Atom و Sublime Text پلاگینهایی برای پشتیبانی از CoffeeScript ارائه میدهند که شامل هایلایت سینتکس و کامپایل یکپارچه است.
برای کامپایل یک پروژه CoffeeScript، میتوانید به سادگی از دستور زیر استفاده کنید:
coffee -c project.coffee
شما همچنین میتوانید فایلها را برای تغییرات زیر نظر داشته باشید:
coffee -w -c project.coffee
CoffeeScript عمدتاً در توسعه وب استفاده شده است، به ویژه برای اسکریپتنویسی سمت کلاینت در SPA (برنامههای تک صفحهای). فریمورکهایی مانند Backbone.js و Rails از CoffeeScript استفاده کردهاند و بسیاری از برنامههای تولیدی هنوز وجود دارند که با این زبان ساخته شدهاند.
CoffeeScript به عنوان یک شکر سینتکسی بر روی JavaScript عمل میکند و سبک کدنویسی مختصر و خواناتری را امکانپذیر میسازد. JavaScript به طور بومی از ویژگیهایی مانند درک لیستها و اپراتورهای splat پشتیبانی نمیکند که این امر CoffeeScript را برای برخی موارد استفاده جذاب میکند.
در حالی که CoffeeScript به خوبی در اکوسیستم JavaScript جا میگیرد، Python کتابخانهها و فریمورکهای گستردهتری برای تحلیل داده، محاسبات علمی و توسعه وب ارائه میدهد. CoffeeScript به ویژه برای توسعه فرانتاند مناسبتر است.
CoffeeScript و Ruby عبارات ایدئوماتیک مشترکی دارند، اما هدف CoffeeScript به شدت بر تعامل با JavaScript متمرکز است. Ruby یک زبان عمومیتر با اکوسیستم غنی است اما قابلیتهای کامپایل مستقیم به مرورگر وب را ندارد.
TypeScript بررسی نوع ایستا را ارائه میدهد که میتواند به شناسایی خطاها در زمان کامپایل کمک کند. در مقابل، CoffeeScript به سادگی بر سادهسازی سینتکس JavaScript بدون اجرای نوع تمرکز دارد.
یکی از مفیدترین ابزارهای ترجمه منبع به منبع برای CoffeeScript شامل CoffeeScript-ES6 است که میتواند CoffeeScript را به JavaScript ES6 تبدیل کند. علاوه بر این، در مورد ابزارهای ترجمه کد، Babel نیز میتواند تغییرات JavaScript را مدیریت کند و به توسعهدهندگان این امکان را میدهد که با ویژگیهای مدرن JavaScript کار کنند در حالی که هنوز از نسخههای قدیمیتر پشتیبانی میکند.
هنگام ترجمه از CoffeeScript، مهم است که نحوه مدیریت تورفتگی را به درستی در نظر بگیرید زیرا از نظر نحوی مهم است و همچنین نحوه تبدیل ویژگیهای CoffeeScript به معادلهای آنها در زبانهای دیگر به طور مؤثر.