**الدوال (functions):-
الدالات من الخصائص القوية في لغة الأكشن سكريبت ....وهي تتيح لك تعيين اسم لمجموعة معينة من الأوامر تقوم بمهمة محددة , وبعد تسمية هذه المجموعة من الأوامر يمكنك تنفيذها في أي وقت بمجرد ذكر اسمها ....وهي ما يسمى بعملية الاستدعاء للدالة calling
وتساعدك الدالات على توفير الوقت والجهد لأنها تتيح لك تنفيذ نفس الأوامر أكثر من مرة بمجرد ذكر اسم الدالة و دون الحاجة لإعادة كتابتها مرة أخرى.
كيفية تعريف الدالة واستدعائها :
تتكون الدالة ببساطة من مجموعة من الأوامر ولتعريف الدالة فإنك تستخدم كلمة function ثم تكتب الاسم الذي تريد إعطاءه للدالة ثم القوسين().. بعد ذلك اكتب جميع الأوامر التي إضافتها للدالة داخل القوسين { } ...
تأمل الدالة التالية :"طبعا باعتبار أن لديك فلم جاهز فيه مثلا فيه حركة في عدد من الإطارات وفيه أصوات وغير ذلك "

فالدالة السابقة تسمى dosomething وهي تحتوي على 3 أوامر : الأول لنقل الخط الزمني إلى الإطار 80 ,والثاني لإيقاف جميع الأصوات , والثالث لفتح صفحة ويب المذكورة ...طيب الآن أنشأنا الدالة ولكن كيف نستطيع استدعائها للاستفادة منها ....
ولنفرض أنك أردت أن تجعل زر معين بمجرد الضغط عليه ينفذ الأوامر الثلاثة السابقة ...سنقوم فقط باستدعاء الدالة السابقة كالتالي...

فقط نذكر اسم الدالة ...ففي كل مرة يضغط فيها المستخدم على الزر سيتم استدعاء الدالة وتنفيذ جميع الأوامر الموجودة بها ...
وبإمكانك استدعاء هذه الدالة في أي مكان من الفيلم لأي عدد من المرات .....
ولكن قد تتساءل أين تقوم بكتابة الدالة أي في أي جزء من الفيلم ......!! طبعا تستطيع كتابتها في أي جزء من الفيلم لكن أنصحك بطريقة مريحة في إنشاء الدوال وهي أن تقوم بإنشاء طبقة خاصة بالدوال وتضغط على الإطار الأول فيها ثم تنتقل لنافذة الأكشن وتكتب فيها جميع الدوال وبذلك كلما أردت التعديل أو الإطلاع على الدوال ستجدها مجمعة في مكان واحد و حتى لا يتشتت ذهنك ....
تلميح:عند كتابتك للأمر السابق تستطيع أن تستعدي أكثر من دالة في نفس الحدث ..أي بإمكانك أن تكتب ما يلي ...
بافتراض أننا أنشأنا دالة أخرى باسم ( ) another .............
وأيضا بإمكانك أن تستدعي الدالة ثم تستكمل بعض الأوامر تحتها في نفس الحدث ...
أتمنى أن تكون فكرة الدالات أصبحت مألوفة الآن ....لكن قد تتساءل أيضا ما هي فائدة القوسين بعد اسم الدالة ().؟؟؟؟؟.طيب تستخدم لتمرير القيم إلى الدالات ........و هذا ما سندرسه في السطور التالية....
تمرير القيم إلى الدالات :-
رغم أن الدالة التي أنشأتها في المثال السابق تعمل بصورة جيدة ..إلا إنها تنتقل إلى نفس الإطار ,وتفتح نفس صفحة الويب في كل مرة...وبذلك لن تصبح الدالة عملية لأن رقم الإطار هو هو 80 لن يتغير والموقع c4arab لن يتغير ...ولكن لكي تصبح الدالة عملية أكثر ما رأيك لو تجعل رقم الدالة واسم الموقع هي متغيرات نستطيع تمريرها للدالة ..... وتتغير قيمة المتغيرات التي نمررها للدالة في كل مرة نستدعي فيها الدالة ...
لكي تتضح الفكرة أكثر ركز جيدا في الخطوات التالية :-
سنقوم ببناء الدالة السابقة بطريقة تمرير المتغيرات كالتالي:

هنا وضعنا بدل رقم الإطار المتغير whatFrame ,,,وبدل اسم الموقع كتبنا المتغير whatURL .... دعونا نستدعي الدالة إذا نقر المستخدم على زر معين :-

القيمتين الموجودة في الأمر السابق تم تمريرها للدالة dosomething فتم استخدام القيمة 4 كرقم للإطار.أي بدل المتغير whatFrame .. والقيمة "http://www .yahoo .com" كعنوان للصفحة التي يتم فتحها .أي بدل المتغير getURL..
بإمكانك صنع زر ثاني يستدعي الدالة نفسها بمتغيرات مختلفة عن المتغيرات السابقة كالتالي :--

وبذلك يمكنك استدعاء نفس الدالة في الفيلم الواحد مئات المرات وفي كل مرة ستتغير القيم التي نمررها للدوال...وهذه من نقاط القوة في الدوال ..
***ولنفرض أنك تريد من المستخدم إدخال اسم الموقع ثم تقوم بتمريره للدالة فستكتب الاستدعاء كالتالي:-

بافتراض أن لديك مربع نص اسمه URLadd ونريد من المستخدم إدخال عنوان الويب فيه ثم بعدها سيضغط على الزر عندها سيتم تخزين العنوان الذي كتبه المستخدم في متغير جديد يسمى user ,,بعدها ستمرر القيمة التي بداخل المتغير user إلى الدالة dosomething وعندها تنفذ الأوامر التي بداخل الدالة ..........
وإليك عدة ملاحظات هامة عن تمرير القيم للدوال :
1- يمكنك تمرير الكثير من الوسائط للدالة وليس التقيد باثنين فقط فيمكنك تعريف دوال تمرر قيمة واحدة ,,,وتعريف دوال تمرر 5 قيم ...وهكذا
فالدالة التالية صحيحة وهي تمرر 3 وسائط ::

وسنستدعيها كالتالي:--

فمررنا القيمة 4 للمتغير whatFrame ,,والقيمة "http://www.yahoo.com " مررناها للمتغير whatURL ,,, والقيمة 13 مررناها للمتغير number..
وبالتالي لدينا 3 وسائط ولكن من المهم معرفة أن الإكثار من الوسائط يسبب الكثير من الإرباك ..
2- عند استدعاء الدالة يجب تمرير الوسائط بنفس الترتيب المذكور في الدالة ....
فالاستدعاء السابق سيكون خاطئ لو كتبناه بالطريقة التالية :--

وذلك لأننا مررنا القيم بترتيب خاطئ ....
بقيت نقطة أخيرة وينتهي الدرس .....وهي جعل الدالة تعود بنتيجة :--
افرض أنه يكون لديك مربع نص من النوع input text له الاسم rValue_txt ليكتب المستخدم فيه قيمة نصف القطر للدائرة التي يريد معرفة مساحتها ,,,و مربع نص آخر من النوع dynamic text يحمل الاسم result_txt ليعرض مساحة الدائرة بناء على قيمة نصف القطر التي أدخلها المستخدم ..
في الإطار الأول من الخط الزمني قم بعمل الدالة التالية :

فهنا الدالة ستقوم بحساب المساحة بناء على قيمة ال r التي ستمرر لها .......وستخزن المساحة في المتغير area , وهنا الدالة بعد أن تقوم بتنفيذ الأوامر بداخلها ثم في النهاية ستعود بالقيمة area ..
ثم عملنا زر وكتبنا فيه الأوامر التالية لاستدعاء الدالة KSB و التي سنمرر لها القيمة التي بداخل مربع النص rValue_txt وهي عبارة عن نصف قطر أي دائرة يريد المستخدم معرفة مساحتها ...

سنمرر القيمة التي كتبها المستخدم إلى الدالة KSB بعدها ستقوم الدالة بتنفيذ الأوامر التي بداخلها ثم ستعود بالقيمة area ......
بعد ذلك سنخزن القيمة التي عادت بها الدالة "المساحة" إلى مربع النتيجة result_txt وستطبع الرسالة على الشاشة ....وكل ذلك في أقل من الثانية ...!!!
** أما Math.PI فهي عبارة عن قيمة ال PI وهي 3.14 .......و الـ Mathهو كائن يساعدنا في العمليات الرياضية ما عليك سوى كتابها ثم الدوت وانتظر القائمة المختصرة التي تملي عليك العديد من الmethod مثل ال(sin - cos - abs ...............وغيرها ).....ولكل منها وسائط ....................... .سنتحدث عن الكائنات إنشاء الله في الدرس القادم ..