آموزش اکشن اسکریپت 3 ActionScript
#1
Note 
[تصویر:  13608513661.jpg]

آموزش مقدماتی اکشن اسکریپت

براي شروع طبق روال هميشگي آغاز هر آموزش،بهتره كه يه نگاه اجمالي به actionscript و تاريخچه اون بندازيم.
اولين نسخه برنامه فلش توسط شركت ماكرومديا در سال 1996 ارائه شد. فلش در نسخه هاي اوليه با هدف ايجاد برنامه اي براي ساخت انيميشن توسط كامپيوتر شكل گرفت ولي بعدها به صورت حريصانه (و البته قدرتمندانه!) گامهاي بعدي خودش رو در زمينه هايي هچون وب ، پروژه هاي مالتي مديا ، موبايل و حتي برنامه هاي دسكتاپ هم برداشت. برنامه نويسي به شكل ساده از همون نسخه هاي اول با فلش همراه بود.
از نسخه هاي 1 تا 3 نام زبان برنامه نويسي فشل، "لينگو لايت" بود. ولي اين زبان از نسخه 4 به بعد به " action script " تغيير نام داد تا با طي روند رو به رشدش خودش در نسخه هاي بعدي به action script 3 رسيد.


خوب حالا ببينيم اصلا action script به چه دردي مي خوره؟
با چند مثال ساده شروع مي كنيم؟
1) فرض كنيد در حال ساخت يه انيمشين هستيد و هنرپيشه نقش اول شما (مثلا فردينBig Grin) تو سكانس پاياني توسط آدم بداي فيلم مورد حمله قرار مي گيره و يه تير بهش شليك ميشه. شما مي خواين برا اين كه تاثير بيشتري روي بينندتون بذارين صحنه اي رو كه تير به هنرپيشه برخورد مي كنه رو چند بار به طور سريع دنبال هم تكرار كنيد . اولين راهي كه به ذهن مي رسه اينه كه اون صحنه رو يه بار درست كنيد و فريم هاي مربوط به اون رو 3 - 4 بار دنبال هم كپي و paste كنين. شايد در نظر اول راه جالي باشه اما فكر كنيد شما مي خوايد اين فيلم رو روي يه سايت قرار بدين و بيننده هاي شما يوزرهاي ايراني با اينترنت dialup هستن. اين كار شما باعث چي ميشه؟ خوب معلومه افزايش حجم و بالتبع كاهش سرعت لود!!! تازه ممكنه شما كارگردان خوش ذوقي باشين و بخواين از اين صحنه هاي تاثير گذار زياد تو فيلمتون داشته باشين! اون وقته كه ديگه واويلا! خوب حالا اينجا مي تونين از يه زباني به نام action script استفاده كنين. به اين صورت كه تو اون صحنه ي مربوط به تير خوردن اون فريم هايي كه قراره تكرار بشن رو در انتهاشون بنويسين " اگه به اين نقطه رسيدي برگرد به فريم اول مربوط به قسمت تير خوردن و اين كار رو 3 بار انجام بده" به همين راحتي با يه دستور كوچيك شما كار چندصد يا حتي چندين هزار فريم رو انجام مي دين!!!

2) شما در حال ساخت يه سي دي مالتي مديا براي معرفي محصولات يك شركت هستيد. مثلا پوشك بچه!!! مي خوايد با كليك بر روي يك محصول ويژگيهاي اون رو روي صفحه نمايش بدين. اينجاست كه باز هم بايد از action script استمداد بطلبيد و با اون به برنامه فلش حالي كنين كه "اگر روي اين دكمه كليك شد اين صفحه رو نشون بده"

3) شما براي يه شركت يه وبسايت با فلش طراحي كردين. مدير شركت از شما مي خواد كه در قسمت تماس با يه فرم ايجاد كنيد كه مشتريها بتونن سفارشات خودشون رو بصورت آنلاين از طريق فرم به شركت بدن. باز هم كار شما به action script گير مي كنه و شما بوسيله اين زبان باسد به برنامه فلش بگين كه " اگر قسمت هاي سفارش فرم پر بود و كليد ارسال زده شد اطلاعات موجود در فرم رو بفرست به صندوق ميل شركت"

و خيلي چيزاي ديگه كه در ادامه بهشون خواهيم پرداخت. لپ كلام هر موجودي يه زبوني داره كه بشه باهاش ارتباط برقرار كرد زبان صحبت كردن و دستور داده به برنامه فلش هم action script هست. همين!!!

