تعتبر الدوال functions من الأوامر الرائعة جدا في لغة الـ Action Script فإنه يمكنك بواسطة الدوال functions أن تقوم بكتابة أوامر معينة ثم تقوم بتنفيذ هذه الأوامر أكثر من مره ربما يكون هذا مشابه للأمر for ولكن الأمر for يقوم بتنفيذ أوامر معينة أكثر من مره وفي نفس الوقت ولكن الدوال functions يمكنك أن تقوم بتنفيذ هذه الأوامر مثلا عندما يبدأ عرض التصميم أو عندما يقوم المستخدم بالضغط على زر ..الخ هذه فائدة الدوال والآن لنقوم بإنشاء دالة ونستخدم الأمر trace لعرض عبارة في نافذة المخرجات طبعا ليس من الضروري استخدام الأمر trace ولكن لتوضيح الفكرة نقوم باستخدامه فقط لا غير إذا قم بكتابة الأمر function ثم مسافة وأكتب اسم الدالة وهي تخضن لنفس شروط تسمية المتغيرات إذا نكتب الاسم displayMessage ثم أفتح قوس وأغلق القوس مره أخرى وضع نقطتين فوق بعض فتظهر لك قائمة بالشكل التالي :

وهنا تضع نوع البيانات التي سوف ينتج من الدالة أو تقوم الدالة بإرجاعها وهذا سوف نتحدث عنة بعد قليل ولكن حاليا سوف نقوم بكتابة Void وهي تخبر الـ Flash أننا لا نريد أن نقوم بإرجاع أي شيء ثم مسافة ونفتح قوس متموج وننتقل لسطر جديد وبداخل الدالة نقوم بكتابة الأمر trace بهذا الشكل trace("Whoa! Functions rule!"); ثم ننتقل لسطر جديد وننهي الأمر بإغلاق القوس المتموج ليكون الأمر في النهاية بهذا الشكل :

والآن قم باختبار العمل سوف تلاحظ أنه لم يظهر أي شيء وهذا ما نحتاج إليه نريد أن نحدد متى سوف تنفذ هذه الأوامر ولكي تنفذ نقوم باستدعاء الدالة إذا في سطر نقوم بكتابة اسم الدالة وهي displayMessage ثم أفتح قوس وأغلقه وأنهي الأمر بفاصلة منقوطة ليكون الناتج كالتالي :

والآن قم باختبار العمل لتظهر لك الشكل التالي :

وإذا أردنا أن يتم تنفيذ الدالة مرتين ببساطة نقوم باستدعائها\ مره أخرى .
والشيء الآخر الذي سوف نتحدث عنة هو العناصر Parameters وهي التي تجعل من الدوال أكثر مرونة More Dynamic في الأمر trace كان تعرض نفس العبارة في كل مره نقوم باستدعاء الدالة حتى وإن غيرت العبارة فإنه سوف يقوم بطباعة نفس العبارة التي قمت بتغييرها ولكن ما نريده أن تتغير العبارة في كل مره نقوم باستدعاء الدالة وهنا يأتي دور العناصر Parameters وببساطة لكي نقوم بإضافة عنصر للدالة هو بتعريف متغير بين القوسين أثناء كتابة الدالة وتعريف المتغير يكون بكتابة اسم المتغير ونوع البيانات فقط وأثناء استدعاء الدالة نقوم بإسناد القيمة للمتغير بين القوسين أيضا إذا لنبدأ بين القوسين أثناء إنشاء الدالة نقوم بتعريف متغير باسم sAdjective نوعه متغير نصي String Data Type ليكون في النهاية كما يلي :

والآن نحدد مكان المتغير في الدالة وما نريد هو أن تتغير العبارة في جملة الاستدعاء الأولى إلى Whoa! Functions totally rule! أما في جملة الاستدعاء الثانية فتكون Whoa! Functions really rule! لذلك سوف نقوم بتغيير الأمر trace كالتالي trace("Whoa! Functions " + sAdjective + " rule!"); ثم في جملة الاستدعاء الأول نقوم بإسناد القيمة "totally" للمتغير sAdjective أما الثاني نقوم بإسناد القيمة "really" لنفس المتغير ليكون في النهاية كالتالي :

قم باختبار العمل لتظهر لك العبارة التالية :

فما الذي حدث عند استدعاء الدالة لأول مره فإن القيمة "totally" سوف تمرر للمتغير sAdjective وذلك سوف تكون قيمة المتغير هي "totally" وهذا معناه أنه سوف يتم استبدال كل متغير باسم sAdjective بالقيمة "totally" لتظهر لك العبارة الأولى Whoa! Functions totally rule! في نافذة المخرجات أما عندما قمنا باستدعاء الدالة للمرة الثانية فإن القيمة "really" سوف تمرر للمتغير sAdjective وذلك سوف تكون قيمة المتغير هي "really" وهذا معناه أنه سوف يتم استبدال كل متغير باسم sAdjective بالقيمة "really" لتظهر لك العبارة الثانية Whoa! Functions really rule! في نافذة المخرجات وإذا أردنا أن نقوم بتعريف متغير آخر يمكننا ذلك ببساطة وذلك بعد تعريف المتغير الأول نضع فاصلة ثم مسافة ونقوم بتعريف المتغير الثاني ليكن sPunct ونوعه متغير نصي String Data Type ثم بداخل الدالة نقوم بتغيير الأمر trace إلى trace("Whoa! Functions " + sAdjective + " rule " + sPunct); وفي جملة الاستدعاء الأولى نقوم بإضافة قيمة المتغير الثاني وذلك بعد إضافة قيمة المتغير الأول ثم نضع فاصلة وبعدها مسافة وأخيرا نقوم بكتابة القيمة "!" أما جملة الاستدعاء الثانية فـ نضع القيمة "!!!" ليكون الأمر في النهاية بهذا الشكل :

والآن قم باختبار العمل لتظهر لك العبارة التالية :

نتحدث الآن عن إرجاع القيم من الدالة Returning a Value from a Function كما قلنا سابقا فإن الكلمة Void تعني أننا لا نريد أن نقوم بإرجاع أي شيء من الدالة ولكن عندما نقوم ببعض العمليات الحسابية والاستفادة من الناتج فإنه يتوجب علينا أن نقوم بإرجاع قيمة من الدالة إذا سوف نقوم الآن بإنشاء دالة وذلك بكتابة الأمر function ثم مسافة واسم الدالة هي calcuateArea ثم نفتح قوس ونقوم بتعريف عنصرين Two Parameters الأول nA أما الثاني فهو nB كلاهما متغيرين من النوع الرقمي Number Data Type ونغلق القوس فنضع نقطتين فوق بعض ونوع البيانات التي تقوم الدالة بإرجاعها هي Number ثم مسافة ونفتح قوس متموج ثم ننتقل لسطر جديد نقوم بتعريف متغير باسم nProduct ونوعه متغير رقمي حمل قيمة حاصل ضرب كل من قيمة المتغيرين nA & nB ليكون الأمر كالتالي var nProduct:Number = nA * nB; ثم ننتقل لسطر جديد وفي حالة أننا نريد أن تقوم الدالة بإرجاع قيمة فإنه يجب استخدام الأمر return على الأقل مره واحدة إذا نقوم بكتابة الأمر return ثم مسافة ونضع القيمة التي نريد من الدالة أن تقوم بإرجاعها وهي حاصل ضرب المتغيرين nA & nB والمخزنة في المتغير nProduct إذا نقوم بكتابة nProduct وننهي الأمر بفاصلة منقوطة ثم ننتقل لسطر جديد وننهي الدالة بإغلاق القوس المتموج ثم ننتقل لسطر جديد ونقوم باستدعاء الدالة بداخل الأمر trace ونسند القيمة 5 للمتغير الأول والقيمة 6 للمتغير الثاني ليكون الأمر trace كالتالي trace(calcuateArea(5, 6)); ويكون الأمر في النهاية بهذا الشكل :

