٢.٣ الدوال السهمية¶
تمهيد¶
التمرين 1: أنشئ دالة عادية تجمع عددين.
function addTwoNumbers(num1, num2){
return num1 + num2
}
console.log(addTwoNumbers(2, 4));
النتيجة هي: 6
التمرين 2: أعد تنفيذ التمرين 1، لكن اجعل addTwoNumbers دالة مجهولة.
var addTwoNumbers = function(num1, num2){
return num1 + num2;
}
console.log(addTwoNumbers(2, 4));
النتيجة هي: 6
التمرين 3: حوّل التمرين 1 ؟
(function(num1, num2){
return num1 + num2;
})(2, 4);
النتيجة هي:
التمرين 4: أعد تنفيذ التمرين 3إلى IIFE، واعرض النتيجة في وحدة التحكم.
var result = (function(num1, num2){
return num1 + num2;
})(2,4);
console.log(result);
النتيجة هي: 6
الدالة السهمية¶
التمرين 5: اقرأ الشيفرة التالية وقارنها مع التمرين 2 .
var addTwoNumbers = (num1, num2) => num1 + num2;
console.log(addTwoNumbers(2, 4));
النتيجة هي: 6
كل من التمرين 2 و التمرين 5 ينتج النتيجة نفسها، لكن الشيفرة في التمرين 5 أقصر وأوضح.
الدوال السهمية
تتيح الدوال السهمية صياغة مختصرة للدوال المجهولة، ولها أيضًا اختلافات سلوكية سنناقشها لاحقًا، مثل this. صياغتها هي: (param1, param2, param3) => // Function Statements
التمرين 6: أنشئ دالة سهمية تجمع أربعة أعداد.
var addNumbers = (num1, num2, num3, num4) => num1 + num2 + num3 + num4;
console.log(addNumbers(2, 4, 5, 6));
النتيجة هي: 17
التمرين 7: أنشئ دالة سهمية تضيف 123 إلى سلسلة نصية مُعطاة.
var add123 = str => str + 123;
console.log(add123("Hi"));
النتيجة هي: Hi123
لاحظ أن يمكن حذف القوسين إذا كان للدالة معامل بسيط واحد فقط، كما في التمرين 6.
التمرين 8: أنشئ دالة سهمية بلا معاملات تُرجع 1.
var returns1 = () => 1;
console.log(returns1());
النتيجة هي: 1
التمرين 9: أنشئ دالة سهمية تُرجع مربّع عدد.
var squareOfNum = num => num * num;
console.log(squareOfNum(5));
console.log(squareOfNum(9));
النتيجة كما يلي:
25
81
التمرين 10: أنشئ دالة سهمية تُرجع false إذا لم يُقدَّم اسم المستخدم أو كان فارغًا أو undefined؛ وإلا فتُرجع true.
var isUsernameValid = username => username ? true : false;
console.log(isUsernameValid("Ali"));
console.log(isUsernameValid(""));
console.log(isUsernameValid(null));
console.log(isUsernameValid("Ola"));
console.log(isUsernameValid(undefined));
النتيجة كما يلي:
true
false
false
true
false
التمرين 11: أعد تنفيذ التمرين 9 باستخدام عبارة if العادية. تلميح: ضع عبارة if داخل قوسين معقوفين {}.
var isUsernameValid = username => {
if(username){
return true;
}else{
return false;
}
}
console.log(isUsernameValid("Ali"));
console.log(isUsernameValid(""));
console.log(isUsernameValid(null));
console.log(isUsernameValid("Ola"));
console.log(isUsernameValid(undefined));
ستظهر النتيجة نفسها.
ملاحظة
عند كتابة عدة تعليمات داخل دالة سهمية، ضعها بين قوسين معقوفين، وأضف return إذا أردت إرجاع قيمة.
التمرين 12: فكّر في طريقة أقصر لكتابة التمرين 9 .
var isUsernameValid = username => !!username;
console.log(isUsernameValid("Ali"));
console.log(isUsernameValid(""));
console.log(isUsernameValid(null));
console.log(isUsernameValid("Ola"));
console.log(isUsernameValid(undefined));
ستظهر النتيجة نفسها.
!!value
!value ينفي القيمة: الصادقة تصبح false، والكاذبة تصبح true.
!!value ينفي النتيجة مرة ثانية، فيحوّل القيمة إلى تمثيلها المنطقي: true للقيمة الصادقة وfalse للكاذبة.
نتعلّم تدريجيًا كتابة شيفرة موجزة وواضحة.
التمرين 13: أنشئ دالة سهمية تُرجع طول القيمة إذا كانت سلسلة نصية؛ وإلا فتُرجع false.
var stringLength = value => typeof value === "string" ? value.length : false;
console.log(stringLength("Nawras"));
console.log(stringLength(5));
console.log(stringLength("5"));
console.log(stringLength(true));
console.log(stringLength("Jad"));
console.log(stringLength(undefined));
console.log(stringLength(null));
النتيجة كما يلي:
6
false
1
false
3
false
false
التمرين 14: أنشئ دالة سهمية تفحص بروتوكول الاتصال. إذا كان "https"، فصنّفه آمنًا؛ وإلا فصنّفه غير آمن.
var isSecure = protocol => protocol === "https" ? "secure" : "insecure";
console.log(isSecure("http"));
console.log(isSecure("https"));
النتيجة كما يلي:
insecure
secure
التمرين 15: اجعل الدالة التمرين 14 تعبيرًا مستدعى فورًا (IIFE).
var isSecure = (protocol => protocol === "https" ? "secure" : "insecure")("http");
console.log(isSecure);
النتيجة هي: insecure
التمرين 16: أنشئ دالة سهمية تعرض الأعداد من عدد مُعطى إلى آخر في وحدة التحكم.
var counting = (firstNum, secondNum) => {
for(var i=firstNum; i<= secondNum; i++){
console.log(i);
}
}
counting(5, 9);
النتيجة كما يلي:
5
6
7
8
9
التمرين 17: حوّل التمرين 16 ؟
((firstNum, secondNum) => {
for(var i=firstNum; i<= secondNum; i++){
console.log(i);
}
})(5, 9);
ستظهر النتيجة نفسها.