اگر اشتباه نكنم، امتياز فلش از نسخه 7 (يا 8) توسط شركت adobe از شركت macromedia خريده شد و روند صعودي فلش سرعت بيشتري گرفت و همچنين برنامه ها و تكنولوژي هاي وابسته جديدي نظير flex ، air ، flash lite هم معرفي شدند كه به محبوبيت و كاربردي تر شدن اين برنامه كمك كردند.
شايد بتوان مهمترين تحول ايجاد شده توسط adobe را براي فلش ارائه نسخه سوم action script دانست.
يكي از ويژگيهاي زبان action script 3 اينه كه بر خلاف دو نسخه قبلي اجازه ماست مالي رو به كاربر نمي ده!!! و برنامه نويس رو مجبور مي كنه تا برنامه خودش رو كاملا اصولي و تو يه چارچوب معين بنويسه. اينكار باعث پديد اومدن ويژگيهاي بسيار خوبي ميشه كه انشاء الله اگه خدا عمري بده تو جلسه هاي آينده باهاشون آشنا خواهيم شد.
syntax( گرامر) اين زبان بسيار شبيه به گرامر زبانهاي معروف برنامه نويسي نظير java و #c هست. بنابر اين كسايي كه قبلا با اين زبان ها آشنايي داشتن مي تونن به راحتي با اين زبان ارتباط برقرار كنن.
ويژگي بعدي اين زبان اينه كه مثل همون دو تا زباني كه در بالا بهشون اشاره شد شي گرا است (object-oriented) انشاء الله در درس هاي آينده مفاهيم شي گرايي(oop --- مخفف object oriented programing ) رو در موردشون بحث خواهيم كرد.
هسته زبان action script 3 بر پايه خصوصيات زبان (ECMAScript(4th edition نوشته شده. زبان معروف اسكريپتينگ javascript هم از ECMAScript براي هسته زبان خودش استفاده مي كنه. اين استفاده مشترك باعث شده شركت َAdobe به شركت موزيلا (توسعه دهدنه مرورگرفايرفاكس ) پيشنهاد كنه در نسخه 3 اين مرورگر javascript 2 رو با كدهايي بر مبناي action script پياده سازي كنه. والا ديگه خبر ندارم كه موزيلا اين كار رو كرد يا نه؟!!

action script مي تونه روي سه نوع محيط كاربري استفاده بشه Adobe AIR, Flash Player,Flash Lite (البته فلش لايت action script 3 پشتيباني نمي كنه. ولي action script نسخه 2 رو پشتيباني مي كنه)


فكر مي كنم براي معرفي ديگه همين قدر كافي باشه. درس بعدي رو با معرفي مفاهيم پايه اي و كلمات كليدي action script ادامه خواهيم داد.

منبع اموزش: majidonline.com

پاسخ
#2
Note 
خوب اين درس رو با معرفي يه سري كلمات كليدي و مفاهيم بنيادي برنامه نويسي شروع مي كنيم و مابينش يه مقدار بيشتر از actionscrip3 خواهيم گفت.
يك برنامه (program) به مجموعه اي از دستورات (instructions) گفته مي شه كه مي تونه بوسيله يه نرم افزار يا كامپوتر مي تونه اجرا بشه.
اون دستوراتي رو كه توسط برنامه نويس نوشته مي شه source code ناميده مي شه. دستورات بوسيله syntax يا گرامر به كامپايلر (اين كلمه در پايين توضيح داده شده) تفهيم مي شن. syntax در حقيقت يه جور فرم دادن به دستوراته. مثل زبان فارسي كه براي بيان جملاتش دستور زبان داريم زبانهاي برنامه نويسي هم براي اينكه به كامپايلر تفهيم بشن به syntax متوسل مي شن.

براي نوشتن actionscrip3 شما فقط به جايي نياز دارين كه بتونين توش بنويسين حالا مي خواد notepad باشه يا word يا هر ويرايشگر متن ديگه!!!
اما اكثر برنامه نويسا براي نوشتن actionscrip3 از ابزارهاي ويژه شركت Adobe مثل ابزار ويژه محيط خود فلش يا flex builder استفاده مي كنن. (flex builder هم از actionscrip3 پشتيباني مي كنه و از MXML كه يه زبان برمبناي xml براي توصيف محيط ارتباط كاربريه (intrface))
برنامه هاي نوشته شده توسط actionscrip3 مي تونن توسط سه نوع محيط نرم افزاري شناخته و اجرا بشن : Adobe Air - Flash liteوَ Adobe Flash Player. در ادامه درسها در مورد هر كدومشون توضيح خواهيم داد. ولي اين رو بدونين كه هر كدوم از اين سه نوع محيط رو در اصطلاح flash client runtime environments مينامند و هر كدومشون يه نوع ماشين تو دلشون دارن كه مي تونن actionscrip3 رو به وسيله اون اجرا كنن. (AVM- action script virtual machine)
قبل از اينكه action script توسط Flash client runtime environments (هر كدوم از اون سه محيطي كه در بالا گفته شد) اجرا بشه بايد از كدهاي نوشته شده توسط برنامه نويس همون source code تبديل بشه به كد دودويي ( تنها زباني كه كامپيوتر حاليشه) اين تبديل توسط كامپايلر (compiler) انجام ميشه. پس تا اينجا فهميديم كه ما براي دستور دادن به كامپوتر ابتدا دستورات خودمون رو توسط يه گرامر خاص يا syntax مي نويسيم كه تا حدي به زبان خودمون شبيه و بعد يه موجودي به نام كامپايلر مياد و اين نوشته هاي ما رو به زبان دودويي (صفر و يك) تبديل مي كنه تا كامپوتر اون رو بفهمه.
action Script هاي كامپايل شده با پسوند swf شناخته مي شن. پس swf حاوي كدهاي كامپايل شده actionscript و مدياهاي مورد نياز action script هست .(البته به صورت دودويي!!!)

پس اگه بخوايم به صورت خلاصه اين درس رو تو چند جمله مرور كنيم مي تونيم بگيم كه يه برنامه Action script مجموعه اي از دستورالعمل هاست كه مي تونن به وسيله يكي از محيط هاي : Adobe Air- Flash liet يا Flash Player اجرا بشن.
Action script مي تونه بوسيله يه ويراشگر متن مثل Notepad يا ابزارهاي استاندارد Adobe (كه البته امكانات بسيار ويژه اي دارن) نوشته بشه.
براي اجراي كدهاي Action script ابتدا بايد اونا رو كامپايل كنيم تا براي ماشين قابل فهم باشن كه كامپايلر ويژه اينكار همراه خود برنامه فلش هست و شما با يك كليك مي تونين كد خودتون رو كامپايل كنين. (يا به وسيله Flex Builder 2)

قاعدتا بحثاي مقدماتي هر موضوعي براي كسايي كه تازه شروع كردن يه كم خسته كننده و نامفهوم هستن. اگه زياد ازشون سر در نمي آريد (البته تازه كارها) زياد نگران نباشيد. تو درساي بعدي كه با مثال همراه هستن مفهومشون رو به صورت عملي لمس مي كنيد و براتون روشن ميشن.
تو درس بعدي مفاهيم مفاهيم بنيادي تر و كاربردي تري رو توضيح خواهيم داد و انشاء الله اولين كد خودمون رو با فلش خواهيم نوشت .

پاسخ
#3
Note 
درس رو با معرفي يه سري مفاهيم و اصطلاحات كليدي ادامه مي ديم(البته اين مفاهيم تقريبا تو همه زبانهاي برنامه نويسي مشترك هستند):

البته قبل از شروع مفاهيم يه چندتا نكته كوچيك رو بگم كه تو مثالهايي كه ميارم دچار مشكل نشيم.
1- دستوراي اكشن اسكريپت از بالا به پايين و از چپ به راست اجرا ميشن. يعني ابتدا خط اول از چپ به راست تا آخر سپس خط دوم از چپ به راست تا آخر و بعد خط سوم...
2- در حالت استاندارد در زبان اكشن اسكريپت هر دستور در هر خط به يك سيمي كالن (Wink خطم ميشه.
3- دستور trace : يه دستوريه كه وقتي كدمون رو مي نويسيم (نه موقع اجرا!) بتونيم يه سري چيزا رو تست كنيم مثلا مقدار متغيرامون رو. اينا رو يادتون باشه كه تا آخر درسا ازشوم استفاده مي كنيم.

1- متغيرها و انواع داده (Variables and Data Types) :
به صورت ساده متغيرها جعبه هايي هستند كه ما داده ها و يا اطلاعاتمون رو توي اونا ذخيره مي كنيم تا بتونيم بعدا ازشون استفاده كنيم. براي مثال شما مي خواين توي يه سايت اينترنتي username ها و password هاتون رو ذخيره كنين. شما ميتونيد اونا رو توي يه سري متغير ذخيره كنيد. براي ساختن يه متغير فقط كافيه شما براي اون يه اسم منحصر به فرد در نظر بگيريد تا از ساير متغيرهاي برنامه تون متمايز باشه. بعد از ايجاد اون شما مي تونيد بهش مقدار بدين براي مثال دستور زير مقدار 1 رو به myVariable اختصاص ميده:

myVariable = 1;
نكته 1 : براي نامگذاري متغيير بهتره كه نامي متناسب با كاركردي كه دارن بهشون اختصاص بديم مثلا اگه مي خوايم يه پسورد توشون ذخيره كنيم مي تونيم براشون اسم pass يا password رو انتخاب كنيم.
نكته 2: نامگذاري متغيرها در بعضي موارد محدوديت داره مثلا نمي تونيم نام يه متغير رو با عدد آغاز كنيم يا نمي تونيم براي نام گذاري اونا از كلمات كليدي خود زبان استفاده كنيم. اگه هر كدوم از اين اشتباهات رو مرتكب بشين actionScript شما رو اگاه خواهد كرد و اجازه اين كار رو بهتون نخواهد داد.
وقتي كه ما مي خوايم براي اولين بار از يك متغير تو برناممون استفاده كنيم بايد اون رو با كلمه كليدي var اعلان كنيم. همچنين براي اعلان متغير در بار اول بايد نوع ديتايي(اطلاعاتي) كه مي خوايم تو متغير ذخيره بشه رو مشخص كنيم براي مثال دستور زير براي اولين بار يك متغير از نوع عددي (انواع متغير رو در ادامه توضيح خواهيم داد) با اسم myVariable اعلان مي كنه:
! همونطور كه مي بينيد اديتور فلش كلمات كليدي زبان اكشن اسكريپت رو به صورت رنگي در مياره.

بعضي از انواع داده در جدول زير اومدن:
همچنين انواع ديگه اي از متغير ها هم وجود دارن كه بوسيله كلاسي كه مي خوايم استفاده كنيم تعريف ميشن كه در ادمه توضيح خواهيم داد.
(مثلا دستور روبرو از كلاس MovieClip ّراي ساختن يه MovieClip در زمان اجرا استفاده مي كنه )
اين كه 'گفتم براي مثال بود. لازم نيست نگران باشيد! در ادامه درسها بيشتر در موردش صحبت خواهيم كرد.

2 - عبارات شرطي(conditionals) :
بعضي مواقع ممكنه كه كد ما نياز به تصميم گيري داشته باشيه. يعني در صورت وجود يه شرايطي يه كارايي رو انجام بده.
عبارات شرطي بر دو نوع هستند if و switch .

if
به همراه اين كلمه كليدي يك جفت پرانتز مياد . در صورتيكه عبارت داخل اين پرانتز true (صحيح) باشه دستوراتي كه در حدفاصل دو آكولاد بعد از پرانتزها هستند اجرا ميشن در غير اينصورت اين دستورات اجرا نميشن و برنامه اونا رو ناديده مي گيره.


بهتره با يه مثال واضح تر توضيح بديم:

خوب در دستورات بالا ابتدا يه متغير از با نام a از نوع عدد در نظر مي گيريم و مقدار 1 رو بهش اختصاص ميديم. بعد b رو در نظر ميگيريم از نوع رشته (مقدار دهي به متغيرهاي رشته با دوتا آكولاد صورت مي گيره) و مقدار hello رو بهش اختصاص ميديم. و متغير سومي رو هم از نوع بولي در نظر مي گيريم و مقدار true رو بهش اختصاص ميديم.
در خط بعد مي گيم اگه مقدار a ّبرابر با 1 بود اونوقت در پنجره خروجي (trace) بنويس optional a. توجه داشته باشيد اينجام چون مي خواستيم رشته چاپ كنيم اون رو داخل " " گذاشتيم.

شايد در مورد عبارت داخل پرانتز براتون سوال پيش بياد كه چرا از == استفاده كرديم؟
جواب: هر موقعي كه بخوايم دو عبارت رو از نظر تساوي نسبت به هم اعتبارسنجي كنيم از اين عبارت استفاده مي كنيم. واضح تر بگم اگه بخوايم يه مقداري رو به يه متغير نسبت بديم از = استفاده مي كنيم مثلا a=1 يعني 1 رو بريز تو متغير a. اما a==1 يعني اينكه "آيا a مساوي 1 است؟" پس عبارت دوم هميشه مقدار "بله هست" (true) و يا "خير نيست"(false) رو بر مي گردونه.

همچنين عبارات مقايسه اي ديگه هم با معنيشون در پايين اومدن:
"a>b" = آيا a بزرگتر از است؟
"a<b" = آيا a كوچكتر از است؟
"a>=b" = آيا a بزرگتر يا مساوي از است؟
"a<=b" = آيا a بزرگتر يا مساوي از است؟

علاوه بر عبارات مقايسه اي عبارات منطقي رو هم داريم كه در پايين توضيح مي ديم و يه مثال هم مي زنيم:

عملگر "&&": معني "و" تو زبان فارسي رو مي ده و اسمش هست AND.
عملگر "||" : معني "يا" تو زبان فارسي رو مي ده و بهش ميگن OR.
عملگر "!": معني "نچ" . فارسي رو مي ده و صداش مي زنن NOT.

مثال زير همه چيز رو مشخص مي كنه:
توضيح : كد داره ميگه كه اگه مقدار متغير a برابر 1 بود و مقدار b برابر با goodbye بود. در پنجره trace چاپ كن options a and b.
با توجه به مقدار متغير ها كه تو كد قبلي داشتيم چون مقدار b ّرابر با hello بود اينجا هر دوتا شرط برقرار نيست پس عبارات داخل آكولاد اجرا نميشه و چيزي در پنجره trace چاپ نمي شه. نكته: در عملگرAND هر دو عبارت چپ و راست اون بايد برقرار باشن يا به عبارتي مقدار true داشته باشن.

مثال بعدي :
در اين مثال در صورتي دستورات داخل آكولاد اجرا ميشه كه طرف راست يا طرف چپ عبارت برقرار باشه . به عبارت ديگه يكي از دوعبارت يا هر دو عبارت دو طرف عملگر || برقرار باشن. پس در اين مثال عبارت options a and b در پجره trace چاپ ميشه. چو اگرچه عبارت b برقرار نيست ولي همونكه a برقراره كافيه

مثال بعدي:
در اين مثال ميگه كه اگر true ، c نبود چاپ كن not option c . چون در بالا false ، c اعلان شده بود شرط برقرار است اين عبارت چاپ مي شه.

فكر كنم برا اين جلسه ديگه بسه! در جلسه بعدي در مورد if بيشتر توضيح مي ديم و اگه مجالي بود switch رو هم توضيح مي ديم.

پانوشت: اگه درس خسته كننده به نظر مياد كاملا يه امر عاديه. اينا مسائل مقدماتيه هر زبان برنامه نويسيه كه بايد خوب ياد گرفته بشن. چند تا درس ديگه كه بگذره كاملا وارد كدنويسي ميشيم و ديگه درسا خسته كننده نخواهند بود .

پاسخ
#4
Note 
جلسه قبل رو با بحث نيمه كاره if تموم كرده بوديم بنابر اين با همين مبحث اين جلسه رو شروع مي كنيم.
خوب در جلسه قبل گفته بوديم كه براي گذاشتن شرط رو دستور العمل هامون از كلمه كليدي if استفاده مي كنيم و چندتا مثال هم در رابطه با اون گفتيم. حالا فرض كنيم كه مي خوايم به كامپوتر بگيم "اگه اين شرط برقرار بود اين كار رو بكن وگرنه كار دوم رو انجام بده" . قسمت اول رو كه در جلسه قبلي گفتيم با if انجام ميشه قسمت دوم رو با كلمه كليدي else انجام ميديم. else بلافاصله بعد از آكولاد بسته ي if مياد و بعد از خودش آكولاد رو باز مي كنه و دستورات مربوط به خودش رو در محدوده دوتا آكولاد باز و بسته قرار ميده. قطعه كد زير همه چيز رو مشخص مي كنه.

خط اول ميگه كه اگه a برابر با 1 نبود چاپ كن "a doesnot equal 1" و خط سوم ميگه در غير اينصورت( يعني در صورتيكه a برابر با 1 بود) چاپ كن "a does equal 1".

تا اينجا تونستيم كه توسط دستور if و متعلقات اون دو تا شرط رو چك كنيم و بنا به شرايط كار خاصي رو كه مدنظرمون هست انجام بديم. حالا اگه بخوايم بيش از 2 تا شرط رو چك كنيم چي؟ مثلا بخوايم به كامپيوتر بفهمونيم كه اگه شرط 1 برقرار بود كار يك رو انجام بده، اگه شرط 2 برقرار بود كار 2 رو انجام بده، اگه شرط 3 برقرار بود كار 3 رو انجام بده و .... اينجاست كه از كلمه كليدي elseif براي حل مشكلمون كمك مي گيريم.

مثال زير رو ببينيد:
كد بالا در خط اول و دوم به كامپوتر مي گه كه اگه a برابر با 1 بود چاپ كن "option a" و اگر مقدار b برابر با hello بود چاپ كن "option b" و در غير اينصورت( يعني در صورتي كه هر كدوم از دوتا حالت بالا برقرار نباشه) چاپ كن "Option other".

در مورد بحث if به مقدار مقدماتي فكر مي كنم كافي باشه. در درس هاي آينده و مثالهاي اونا كاملا با كاربردها و تكنيك هاي if و هيات همراه Big Grin آشنا خواهيم شد.

switch

switch در حقيقت كار كل if و هيات همراهش(elseif و else) رو با هم انجام ميده. به صورتي كه يك متغير رو در نظر مي گيره و در داخل خودش تمامي شرط ها رو يك به يك چك مي كنه و در صورت برقراري هر شرط كار مربوط به اون رو انجام ميده.
switch داخل خودش سه تا كلمه كليدي داره:
1) كلمه كليدي case : اين كلمه در حقيقت كار چك كردن شرط ها رو انجام ميده(كاربردي شبيه elseif)
2) كلمه كليدي break : اين كلمه هم حد فاصل اجراي دستورات رو مشخص ميكنه يعني دستورات پتيين اون اجرا نمي شن!!!
3) كلمه كليدي default: كارايي شبيه به else داره. يعني هر شرطي غير از شروط بالايي برقرار باشه.