والآن قم باختبار العمل لترى أنه ظهر لك الرقم 30 في نافذة المخرجات والآمر المهم معرفته هنا أنه عندما تنفيذ الأمر return فإنه تلقائيا سوف يخرج من الدالة وحتى وإن كان هناك أوامر تحت الأمر return وهذا ينطبق على حلقات التكرار وربما جمل الشرط أيضا وسوف نتعرف عليها أكثر في الدروس القادمة .
وأخيرا سوف نتكلم عن مجالات الروية Variable Scope في الحقيقة أن الدوال تحب أن تأخذ ولكن لا تحب أن تعطي وراح نتعرف على معنى هذه العبارة الآن في البداية قم بإنشاء دالة باسم displayValue ونوع القيمة التي تقوم بإرجاعها هي Void وبداله نقوم بكتابة الأمر trace كالتالي trace("sValue"); وخارج الدالة نقوم بتعريف متغير باسم sValue ونوعه متغير نصي String Data Type يحمل القيمة "Outside Variable" ثم نقوم باستدعاء الدالة ليكون الأمر في النهاية كالتالي :

عندما نقوم باختبار العمل سوف تلاحظ ظهور العبارة Outside Variable في نافذة المخرجات وذلك لأن الدوال يمكنها أن تستخدم أي متغير يتم تعريفة خارج الدالة والآن لنقوم بتعريف نفس المتغير وهو sValue نوعه متغير نصي يحمل القيمة "Inside Variable" بداخل الدالة يكون الأمر في النهاية بهذا الشكل :

والآن عندما تقوم باختبار العمل سوف تظهر لك العبارة Inside Variable في نافذة المخرجات والسبب هو أنه عندما يكون هناك متغيرين لهما نفس الاسم أحدهما بداخل الدالة والآخر خارجها فإن الدالة سوف تفضل المتغير الذي بداخلها لذلك تم عرض تلك العبارة في نافذة المخرجات وطبعا ليس هناك مشكلة من تعريف متغيرين لها نفس الاسم الأول في داخل الدالة والآخر خارجها لأنها في مناطق مختلفة أو مجال رؤية مختلف Different Scope نفس الشيء يطبق عند تعريف عنصر Parameter للدالة فـ عند حذف تعريف المتغير الموجود داخل الدالة وتعريف عنصر Parameter باسم sValue ونوعه متغير نصي ثم في جملة الاستدعاء نقوم بكتابة القيمة "Parameter" ليكون الأمر في النهاية كالتالي :

فـ عندما تقوم باختبار العمل سوف تلاحظ ظهور العبارة Parameter في نافذة المخرجات وهذا يرجع لنفس السبب السابق أوكي ماذا يحدث في حالة قمنا بتعريف متغير في داخل الدالة وكتابة الأمر trace خارج الدالة لعرض هذه القيمة فيكون الأمر في النهاية بهذا الشكل :

والآن قم باختبار العمل لتظهر لك العبارة undefined وهي تعني أن الأمر trace لم يجد أي متغير باسم sValue وهذا كان معنى الجملة أن الدالة تحب أن تأخذ ولكن لا تحب أن تعطي .
وبذلك نصل لقاعدة وهي كالتالي :

والآن ننتقل للجانب التطبيقي أفتح الملف الذي باسم functions.fla وحدد الإطار الأول من الطبقة Actions وأفتح نافذة الـ Action Script لتظهر لك النافذة التالية :

ركز فقط على المشار له بالسهم أولا قمنا بإنشاء دالة باسم addToMask وهي تقوم بإضافة قطة مربعة واحد كقناع على الصورة وسوف تلاحظ في الأسفل والمشار له بالسهم أن الدالة تنفذ في كل مره نقوم بالضغط على الزر الذي يحمل الـ Instance Name وهو mcAdd وهو الزر الذي على شكل علامة زائد في الأسفل على يمين الصورة والآن قم باختبار العمل وأضغط على زر سوف تلاحظ أنه يتم تنفيذ الدالة في كل مره تقوم بالضغط على الزر كالتالي :

وبقية الأوامر سوف نتعرف عليها مستقبلاً .
لتحميل ملف التطبيق :
http://www.gigasize.com/get.php/-1100215463/functions.rar
تمنياتي لكم بالتوفيق
ســ لمــ لمــ
ســ لمــ لمــ









أضف تعليقا
<<الصفحة الرئيسية