function overloading و type checking


السلام عليكم و رحمه الله تعالى و بركاته

نبدأ أولا ب function overloading و هى امكانيه تعامل الوظيفه مع عدد غير محدد من العبارات arguments ، مثلا اذا تم تمرير عبارتين تقوم بعمل شىء بهم ، و لو تم تمرير 3 عبارات تقوم بعمل شىء اخر ، كيف هذا ؟ بالرغم من ان جافاسكربت لا تدعم overloading كما تدعمه JAVA ، إلا اننا يمكننا ادراجها فى وظائف الجافاسكربت بمنتهى السهوله ، أى وظيفه فى الجافاسكربت تحتوى داخلها على خاصيه بإسم arguments هذه الخاصيه عباره عن شبه مصفوفه تحتوى على العبارات التى تم تمريرها إلى الوظيفه ، و تتميز شبه المصفوفه هذه بأنها تحتوى على خاصيه length التى من خلالها تستطيع معرفه عدد العبارات ، لكنها لا تحتوى على وظائف المصفوفه العاديه مثل push و shift ، و المثال التالى يوضح التعامل مع الخاصيه arguments :

function mm(){
alert( arguments.length );
}
mm(“mostafa”); // 1
mm(“iam”,”not”,”alone”); //3
mm(“google”,null) //2

فى المثال السابق قمت بإنشاء وظيفه بإسم mm كل ماتفعله هو عمل alert بعدد العبارات arguments التى مررت لها ، المثال التالى يقوم بجمع اى عدد من العبارات تمرر لها :

function count(){
var result = 0;
for(var i = 0 ; i < arguments.length ; i+=1){
result += arguments[i];
}
alert(result);
}
count(1,2,3); //6
count(100,200,700); // 1000
count(1,”f”,2); // 1f2😦

فى المثال السابق أنشاء وظيفه بإسم count تقوم بعمل loop على الجمل التى تمرر لها و تضيفها على بعضها و تعمل alert للناتج ، لكن المشكله إن الوظيفه دى بتتوقع ان كل الجمل من نوع integer ، يعنى لو مررت جمله من نوع string الناتج هيبقى تشبيك النصوص مع بعض string concatenation، و هذه القضيه تقودنا إلى موضوع ال type checking ، يمكنك معرفه نوع القيمه التى تمرر لوظيفه عن طريق المعامل الاحادى typeof قبل القدوم فى ادخال هذه القيمه فى عمليات حسابيه او غيرها ، عند وضع typeof قبل اى متغير فإنها ترجع نوع المتغير فى صوره نص كما يوضح الكود التالى :

alert( typeof “mostafa”); // “string”
alert( typeof 1556458); // “number”
alert( typeof true); // “boolean”
alert( typeof [1,2,3] ) // “object”
alert( typeof new Object()) // “object”

لابد و انك لاحظت ان typeof لا تميز بين المصفوفه و أى كائن من نوع object و فى الحالتين ترجع object ، و حل هذه المكشله إستخدام الخاصيه constructor التى تقوم بإرجاع ال constructor الذى تم إنشاء هذا الكائن منه كما يوضح الكود التالى :

var x = “mostafa”; alert(x.constructor.name); // “String” ;
var x = 1234565; alert(x.constructor.name); // “Number” ;
var x = true; alert(x.constructor.name); // “Boolean” ;
var x = [1,2,3,4]; alert(x.constructor.name); // “Array” ;
var x = new Object(); alert(x.constructor.name); // “Object” ;

من المثال السابق الخاصيه constructor هى الحل المثالى لل type checking ، بس خلى بالك من ال capital و ال small للنص الذى يمثل كل نوع من كل طريقه ، دلوقتى تعالوا نكتب وظيفه count بإضافه ال type cheking :

function count(){
var result = 0;
for(var i = 0 ; i < arguments.length ; i+=1){
if (arguments[i].constructor.name == “Number”){
result += arguments[i];
}
else {
continue; // escape the current argument if not number
}
}
alert(result);
}
count(1,”f”,2); // 3:mrgreen:

الكلام كله موجود فى كتاب apress: pro javascript techniques من صفحه 19 إلى صفحه 21 .

الأوسمة:

4 تعليقات to “function overloading و type checking”

  1. عمرو فهمي Says:

    🙂 خدعة حلوة🙂

  2. almhajer Says:

    السلام عليكم ورحمةالله وبركاته
    مشكور على المجهود وانا اتابع مواضعيعك ولكن عن بعد العديد منا نحن المبرمجين العرب نفتقر الى بعد النظر والافق الواسع فهذا جلي بالمقارنة ب برمجة الاجانب ونحن العرب
    احب ان ابارك مجهودك ولك الفضل بكشفي العديد من الاشياء التي كنت اجهلها كتوسيع اللغة
    التحميل الزائد وغيرها من الاوامر البرمجية
    ككود لماسبق انا كتبت التالي
    function print_r() {

    if (typeof arguments[0] != ‘string’) {
    var A = [];

    for (var i = 0; i ‘ + arguments[0][i] + “\n\r”);
    }
    return A;
    }
    else {
    return arguments[0];
    }

    }

    وبارك الله فيك شكرا جزيلا

  3. سالم العنزي Says:

    يعطيك العافية اخوي وجزاك الله خير
    واصل ابداعك واحنا متابعين يابطل

  4. غير معروف Says:

    راااااااااااااااااااااااااااااااااااااااائع و جعله الله في ميزان حسناتك

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: