مشاهدة النسخة كاملة : Action Script Fundamentals part8


الشهاب الحارق
19 Feb 2002, 01:19 AM
السلام عليكم

Action Script Fundamentals part8

الجزء الثاني من الوظيفة


اليوم سيكون لنا تمرين مختلف عن استخدام الوظائف

شاهد هذا المثال وحاول معرفة النصوص البرمجية التي استخدمت به لمناداة الوظيفة عبر الزرين

width = 350 height = 150

لدي صوتين عرفتهما في المكتبة أحدهما yes والأخر no ثم استخدمت هذا النص البرمجي في الوظيفة



function ca(check) {

if(check == 1) {

stopAllSounds();

myyes = new Sound();

myyes.attachSound("yes");

myyes.start(0,9999);
}

if(check == 2) {

stopAllSounds();

myno = new Sound();

myno.attachSound("no");

myno.start(0,9999);

}

}

حاول الإجابة على هذا السؤال علماً أن الجواب موجود في قلب الوظيفة

السؤال ما شكل النصوص البرمجية التي ستكون في الزرين الذين يقومان بتشغيل الصوت ؟


الوظيفة التي ترجع قيمة تقنية جديدة في عالم الوظائف

الطريقة سهلة جداً ومفيدة .

حمل المثال (http://mypage.ayna.com/highspy/ActionScript/function/returndoublevalue.fla)

للعلم الامثلة الاخرى موجودة في الجزء الاول

هذه الوظيفة تقوم بإرجاع حاصل ضرب القيمة بــ 2

width = 550 height = 200


function doubleit(whatNum) {

return dis = whatNum*2;
}


في الزر نكتب هذا النص لمناداة الوظيفة


on(press) {

doubleit(giveit);

}

تعقيب : دائماً وأبداً تذكر أينما سمعت أن الوظيفة ترجع قيمة فإنها لا ترجعها إلا بالأمر return

وهذا الأمر يقوم بعد إرجاع القيمة بتجاهل كل النصوص البرمجية في محيط الوظيفة إذا كانت

مدرجة بعده

تذكر كذلك إذا أردت أن تعرض القيمة بعد الرجوع من العملية الرياضية في نص عرض dynamic text

ستكتب بهذه الطريقة return dis = whatNum*2; حيث dis هو نص العرض و whatNum

هو العنصر الذي سيضرب في العدد 2


الفائدة من هذا الأمر انه يعود بالقيمة متجاوزً أي نص برمجي يكون بعدة

وهو بلا شك اختياري أنشئت كتبته وان شئت تجاهلته ولكن إذا كانت

نصوصك البرمجية فيها مسائل حسابيه تتطلب قطع قراءة المترجم

flash compiler وإرجاع القيمة نستخدم هذا الأمر

حمل هذا الملف للتوضيح عن السؤال الاول (http://shihaab.topcities.com/return.fla)


ستلاحظ فيه أن الرقم لو كان أربعه سيتجاهل إظهار الرسالة

ولو حذفنا الأمر return ستظهر الرسالة


Recursive functions

الوظيفة التي تنادي نفسها هذا النوع من الوظائف شائع الاستخدام عند المبرمجين الأكفاء

وخاص منهم المحنكين في معظم اللغات البرمجية سنستخدم الآن قاعدة عالم الرياضيات factorial


width = 550 height = 400

وهي قاعدة factorial المشهورة حيث الرقم 3 يساوي 6 والسبب انه 1ضارب 2 ضارب 3 يساوي 6

والرقم 5 يساوي 120 لأنه 1ضارب 2 ضارب 3 ضارب 4 ضارب 5 تساوي 120

حيث 1 ضارب 2 يساوي 2 ثم 2 ضارب 3 تساوي 6 و 6 ضارب 4 تساوي 24 ضارب 5 = 120

الوظيفة ستكون بهذه الطريقة علما انه هنالك عدة طرق تؤدي إلى نفس الناتج لقاعدة factorial


function factorial(x) {

if(x<0) {

return undefined;

}else if(x<=1) {

return 1;

}else{

return x * factorial(x-1);

}

display = x;

}




ويكون في الزر هذا النص البرمجي لمنداة الوظيفة


on(press) {

display = factorial(send);

}


عرفنا أنها ستضرب الأرقام ابتداءً من 2 إلى الرقم

الموجود في الخانة x لنفترض أن في الخانة x الرقم 5

ستكون العملية هي 2 ضارب 3 ضارب 4 ضارب 5 يساوي 120

بعد عملية else ضع هذا الكود لترى الناتج trace(x );

سيكون ناتج الضرب هو

5
4
3
2

ألان نعلم أن المتغير x يساوي 5 طيب ثم بعد ذلك سيضرب

بالعدد الذي اقل منه كما هو حال التركيبة المكتوبة وهي

return x * factorial(x-1);

حيث المتغير في الوظيفة نفسها تساوي 4 كونها ناقص

واحد ستضرب بالمتغير بعد عملية الضرب سيكون الباقي

جاهز ليضرب بالعدد في المتغير x ولكن بناقص واحد و ألان اصبح 3

وهكذا حتى يكون الرقم يساوي 2

ستتم عملية الضرب 5 ضارب 4 كون المتغير الأول x يساوي 5

والمتغير المنادى في الوظيفة factorial(x-1 كونه ناقص 1 يساوي 4

بعد الناتج 20 سيضرب ب 3 سيكون الناتج 60 ثم يضرب 2

سيكون الناتج 120

ولو وضعنا التركيبة بهذا الشكل

x = x-1 سيكون الناتج 24 حيث سيقوم مترجم فلاش بتنقيص 1 بعد عملية

الضرب ولن يقوم بجمعها بعد كل عملية ضرب

كما هو حال أن الوظيفة تنادي نفسها

والسبب الطريقة التي كتبنا بها النصوص البرمجية

ليس المهم كيف تعمل هذه القاعدة المهم هو كيف

تستخدم التركيبة لأنه القاعدة شيء عارض أما التركيبة فهي شيء متداول

و لأنه احتياجنا كان يستلزم علينا استخدامها ولو لم يكن لما فعلنا


Function literals

الوظيفة الحرفية هذه النوعية من الوظائف تستخدم بشكل توقيتي حيث أنها تؤدي عمل ثم تموت في ساعتها

وذلك أنها ليس لها اسم ولا كيان حقيقي و إنما مجرد مهام في نفس سياق النصوص البرمجية. ولكن نستطيع

أن نجعلها ذات فائدة ولا تموت في ساعتها إذا ما تم إسنادها في متغير وتم بعد ذلك مناداتها عن طريق ذلك المتغير

وهذا النوع من الوظائف قليل الاستخدام وهو بمثابة المنقرض حقيقةً وحتى هذه الساعة ما وجدت أحد استخدامها

بشكل حقيقي إلا على سبيل الشرح فقط لا غير المهم التركيبة النصية لهذا المتغير تكون كالتالي


Function (param1,param2,…paramn) {statements};

سنرى الآن كيف نسند هذا النوع من الوظائف إلى متغير ما

mousecoords = function () {return [_xmouse, _ymouse ];};


ثم بعد ذلك ننادي هذه الوظيفة كالمعتاد mousecoords();



مراجعة على السريع

لإنشاء الوظيفة

نكتب اسم الوظيفة ثم القوسين ثم القوس المنحني وهو بداية ال block

ثم بعد ذلك نهاية ال block بالقوس المنحني المقابل

نتذكر أن العناصر تفصل بينها الفاصلة السفلية ,

نتذكر أن العناصر لابد أن تطابق المهام التي ستكلف بها لتتضح الصورة عند التعامل معها

نتذكر أن ترتيب العناصر في الزر لمناداتها يتطابق مع ترتيب العناصر

في الوظيفة فالأولى للأول .


موفقين إنشاء الله يا اخوتي ونصيحتي لكم يا أحبائي أن لا تتوقفوا عن طلب العلم آي كان

ولا ترتووا من دلونا هذا فقط بل أبحرُ في عباب الإنترنت حيث المصادر والمعلومات

وحاولوا طرح الأسئلة بشتى أنواعها ومراتبها ولا حرج عليكم في ذلك


وقد وصلنا إلى ختام الجزء الثاني من الوظائف

ولنا إنشاء الله جزء ثالث في القريب العاجل .

هذا والله أعلى واعلم


السلام عليكم

qwqwasd
19 Feb 2002, 02:29 AM
بسم الله الرحمن الرحيم

سلمت يداك ..... وبارك الله فيك ..... وزادنا من أمثالك

tamimi
19 Feb 2002, 03:30 PM
لسلام عليكم
شكراا اخوي الشهاب على هذا الدرس الحلو :)
والسلام عليكم

الشهاب الحارق
19 Feb 2002, 06:55 PM
السلام عليكم

وزادنا من امثالك يا اخويه أبومحمد

ولا شكر على واااااااااااااجب يالغالي يا التميمي

كلاشن كوف
19 Feb 2002, 07:11 PM
تســلم اخوي على درسك الرائع (كما العـادة) ووفقك الله <الان بطبق الدرس>
والسلام عليكم ورحمة الله وبركاته..