مثال زير همه چيز رو روشن مي كنه:
كد با كلمه كليدي switch شروع ميشه و a داخل آكولاد نشون مي ده كه مي خوايم شرطاي اتفاق افتاده رويa رو بررسي كنيم
در خط دوم داريم :case 1 يعني اگر a باشه (توجه كنيد كه انتهاي هر case بايد : بياد) خط بعد ميگه چاپ كن "one" و break ميگه كه وقتي case 1 برقرار بود دستوراتي كه تا بالاي سر من نوشته شده رو اجرا كن. توجه: اگه اين break رو نذاريم دستورات تا break بعدي اجرا مي شن.
بقيه case ها هم همينطور ادامه دارن و به ترتيب گفته شده كار خودشون رو مي كنن!
default هم ميگه كه اگه هيچ كدوم از case هاي بالايي برقرار نبودن بنويس "other" . و با آكولاد switch ما تموم ميشه.

حلقه هاي تكرار (loop) ها:

با ذكر يه مثال بحث رو شروع مي كنيم.فرض كنيد شما تو يه پروژه برنامه نويسي مجبور ميشين يه كار ثابت رو چندين بار پشت سر هم انجام بدين. مثلا كد شما بايد يه ليست 20 نفره رو بررسي كنه و يه اسم خاص رو تو اون پيدا كنه. براي اينكار كد شما بايد 20 بار عمل چك كردن اسم رو انجام بده. خوب اولين راهي كه به ذهنمون ميرسه اينه كه به كامپوتر بگيم:
کد:
"اسم اول رو چك كن اگر برابر بود چاپ كن"
"اسم دوم رو چك كن اگر برابر بود چاپ كن"
"اسم  سوم رو چك كن اگر برابر بود چاپ كن"
.
.
.
"اسم بيستم رو چك كن اگر برابر بود چاپ كن"

اين دقيقا همون كاري بود كه من در ابتداي آشنايي با دنياي كامپوتر موقع كدنويسي انجام ميدادمBig Grin. البته با زبان qbasic يادش به خير...
شايد براي 20 بار كار ساده اي باشه ولي حالا فرض كنيد همين عمل بايد 10000 بار انجام بشه. پس با اين حساب شما بايد براي همين كار ساده 10000 خط كد بنويسيد.
خوب اينجاست كه مي تونيم قبول كنيم دستوري براي انجام اين كار بايد وجود داشته باشه. اينچنين كارهايي رو حلقه هاي تكرار يا به عبارت كامپوتري loop ها انجام مي دن.

حلقه هاي تكرار بر دو نوع هستند:
1- حلقه تكرار for
2- حلقه تكرار while


حلقه تكرار for :

حلقه for كارهايي رو كه بهش مربوط ميشه رو براي تعداد مشخصي دفعه انجام ميده. يعني برنامه نويس خودش براي for مشخص مي كنه كه چند بار كار مربوط به خودش رو انجام بده.
براي معرفي for و ساختار اون مثال زير رو پيگيري مي كنيم.
در مثالي كه بيان مي كنيم قصد داريم عبارت hello رو 3 بار چاپ كنيم. اولين كاري كه مي كنيم نوشتن كلمه كليدي for هست. بعد از اون شرايط رو بايد براي for مشخص كنيم. شرايط رو در داخل يك جفت پرانتز باز و بسته براي for بيان مي كنيم . براي اينكه به for بفهمونيم كه بايد 3 بار كارش رو انجام بده از يه متغير استفاده مي كنيم. در ابتدا به متغير مقدار 0 رو اختصاص ميديم( در اصلاح اون رو initialize) مي كنيم(ما در اين مثال متغير i رو با مقدار صفر و از نوع Number در نظر گرفتيم). بعد مقدار انتهايي رو براي اون مشخص مي كنيم(بعد از ; ) در اين مثال ميگيم تا موقعي كه i<3 باشه كارت رو تكرار كن. پس با اين حساب كار ما 3 بار انجام خواهد شد( به ازاي i=0 ,i=1 ,i=2) . در قسمت بعدي (بعد از ; ) داريم ++i اين عبارت يعني در هر مرحله يكي به مقدار i اضافه كن.

با اين حساب در مرحله اول i=0 هست for مياد كاراي خودش رو (كاراي بين دو تا آكولاد باز و بسته) انجام ميده. بعد از اون مقدار i رو بررسي ميكنه ميبينه i=0 هست پس هنور از 3 كوچيكتره بنابراين كارش رو ادامه ميده يكي به مقدار i اضافه ميكنه و مقدار i رو مي كنه 1. دوباره كارها رو انجام ميده و مقدار i رو چك ميكنه . مقدار i ،يك هست پس هنوز از 3 كوچيكتره بنابراين بازم يكي به مقدار i اضافه ميكنه و i رو برابر با 2 ميكنه. بازم كارها رو انجام ميده و بازم ميبينه كه مقدار i ، 2 هست پس هنوز از 3 كوچيكتر هست پس بازم يكي به مقدار i اضافه مي كنه و كارها رو انجام ميده ، اينبار كه مقدار i رو چك ميكنه مي بينه كه i=3 شده پس ديگه i<3 برقرار نيست و كار for تموم ميشه و خط اجرا به بعد از آكولاد بسته for منتقل ميشه .

چند نكته:
1- به جاي ++i مي تونيم بنويسيم i+=1 . اگر بخوايم مقدار i دوتا دوتا اضافه بشه مي نويسيم i+=2 و...
2- معموله كه تو حلقه هاي شمارنده متغير شمارنده رو i در نظر مي گيرن.(اجبار نيست!!!)
3- امكان برعكس شمردن هم وجود داره. يعني به جاي اينكه به i اضافه كنيم از اون كم كنيم.(--i)
از حلقه for مطمئنا در درسهاي آينده بيشتر استفاده خواهيم كرد. حلقه هاي تكرار از جزئهاي اساسي برنامه هاي كامپوتري هستند.

پانوشت: راستي تا حالا نگفتيم اين كدها رو كجا مينويسيم. چون از اين به بعد در مثالها لازمه كه خروجي رو خودمون چك كنيم لازمه كه كدها رو تو اديتور فلش وارد كنيم.
براي اينكار شما برنامه فلش رو كه باز مي كنين(فلش 8 بعد) در قسمت create new گزينه اول( flash file (Action script3 . انتخاب و روي فريم اول كليك راست كنيد و گزينه action رو انتخاب كنيد و كدها رو در اديتوري كه ظاهر ميشه بنويسيد.
براي ديدن نتيجه كدهاتون هم ctrl+Enter رو بزنيد يا از control گزينه test Movie رو انتخاب كنيد. در آينده در مورد اعمال كد به اجزاي ديگه هم بحث خواهيم كرد.


حلقه تكرار while:

براي مثال فرض كنيد قصد داريد يه بازي شانس طراحي كنيد كه تو اون اعدادي به صورت تصادفي توسط كامپيوتر توليد مي شن و به بازيكنا داده ميشن ، اگه عددي كه براي يه بازيكن انتخاب مي شه از 0.5 بزرگتر باشه اون بازيكن بازندست.

اول از همه بايد از كامپوتر بخوايم كه براي ما يه عدد تصادفي توليد كنه. اين كار تو اكشن اسكريپت با تابع random انجام ميشه ( مثل خيلي از زباناي برنامه نويسي ديگه).
نكته: از اين به بعد تو مثالهامون گهگاهي توابع زبان اكشن اسكريپت رو هم معرفي مي كنيم. البته نه همشون رو!!! تا جايي كه امكان داشته باشه توضيحشون ميدم ولي براي اطلاعات بيشتر مي تونين از بهترين منبع يعني help خود برنامه فلش استفاده كنيد.
خوب، گفتيم از تابع ()random (فعلا بدونين كه جلوي توابع از پرانتز چه خالي، چه پر، استفاده خواهيم كرد تا دو جلسه ديگه كه تابع ها رو توضيح بديم) استفاده مي كنيم براي توليد اعداد تصادفي. تابع random يه عدد تصادفي بين 0 تا 1 توليد مي كنه.
همونطور كه شرط كرده بوديم عدد ما بايد از 0.5 كوچيكتر باشه . امكان داره كامپوتر اولين عددي كه توليد مي كنه تو محدوده 0 تا نيم نباشه(يعني از 0.5 تا 1 باشه) ، يا اينكه اولي تو محدوه صفر تا 0.5 باشه ولي دومي نباشه يا شايدم نه ، اولي و دومي تو محدوه صفر تا 0.5 باشن ولي سومي نباشه و بازم شايد اولي و دومي و ... تو محدوه صفر تا 0.5 باشن ولي n امي نباشه. پس كامپوتر بايد اونقدر عدد توليد كنه تا برسه به يه عددي بزگتر از 0.5. خوب ! اينجا مي دونيم كه بايد پاي يه حلقه تكرار وسط باشه ولي نمي دونيم اين حلقه چند بار قراره دور بزنه! يه بار؟ دو بار ؟ يا خيلي هزار بار؟Big Grin
اينجاست كه حلقه تكرار while به دادمون مي رسه.
به كد زير توجه كنيد.

خوب، خط اول كه معلومه يه متغير به نام num از جنس Number (عددي) توليد و عدد 0 رو به عنوان مقدار اوليه به اون اختصاص ميده ( به اصلاح اون رو initialize) ميكنه. در خط بعد به كامپيوتر ميگيم تا موقعي كه num كوچكتر از 0.5 هست كاراي محدوده كروشه باز و بسته رو انجام بده. در بار اول كه مقدار num صفره در دفعات بعدي هم كه اعداد ما بوسيله تابع random توليد ميشن و اگه كوچيكتر از نيم بودن بالتبع حلقه همينطور دور مي زنه تا عدد توليدي توسط random از 0.5 بزرگتر بشه.

نكته : تابع ()random يكي از تابع هاي كلاس math هست. كلاس math حاوي يه سري توابع براي كارهاي و عمليات رياضي هست . در مورد كلاس ها در درس هاي آينده بحث خواهيم كرد. فعلا در همين حد بدونين كه براي استفاده از تابع random بايد قبلش يه .math بياد تا بعدا ببينيم چي ميشه.

در مورد while يه نكته خيلي مهم وجود داره و اون اينكه هميشه حواسمون باشه كه اگه شرط داخل پزانتز هميشه برقرار باشه يعني هيچ وقت نقض نشه برنامه ما تا ابدالدهر در حالت اجرا خواهد موند. و كامپوتر شما در هنگام اجراي برنامه لاجرم هنگ خواهد نمود مثل اين بابا
حالا اگه خامي كرديد و اين اتفاق براتون افتاد يه وقت دستپاچه نشيد. خونسرد باشين ، خود موتور اجراي فلش يا همون avm اونقدر باشعور هست كه بعد از يه مدت كه ببينه كارش داره سنگين ميشه ، ميفهمه كه شما سوتي دادين و كار رو خودش متوقف مي كنه ولي طبيعيه كه هدف شما مبني بر اجراي اون كاري كه مدنظرتون بوده يحتمل به ثمر نخواهد نشست. ( البته معمولا زباناي برنامه نويسي ديگه در اينجور موارد با ctrl+break متوقف ميشن)

يه نمونه از اين حلقه هاي بي پايان در زير اومده:

همونطور كه ميبينيم متغير flag از جنسي بولي با مقدار اوليه true تعريف ميشه و در خط بعد ميگه تا موقعي كه flag مقدارش true هست چاپ كن infinite loop . و چون مقدار flag هيچ جايي تغيير نمي كنه و براي هميشه true خواهد بود حلقه تا بي نهايت تكرار ميشه.
نكته: در قسمت شرط while فقط اسم متغير آورده شده. اگر به تنهايي اين اسم آورده بشه يعني تا موقعي كه متغير true بود ولي اگه بخوايم عكس اين قضيه اتفاق بيفته بايد حتما اعلام كنيم flag=false يعني براي false بايد حتما و به طور صريح اعلام كنيم ولي براي true الزامي نيست. يه راه ديگم استفاده از صفر و 1 هست. صفر به معني false و1 به معناي true.

بازم نكته: استفاده بيجا از حلقه (چه for چه while) ممنوع ميباشد. چون كامپيوتر تمام كاراش رو رها ميكنه تا كار حلقه تموم بشه و اگه از حلقه به طور بيجا و نامناسب استفاده بشه بيخود برنامه رو سنگين كرديم و به عبارت فني سربار زمان اجرا ايجاد كرده ايم.

جلسه بعد رو با بحث آرايه ها(Arrays ) در اكشن اسكريپت ادامه خواهيم داد.

پاسخ
#5
Note 
در ادمه بحثمون پيرامون برنامه نويسي با actionscript مي رسيم به مبحث مهم و شيرين آرايه ها. كه از مفاهيم پايه اي هر زبان برنامه نويسي هستد.
اگه يادتون باشه در جلسات قبلي (درس سوم) در مورد متغير ها و انواع اونا صحبت كرديم. و گفتيم متغيرا مي تونن مقداري رو داخل خودشون ذخيره كنن. ولي مي دونيم كه متغيرا فقط قابليت ذخيره يك مقدار رو در خوشون دارن. يعني يك قطعه داده در هر متغير. خوب براي برنامه هاي ساده شايد شما به چيزي بيش از اين هم احتياجي نداشته باشين ولي كم كم و در برنامه هاي بزرگتر با انبوهي از داده ها مواجه مي شين كه امكان ذخيره اونا به صورت تك تك در متغيرها دشوار و در مواردي غير ممكن خواهد شد. اينجاست كه دست به دامن آرايه ها مي شيم تا علاوه بر راحت شدن كارمون بتونيم قطعات داده رو هم دسته بندي كنيم.

فكر كنيد شما مي خواين 50 تا داده رو ذخيره كنين. يه راهش اينه كه 50 تا متغير رو تعريف كنين و داده ها رو تك تك تو اونا ذخيره كنين و راه دوم و عقلاني اون هم استفاده از آرايه هاست كه به راحتي مي تونيم روي عناصر اونا حركت كنيم ، اونا رو بررسي كنيم ، به ابتدا و انتهاي اونا عضو اضافه كنيم و خيلي كاراي ديگه
خوب اولين كاري كه بايد انجام بديم اينه كه آرايه رو تعريف كنيم و به برنامه بشناسونيم. به دو روش اين كار امكانپذيره:

1- روش عادي مثل تعريف متغير كه نوع رو Array انتخاب كنيم.(البته اينم يه نوع استفاده از كلاسه بعدا مي فهميد)
2- استفاده از كلاس array و ايجاد يك شي خالي از آرايه. (بازم يادآور مي شم كه مبحث كلاسها و مفاهيمش رو در آينده به طور كامل توضيح خواهيم داد.)
دو نوع تعرف رو در زير ميبينيد. كه خط اول در مورد روش اول و خط دوم هم براي روش دوم هست.

در خط اول آرايه با نام myArray تعريف شده و مقادير اوليه 1 و 2 و 3 به اون اختصاص داده ميشن.(initialize ميشن)
در خط دوم هم يه شي خالي با نام myArray از كلاس Array ساخته ميشه.

نكته 1: در مورد اسم گذاري متغيرها طبق يه قرارداد اگه اسم از دو كلمه تشكيل بشه به دو صورت رسمي انجام مي گيره. يا حرف اول كلمه دوم بزرگ نوشته ميشه (مثل اينجا كه Array با حرف بزرگ شروع شده) و يا كلمه دوم با يه _(آندرلاين) از كلمه اول جدا ميشه. يادتون باشه اين كار بين برنامه نويسا مرسومه، الزامي نيست!!! در آينده خواهيد ديد كه شكل اول در مورد كلمات كليدي فلش رعايت شده. اينجوري شما راحتت تر كلمات كليدي دوبخشي رو حفظ مي كنيد.

نكته 2: همونطور كه مي بينيد مقدار دادن به آرايه به اينصورته كه يه براكت باز ميشه و اعدادي كه بايد به عنوان محتواي آرايه در نظر گرفته بشن با ويرگول از هم جدا ميشن.

نكته 3: برچسب گذاري اعضاي آرايه توسط خود زبان از صفر شروع ميشه. يعني برچسب اولين عضو 0 و برچسب دومين عضو 1 و به همين صورت ادامه داره. از برچسب ها براي دسترسي به اعضاي آرايه استفاده مي كنيم. مثلا مثال زير عضو اول آرايه رو برامون چاپ مي كنه يعني عدد 1 رو.

خوب يه مثال هم از روش دوم مي زنيم تا با اون هم آشنا باشيم. استفاده از روش دوم بهتر و اصولي تره. چون مي تونيم از امكانات و توابع آماده كلاس Array استفاده كنيم
در مثال زير از دوتابع ويژه اين كلاس استفاده شده. (البته به اينا مي گن متد كه در مبحث كلاسا باهاشون آشنا خواهيم شد) . تابع () push يه عضو به انتهاي آرايه اضافه مي كنه و تابع () pop يه عضو از ته آرايه بر مي داره.
نكته : اگه مي خواين در مورد ()push و ()pop بيشتر بدونيد كافيه كلمه stack رو تو گوگل يه سرچ كنين.

در خط اول يه شي به نام myArray از كلاس Array ساخته مي شه. خط دوم عدد يك رو توسط push به انتهاي آرايه (كه الان خاليه و ميشه خونه اول) اضافه مي كنه و در خط هفتم هم عدد 2 كه آخرين عضو آرايه هست چاپ مي شه. يادتون باشه اينجا علاوه بر چاپ شدن عنصر آخر برداشته هم ميشه. در مورد بقيه خطها هم ديگه توضيح نميدم . اگه آموزش ها رو تا اينجا دنبال كرده باشين مطمئنا خودتون متوجه مي شين.

نكته : براي اينكه تو قطعه كدمون توضيحات بذاريم تا بعدا راحت تر متوجه بشيم يا بقيه راحت تر بفهمنش ابتداي خط دوتا اسلش(//) مي زاريم و تو اون خط هر توضيحي كه خواستيم مي ذاريم تا كامپايلر(كامپايلر چيست؟ رجوع كنيد به درس دوم) بهش كاري نداشته باشه و ترجمش نكنه. اگه بخوايم چند خط توضيح بذاريم در ابتداي خط اول (*/) و در انتهاي خط آخر توضيحاتمون (/*) مي ذاريم.

مثال:
[ACTIONSCRIPT]var myArray:Array=new Array();
myArray=[1,5,4,2,6];

//چاپ آرايه منظم شده. اين كار را متد سورت انجام ميدهد
trace(myArray.sort());
//جمع رو مقدار از خانه هاي آرايه
trace(myArray[0]+myArray[3]);

// چاپ طول آرايه يعني تعداد خانه هاي آن
trace(myArray.length);

// تبديل محتوبات آرايه به رشته
var st:String= new String();
st=myArray.toString();
trace(st);[/ACTIONSCRIPT]

پاسخ
#6
Note 
در ادامه درسهاي اكشن اسكريپت به بحث مهم توابع مي رسيم. فكر مي كنم يك دو جلسه ديگه بحث مفاهيم بنيادي رو تموم كنيم و انشاء الله با كدنويسي و جزئيات actionscript بيشتر و دقيقتر درگير بشيم

توابع (functions):

اندر فوايد توابع:

تا اينجا كه برنامه نويسي رو شروع كرديم كدهامون رو خط به خط مي نوشتيم و از بالا به پايين حركت مي كرديم. يعني اگه فرض كنيم يه فلش جلوي خط اول برناممون باشه با اجرا شدن برنامه فلشه شروع به حركت مي كردو خط به خط به سمت پايين حركت مي كرد تا به انتهاي برنامه برسه. ولي با مطرح شدن بحث توابع، اين فلش يه كم بايد تحركش رو بيشتر كنه و به جاي اينكه خط به خط به سمت پايين حركت كنه گاهي اوقات از روي چندين خط پرش كنه و يه سري خط رو پشت سر هر پيمايش كنه و دوباره بپره سر جاي خودش ( يعني همون چندين خط قبل) و همينطور ادامه بده و و ادامه بده و ادامه بده و... درسته كه با اين استراتژي آقا فلش ما مجبور ميشه يه روند نامنظمي رو طي كنه ،ولي اينكارش چندين سود داره: يكي اينكه كدهاي ما خواناتر ميشن و ديگر اينكه ما از كدهامون مي تونيم تو برنامه هاي ديگه هم استفاده كنيم، ديگري اينكه اشكال يابي (debuging) برنامه ما راحت تر ميشه و مهم تر از همه تحرك بيشتر براي تناسب اندامش خيلي خوبه :73:

توجه: اگه از متن بالا چيزي سر در نياورديد پس از خوندن تمام مطالب اين درس يه بار خطوط بالا رو مرور كنيد. مطمئنا اينبار براي شما مفيد فايده واقع خواهند شد

توابع بر دودسته اند:
1- توابعي كه ما خودمون مي نويسيم
2- توابع از پيش نوشته شده اي كه خود زبان در اختيار ما قرار ميده . مثل توابع پركاربرد و عمومي مثل تابع محاسبه cos يا محاسبه sin يا توابع كار با رشته ها و خيلي توابع ديگه . هرچه برنامه نويس توابع يه زبان رو بيشتر و بهتر بشناسه قاعدتا دستش براي نوشتن كدهاي بهتر باز تره. در طول درسهاي آينده با توابعي كه براي مثالهامون بهشون نياز خواهيم داشت آشنا خواهيم شد ولي يادگيري تمامي توابع اين زبان فقط و فقط به كوشش و تحقيق بيشتر خودتون بستگي داره. يه منبع خيلي خوب براي يادگيري و آشنا شدن با اونا سيستم help خود برنامه فلاشه.

در اين درس ما نوشتن دستي توابع توسط خود برنامه نويس رو ياد مي گيريم و به مورد دوم كاري نداريم.
توابع در action script با كلمه كليدي function معرفي مي شن و مي تونن ورودي يا خروجي داشته باشن يا اصلا هيچ كدوم رو نداشته باشن.
توابع در حقيقت كدهاي ما رو در بلاكهايي دسته بندي مي كنن و هرموقع كه بهشون نياز داشته باشيم اونا رو اجرا مي كنيم.
براي مثال قطعه كد زير تابعيه كه عبارت hello رو در خروجي نشون مي ده.

خط اول با عبارت كليدي function شروع ميشه و بعد از اون اسم تابع مياد و بعد از اون يه جفت پرانتز كه ورودي تابع بين اونا قرار مي گيره. چون تابع ما ورودي نداره جفت پرانتز رو خالي مي ذاريم. بعد از پرانتز دوم يه بلاك باز مي كنيم و محتويات تابع رو بين دو جفت كروشه قرار مي گيره.
در اينجا تنها كاري كه تابع ما مي كنه همانا چاپ عبارت hello است
حالا كارمون كه با تابع تموم شد ، نبايد به امون خدا ولش كنيم ، بلكه بايد در موقع نياز اون رو صدا بزنيم. صدا زدن تابع هم فقط با اسمش انجام مي گيره. چون در اين مثال تابع ما ورودي نداره مثل خود تابع جفت پرانتز صدازننده اون هم خالي از عبارت خواهد بود. در خط آخر اين كد ، تابع رو صدا زديم. اين صدا زننده هر جاي برنامه مي تونه باشه.
تمرين: جلوي خط آخر // بذارين تا اين خط موقع كامپايل ترجمه نشه. چه نتيجه اي مي گيريد؟

مثال بالا ساده ترين كابرد يه تابع بود. در مثال بعدي يه مرحله جلوتر مي ريم تا تابعمون يه مقدار بيشتر به مخش فشار بيارهBig Grin در مثال بعدي براي تابعمون ورودي تعريف مي كنيم. مثال رو ببينيد تا توضيحاتش رو ذكر كنيم

مثال شبيه مثال قبليه با اين فرق كه در خط اول تعريف تابع ما يه متغير تعريف مي كنيم به نام msg و از نوع string( رشته). هر ورودي كه براي تابع مي فرستيم در بدنه تابع با نام msg شناخته مي شه. نكته مهم اينكه چون ما در تعريف تابع ورودي رو از جنس رشته تعريف كرديم موقع ارسال آرگومان(ورودي تابع) به تابع هم بايد يه رشته براي تابع بفرستيم در غير اينصورت موقع كامپايل با خطا مواجه خواهيم شد.
نكته: توابع مي تونن بيش از يك ورودي داشته باشن. در ادامه با توابع چند ورودي هم آشنا خواهيم شد. در ضمن اگه تابع ما در تعريف يك ورودي داشته باشه بايد يكي هم براي اون بفرستيم و اگه دو تا بود براش دقيقا دوتا و...

در خط دوم و در بدنه تابع ميگيم كه msg رو چاپ كن. حالا بستگي داره كه ما چي براي ورودي تابع (msg) فرستاده باشيم. در اينجا ما در موقع صدا زدن تابع goodbye رو براي تابع فرستاديم. پس goodbye چاپ ميشه. حالا شما هرچي كه دلتون مي خواد جاش بذارين! اگه كار نكرد بزنين تو گوش من


در مثال سوم مي خوايم يه مرحله جلوتر بريم و براي تابع خروجي هم قرار بديم. يه موقع خروجي رو با خروجي trace كه در مثالاي فبلي داشتيم اشتباه نگيرين!!!
اين خروجي يعني اينكه تابع يه مقداري رو به برنامه برگردونه و برنامه با اين خروجي هر كاري خواست بكنه. مثلا تابع cos به عنوان وردي 90 درجه رو بگيره و به عنوان خروجي به برنامه 0، (cos 90 =0) رو تحويل بده و برنامه هم از اين نتيجه در محاسباتش استفاده كنه.
مثال زير يه عدد از نوع number مي گيره و بعد از انجام محاسباتش يه عدد از نوع number تحويل برنامه مي ده.


در خط اول، بعد از پرانتز دوم (بسته) يه دونقطه ميذاريم و نوع خروجي رو مشخص مي كنيم(اينجا number).
خط بعد با عبارت كليدي return شروع مي شه. در توابعي كه خروجي دارن با اين عبارت مقداري كه بايد به برنامه تحويل داده بشه رو مشخص مي كنيم. مثلا در اينجا چون ما در موقع صدا زدن تابع 20 رو به عنوان ورودي به تابع داديم مقدار برگشتي به برنامه 68 خواهد بود. خودتون محاسبه كنيد به همين نتيجه مي رسيد

و بالاخره در برنامه آخر يه مقدار اصولي تر، از خروجي استفاده كرديم. يعني اينكه يه متغير تعريف كرده و مقدار خروجي رو توي اون مي ريزيم و بعد از اون متغير استفاده مي كنيم.


نكته 1: خروجي برنامه بالا 20 هست. خودتون هم حساب كنيد.

نكته 2: در صورتي كه برنامه خروجي نداشته باشه مي تونيم بعد از دو نقطه ي بعد از پرانتز بسته عبارت void رو قرار بديم كه نشانه بدون خروجي بودن تابعه! اينكار برنامه رو خواناتر مي كنه و استاندارد، وگرنه همونطور كه در دو برنامه اول اين درس ديديد نذاشتن اون هم براي توابع بدون خروجي مشكلي ايجاد نمي كنه! براي ورودي ها اگه ورودي نداشتيم در قسمت ورودي تابع هيچي(مثل دو برنامه اول) نمي ذاريم و لازم نيست مثل خروجي void بذاريم.

نكته 3: توابع بسيار پركاربرد هستند. و در اكثر مواقع پيچيده تر از اين 4 مثال ما. در درسهاي آينده كم كم با اونا آشنا شده و كاربردشون رو بيشتر و بهتر لمس خواهيم كرد.

نكته 4: حالا دو مرتبه "اندر فوايد تابع" رو كه در پاراگراف دوم درس اومده بخونين. فكر كنم حال بهتر بتونين باهاش ارتباط برقرار كنيد. اگه بازم نتونستين، اشكالي نداره هنوز يه عالمه درس در آينده داريم كه تو مثالاي اونا از تابع استفاده خواهيم كرد.

در درس آينده custom object و اگر بتونم كلمه كليدي this رو توضيح خواهم داد.

پاسخ
#7
Note 
بسم الله الرحمن الرحيم

به اميد خدا امروز مي خوام ديگه مباحث پايه اي رو تموم كنم. مفاهيمي كه در همه زبانها مشتركه و در زبانهاي مختلف با syntax متفاوت بيان مي شن. تا اينجا سعي كردم كه تمامي مفاهيم رو به صورت ساده بيان كنم و در آينده هم همين قصد رو دارم.
در هر صورت خودتون هم مي دونين بيان كردن تمام ويژگيها و نكات مقدور نيست! من تا جايي كه برام مقدور بود گفتمشون و به عبارتي سرنخ رو دادم دستتون. ديگه تمرين و تكميل كردن اونا با خودتون.
براي اين جلسه هم custom object و مفهوم this و شيوه هاي آدرس دهي رو بيان مي كنم و بحث مفاهيم پايه رو تموم مي كنم.

Custom Objects

يه مقداري كه با actionscript كار بكنين مي فهمين كه با object ها خيلي سروكار دارين. اكثر هويت هاي مستقل مثل button ها (كليدها) ، MovieCLip ها و ... در حقيقت اشيا (object هايي) از كلاس هاي خودشون هستن. هر شي يه سري ويژگيها (properties) مثل عرض شي ، موقعيت اون تو صفحه نمايش و ... داره و همچنين هر شي يه سري خصيصه هايي (Method) داره. متدها كارايي هستن كه يه شي مي تونه انجام بده. مثلا ماشين مي تونه حركت كنه پس حركت كردن يه متد براي ماشينه.
و هر شي مي تونه به يه سري رخدادهايي (event) جواب بده مثل كليك ماوس يا فشار يه كليد از صفحه كليد و ... مثلا اگه ماوس كليك شد يه تابعي رو فراخواني كنه.(تابع ها رو هم كه جلسه قبل توضيح داديم).
نكته: تمامي نكاتي رو كه در مورد شي گفتيم و خواهيم گفت در بحث شي گرايي (oop) به صورت كامل توضيح خواهم داد. انشاءالله جلسات آينده.

ما مي تونيم بنا به نيازمون خودمون هم يه شي (object) بسازيم و براي اون ويژگيها و خصيصه هايي تعريف كنيم.
مثلا در مثال زير يه شي به نام plane مي سازيم و يه سري ويژگي مثل pitch ، roll ، yaw بهش مي ديم و به اونا هم مقدار مي ديم.
پس فعلا لازمه كه بدونين ما مي تونيم يه شي اي رو بسازيم و يه سري ويژگي براش تعريف كنيم در همين حد فعلا كافيه!!!
در واقع trace آخر عدد 0 رو چاپ خواهد كرد.
بد نيست كه بدونين شي ها مي تونن ورودي براي توابع هم باشن و تابع بنا به نياز از اونا استفاده كنه . مثال زير يه نمونه از اين توابع هست كه شي plane رو كه در بالا ايجاد كرديم به عنوان ورودي بهش مي ديم

خروجي trace ها كه به عهده خودتون! خط آخر رو هم كه مي دونين فراخواني تابعه.

در همين حد فعلا از شي ها بدونين كافيه تا بعدا به صورت مفصل بررسيشون كنيم.

this

هر چي كه بيشتر با actionscript كار كنين به اين نتيجه خواهيد رسيد كه this مي تونه دوست خوب و پركابردي براتون باشه.
this در حقيقت يه شورتكات(shortcut) براي شي يا بردي ( scope) هست كه الان دارين باهاش كار مي كنين.
scope يا برد حوزه اي هست كه يه شي يا متغير در اون معتبره. مثلا اگه در يك function يه شي يا متغير تعريف كنيم. اون شي يا متغير فقط در حوزه اون function معتبر هستن و به عبارتي زنده (live) هستن و با خروج از آكولاد بسته function اونا از بين مي رن. يا اگه يه مووي كليپ (كه خودش شه هست) تو main تعريف بشه در تمام حوزه main برنامه scope داره.

دو مثال زير همه چيز رو روشن مي كنه:
در مثال اول فرض مي كنيم كه مي خوايم به يه موي كليپ كه در timeline اصلي و يا به عبارتي main برنامه قرار داره دسترسي داشته باشيم. پس this در اينجا به timeline اشاره مي كنه. يعني شما در timeline هستيد و مي خوايد به موي كليپ دسترسي داشته باشيد. پس اينجايي كه الان هستيد timeline هست و مي تونيد this رو timeline فرض كنيد.

و در مثال زير فرض كنين كه الان در حوزه يا برد موي كليپ mc هستين و مي خواين به timeline دسترسي پيدا كنين . بنابراين الان اينجايي كه هستين موي كليپ هست پس this موي كليپ مي شه.
parent يه كلمه كليديه و ميگه از اينجايي كه هستم يه سطح برو بالاتر. پس چون mc داخل timeline هست و this الان موي كليپمونه با parent يه سطح از موي كليپ بالاتر مي ريم و مي رسيم به timeline.
مثال زير رو ببينيد:

پس با يه كم دقت متجه مي شيم كه مثال بالا به width تايم لاينمون دسترسي داريم. خط آخر رو يه trace بگيرين متوجه مي شين كه مقدار پهناي timeline پروژتون رو نشان مي ده.
نكته: اين مفهوم رو هم در مثالهاي درسهاي بعد بيشتر باهاش كار خواهيم كرد.

شيوه هاي آدرس دهي در actionscript :
مانند سيستم عامل و وب سايت در actionscript هم دو نوع آدرس دهي داريم آدرس دهي مطلق ( Absolute) و آدرس دهي نسبي (Relative).
در دنياي واقعي مثلا براي آدرس دهي يه بقالي همين دو روش رو داريم:

1) مطلق:
-سلام داداش
- سلام عليكم
- ببخشيد آدرس بقالي آقا كريم كجاست؟
- ببين برادر شما مي رين بلوار شهيد مطهري - كوچه لاله - ابتداي كوچه

2) نسبي:
-سلام داداش
- سلام عليكم
- ببخشيد آدرس بقالي آقا كريم كجاست؟
- آقا از همينجا (الان تو بلوار شهيد مطهري وايسادن!) مي ري كوچه لاله ، بقالي ابتداي كوچست!

همونطور كه ديدن در آدرس دهي دوم گفت از همينجا كه هستين . پس آدرس رو نسبي (نسبت به بلوار شهيد مطهري) داد. در دنياي مجازي كامپوتر هم همينطوره.

دو روش آدرس دهي و معادل اونا رو تو ويندوز، مكينتاش و وبسايت مي بينيد. فقط اينو بدونين كه:
1) mc1 و mc2 دو تا موي كليپ هستن كه mc2 داخل mc1 هست.
2) root در Actionscript3 يعني نقطه صفر پروژمون در فلش. يعني هر چيزي كه به پروژمون اضافه مي كنيم. در هر صورت زير شاخه اي از root خواهد بود. حالا چه مستقيم چه غير مستقيم. مثلا يه موي كليپ مي سازيد و در تايم لاين مي ذاريم كه اون زير شاخه root هست. و يه موي كليپ ديگه مي سازيم و در موي كليپ اولي مي زاريم. موي كليپ دومي زير شاخه اولي و اون اولي خودش زير شاخه root هست. پس موي كليپ دومي نوه ي root هستBig Grin
3- ما با آدرس دهي مي خوايم به mc2 دسترسي پيدا كنيم.
جدول اول در براي آدرس دهي مطلقه :

