Syntax
برای کار با CoffeeScript، ابتدا باید با ساختار Syntax آن آشنا شد. CoffeeScript در بسیاری از موارد با جاوااسکریپت یکسان است در حالیکه در قسمت قبل گفته شد که CoffeeScript زیر مجموعهای جاوااسکریپت نیست؛ بنابراین برخی از کلمات کلیدی مانند function و var در آن مجاز نیست و سبب بروز خطا در زمان کامپایل میشوند. وقتی شما شروع به نوشتن فایل CoffeeScript میکنید، باید تمام کدهایی را که مینویسید، با Syntax کامل CoffeeScript بنویسید و نمیتوانید قسمتی را با جاوااسکریپت و قسمتی را با CoffeeScript بنویسید.
برای نوشتن توضیحات در فایل CoffeeScript باید از علامت # استفاده کنید که این قسمت را از زبان Ruby گرفته است.
# A comment
### A multiline comment ###
در زبان CoffeeScript فاصله (space) بسیار مهم است؛ چرا که زبان Python براساس میزان تو رفتگی کدها، بدنهی شرطها و حلقهها را تشخیص میدهد و CoffeeScript نیز از این ویژگی استفاده میکند. هرگاه بخواهید از {} استفاده کنید فقط کافی است از کلید Tab استفاده کنید تا پس از کامپایل به صورت {} تبدیل شود.
Variables & Scope
CoffeeScript یکی از باگهایی را که در نوشتن جاوااسکریپت وجود دارد (متغیرهای سراسری) حل کرده است. در جاوااسکریپت درصورتیکه هنگام تعریف متغیری از کلمهی کلیدی var در پشت اسم متغیر استفاده نشود، به صورت سراسری تعریف میشود. CoffeeScript به سادگی متغیرهای سراسری را حذف میکند. در پشت صحنهی این حذف، اسکریپت نوشته شده را درون یک تابع بدون نام قرار میدهد و با این کار تمامی متغیرها در ناحیهی محلی قرار میگیرند و سپس قبل از نام هر متغیری، کلمهی کلیدی var را قرار میدهد. برای مثال:
myVariable = "vahid"
var myVariable; myVariable = "vahid";
با این حال گاهی اوقات نیاز است که متغیر سراسری تعریف کنید. برای اینکار باید از شیء سراسری موجود در مرورگر (window) یا از روش زیر استفاده کنید:
exports = this exports.MyVariable = "vahid"
Functions
CoffeeScript برای راحتی در نوشتن توابع، کلمه کلیدی function را حذف کرده و به جای آن از <- استفاده میکند. توابع در CoffeeScript میتوانند در یک خط یا به صورت تورفته در چندین خط نوشته شده باشند. آخرین عبارتی که در یک تابع نوشته میشود به صورت ضمنی بازگشت داده میشود. در صورتیکه نیاز به بازگرداندن مقداری در تابع ندارید، از کلمهی return به تنهایی استفاده کنید.
func = -> "vahid"
var func; func = function() { return "vahid"; };
func = -> # An extra line "vahid"
Function arguments
برای تعریف آرگومان در توابع باید قبل از <- از () استفاده کرد و آرگومان هایی را که نیاز است، در داخل آن تعریف کرد. برای مثال:
func = (a, b) -> a * b
var func; func = function(a, b) { return a * b; };
func = (a = 1, b = 2) -> a * b
sum = (nums...) -> result = 0 nums.forEach (n) -> result += n result
var sum, slice = [].slice; sum = function() { var nums, result; nums = 1 <= arguments.length ? slice.call(arguments, 0) : []; result = 0; nums.forEach(function(n) { return result += n; }); return result; };
فراخوانی توابع
برای فراخوانی توابع میتوانید به مانند جاوااسکریپت از با پرانتز () یا ()apply و یا ()call صدا زده شوند. اگرچه مانند Ruby، کامپایلر CoffeeScript میتوانند به صورت اتوماتیک توابعی با حداقل یک آرگومان را فراخوانی کند.
a = "Vahid!" alert a # برابر است با alert(a) alert inspect a # برابر است با alert(inspect(a))
در صورتی که تابعی بدون آرگومان باشد، برای فراخوانی آن بدون نوشتن پرانتز بعد از نام تابع، CoffeeScript نمیتواند تشخیص دهند که این یک تابع است و مانند یک متغیر با آن برخورد میکند. دراین رابطه، رفتار CoffeeScript بسیار شبیه به Python میباشد.