اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
چهار دقیقه
اصطلاحات عمومی CoffeeScript
هر زبانی دارای مجموعهای از اصطلاحات و روش هاست. CoffeeScript نیز از این قاعده مستثنی نیست. در این قسمت میخواهیم مقایسهای بین جاوااسکریپت و CoffeeScript انجام دهیم تا به وسیلهی این مقایسه، مفهوم عملی این زبان را درک کنید.
Each
در جاوااسکریپت وقتی میخواهیم بر روی آرایهای با بیش از یک خانه، کاری را چندین بار انجام دهیم، میتوانیم از تابع ()forEach یا از همان قالب حلقهی for در زبان C استفاده کنیم:
for (var i=0; i < array.length; i++) myFunction(array[i]); array.forEach(function(item, i){ myFunction(item) });
حال به نحوهی کارکرد CoffeeScript دقت کنید.
myFunction(item) for item in array
var i, item, len; for (i = 0, len = array.length; i < len; i++) { item = array[i]; myFunction(item); }
Map
همانند تابع forEach که در استاندارد ES5 قرار داشت، تابع دیگری به نام ()map وجود دارد که از نظر syntax بسیار خلاصهتر از حلقهی for میباشد. ولی متاسفانه همانند تابع forEach، این تابع نیز به دلیل فراخوانی تابع، بسیار کندتر از for اجرا میشود.
var result = [] for (var i=0; i < array.length; i++) result.push(array[i].name) var result = array.map(function(item, i){ return item.name; });
result = (item.name for item in array)
نتیجهی کامپایل مثال بالا میشود:
var item, result; result = (function() { var i, len, results; results = []; for (i = 0, len = array.length; i < len; i++) { item = array[i]; results.push(item.name); } return results; })();
Select
یکی دیگر از توابع ES5، تابع ()filter است که برای کاهش خانههای آرایه استفاده میشود.
var result = [] for (var i=0; i < array.length; i++) if (array[i].name == "test") result.push(array[i]) result = array.filter(function(item, i){ return item.name == "test" });
result = (item for item in array when item.name is "test")
var item, result; result = (function() { var i, len, results; results = []; for (i = 0, len = array.length; i < len; i++) { item = array[i]; if (item.name === "test") { results.push(item); } } return results; })();
نکتهی مهم: در صورت فراموشی اضافه کردن () در اطراف حلقهی نوشته شده، نتیجهی صحیحی تولید نخواهد شد و نتها آخرین عضو از خروجی را باز میگرداند.
var i, item, len, result; for (i = 0, len = array.length; i < len; i++) { item = array[i]; if (item.name === "test") { result = item; } }
قوهی درک CoffeeScript بسیار بالا و انعطاف پذیر است، به مثال زیر توجه کنید:
passed = [] failed = [] (if score > 60 then passed else failed).push score for score in [49, 58, 76, 82, 88, 90] # Or passed = (score for score in scores when score > 60)
passed = [] failed = [] for score in [49, 58, 76, 82, 88, 90] (if score > 60 then passed else failed).push score
var failed, i, len, passed, ref, score; passed = []; failed = []; ref = [49, 58, 76, 82, 88, 90]; for (i = 0, len = ref.length; i < len; i++) { score = ref[i]; (score > 60 ? passed : failed).push(score); }