و جدول دوم آدرس دهي نسبي از يه موي كليپ سومي كه خودش داخل timeline اصليه:

خوب درس امروز و به همراه اون بحث مفاهيم پايه تموم شد فقط ذكر چند نكته رو لازم مي دونم.
1) مطالب اين جلسه براي كسايي كه تازه كار هستين يه كم ثقيله! ولي تازه كارا مطمئن باشن در ادامه و در مثالهاي آينده كاملا به اين مفاهيم مسلط خواهند شد. هنوز يه عالمه درس مونده با مثالاي جور واجور
2) از درس آينده كه روي syntax و بحثاي خودactionscript متمركز مي شيم در هر درس حتما مثال پيوستي به همراه سورس خواهيم داشت!
3) اگه برسم مي خوام يه وبلاگ در همين رابطه راه اندازي كنم كه درس ها رو به صورت منظم و خصوصي تر اونجا هم بذارم ولي همچنان نوشتن در majidonline ادامه خواهد داشت.
4) در اولين فرصت ممكن pdf بخش اول مفاهيم پايه اي رو آماده و در پست اول همين تاپيك قرار خواهم داد .

در جلسه بعدي property هاي عمومي و شيوه به كار گيري اونا رو به صورت كلي توضيح خواهم داد.

پاسخ
#8
Note 
بسم الله الرحمن الرحیم
قبل از هر چیز لازمه که سال نو رو به همتون تبریک بگم و آرزوی سالی پر از برکت و موفقیت رو برای همتون داشته باشم.
از این جلسه قراره که یه مقدار تخصصی تر روی actionscript متمرکز بشیم. بنابراین دیگه روی مفاهیم بنیادی که قبلا توضیحشون دادیم ایست نمی کنیم و فرض رو بر این می گیریم که شما مطالب قبلی رو به خوبی خوندید و فراگرفتید. بدون فوت وقت درس امروز رو شروع می کنیم.
برای درس امروز دو بحث مهم properties و events رو توضیح می دیم. مفاهیمی که اکشن اسکریپت به وسیله اونا به ورودی هایی واکنش می ده یا خروجی هایی رو تولید می کنه.

