CoffeeScript #7
نویسنده: وحید محمدطاهری
تاریخ: ۱۳۹۴/۰۴/۰۴ ۱۹:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
هر زبانی دارای مجموعهای از اصطلاحات و روش هاست. CoffeeScript نیز از این قاعده مستثنی نیست. در این قسمت میخواهیم مقایسهای بین جاوااسکریپت و CoffeeScript انجام دهیم تا به وسیلهی این مقایسه، مفهوم عملی این زبان را درک کنید.
در جاوااسکریپت وقتی میخواهیم بر روی آرایهای با بیش از یک خانه، کاری را چندین بار انجام دهیم، میتوانیم از تابع ()forEach یا از همان قالب حلقهی for در زبان C استفاده کنیم:
for (var i=0; i < array.length; i++)
myFunction(array[i]);
array.forEach(function(item, i){
myFunction(item)
}); myFunction(item) for item in array
var i, item, len;
for (i = 0, len = array.length; i < len; i++) {
item = array[i];
myFunction(item);
} همانند تابع 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;
})(); یکی دیگر از توابع 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;
}
} 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);
}