Properties

Properties یا ویژگیها چیزی هستند که به وسیله اونا می تونیم خصوصیات و ویژگیهایی رو برای یک شی تعریف , مدیریت کنیم. برای مثال شما می تونید خصوصیت width یک کلید (button) رو چک کنید یا تغییر(set) بدید.
اکثر ویژگیها خواندنی و نوشتنی (read-write) هستند به این معنی که شما هم می تونید اونا رو بگیرید(get) و تو برنامه استفاده کنید و یا خصوصیات یه شی رو set کنید. اما بعضی از ویژگیها هم هستند که فقط خواندنی(read only) هستند که به شما اجازه Set کردن رو نمی دن.
خوب ، بهتره بریم سر مثال. در ابتدا ما با syntax ایجاد 6 نوع تغییر پرکاربرد توی یه مووی کلیپ آشنا می شیم تا در ادامه که با handle event ها آشنا شدیم اونا رو در کدنویسی هم به کار بگیریم و تستون کنیم.
جدول زیر و شکلها گویای همه چیز هستند.



اونایی که سابقه استفاده از actionscript 2 رو دارن شاید متوجه یه تغییرات کوچیکی بشن. بعضی از ویژگیها undescope (یا _ ) ندارن!

این تغییر توی actionscript 3 اعمال شده تا همه ویژگیها یکنواخت بشن و بدون _ بیان نه اینکه بعضی بدون _ و بعضی با _ بیان. بی خیال همچین مطلب مهمی هم نیست!
دستیابی به Properties هم خیلی راحته مثل کد زیر:

حتی میشه به وسیله operator ها (عملگرای محاسباتی) هم اونا رو دستکاری کرد مثل کد زیر:

Events

Event ها یا رخدادها در حقیقت مثل کاتالیزگر عمل می کنن. با اتفاق افتادن یه رخداد می تونه یه method اجرا بشه یا یه ویژگی set و یا حتی get بشه.
برای مثال کلیک کردن ماوس یه رخداد (event) هست. یا فشار داده شدن یه کلید از صفحه کلید یا تکون خوردن ماوس و...
همه اینا می تونن توسط برنامه نویس معیاری برای اجرای یه قطعه کد قرار داده بشن.

Event ها انواع مختلفی دارن و هر کلاسی می تونه event های مخصوص خودش رو داشته باشه. مثلا کلاسvideo ، رخداد(event)هایی مربوط به پخش ویدئو داره و...
برای اینکه بفهمیم در طول اجرای برنامه چه event ای اتفاق افتاده از مفهومی تحت عنوان eventlistener استفاده می کنیم.
Eventlistener ها در حقیقت همون خاله زنکها یا فضول باشی های خودمون هستنBig Grin. به این معنی که در طول اجرای برنامه یه گوشه ای می شینن و می پان که چه event ای اتفاق می افته تا سریعا اون رو به event handler اطلاع بدن Event listener ها بوسیله کلاسی به نام EventDispatcher پیاده سازی میشن. این کلاس امکانات جالبی رو در اختيار ما قرار میده که در آینده با چند تا از این امکانات (مثل حذف Event listener ها در مواقعی که کارشون نداریم) آشنا خواهیم شد.
برای ایجاد یه event listener ما نیاز به استفاده از متدی تحت عنوان ()addEventListener داریم . مثال زیر رو ببینید.

این مثال یک eventlistener رو به کلیدی به نام rotate_right_btn و گفته اگر موس روی دکمه کلیک شد به محض بالا آمدن دکمه ماوس(Mouse_up) تابع مذکور اجرا بشه.

نکته: evt در ورودی تابع , از جنس کلاس MouseEvent تعریف شده اشاره داره به اون المنتی که به رخداد پاسخ داده مثلا در اینجا کلیدی که کلیک میشه المنت ماست.
در ضمن کلاس MouseEvent شامل همه رخدادهای ماوس مثل کلیک و حرکت و ... هست که در ادامه بیشتر باهاش آشنا خوایم شد.
مثال زیر دو تا رخداد رو برای یه موی کلیپ تعریف می کنه هر کدوم که اتفاق بیافتن یه تابعی رو اجرا می کنن. مثال زیر مثال معروف drag & drop هست. که با ماوس یه شی رو می گیریم و هر جا که خواستیم قرار می دیم. برنامه کامل رو در پیوست به اسم drag & drop آوردم.

نکته: evt که در بالا توضیح داده بودم اینجا استفاده شده. اینجا ()evt.target.startDrag یعنی ببین رخداد به چی وصله(اینجا به مووی کلیپ) به هر چی که وصل بود اون شی رو شروع کن به drag کردن یا کشیدن به همراه ماوس.
! توجه کنید که target یه نوع property هست.

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note 60 پروژه اماده اکشن اسکریپت همراه سورس کد SOFTAFZAR 2 2,195 10-01-2013 ساعت 22:33
آخرین ارسال: Dada Mori
Note سورس shooting lightning gun به زبان اکشن اسکریپت SOFTAFZAR 0 634 25-08-2012 ساعت 13:41
آخرین ارسال: SOFTAFZAR
Note سورس towards mouse به زبان اکشن اسکریپت SOFTAFZAR 0 674 26-07-2012 ساعت 19:36
آخرین ارسال: SOFTAFZAR
Note سورس باریدن برف به زبان اکشن اسکریپت SOFTAFZAR 0 666 25-07-2012 ساعت 19:54
آخرین ارسال: SOFTAFZAR
Note سورس endless-parallax به زبان اکشن اسکریپت SOFTAFZAR 0 579 22-07-2012 ساعت 13:29
آخرین ارسال: SOFTAFZAR
Note سورس mouse-trailer به زبان اکشن اسکریپت SOFTAFZAR 0 669 18-07-2012 ساعت 21:42
آخرین ارسال: SOFTAFZAR
Note سورس Enemy AI Patrol به زبان اکشن اسکریپت SOFTAFZAR 0 751 17-07-2012 ساعت 15:15
آخرین ارسال: SOFTAFZAR
Note سورس bubbles effect به زبان اکشن اسکریپت SOFTAFZAR 0 673 15-07-2012 ساعت 17:33
آخرین ارسال: SOFTAFZAR
Note سورس افنجار مکعب ها به زبان اکشن اسکریپت SOFTAFZAR 0 630 13-07-2012 ساعت 20:02
آخرین ارسال: SOFTAFZAR

کاربرانِ درحال بازدید از این موضوع:   1 مهمان