المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : شرح الأكشن سكربت 3 الجزء الأول أساسيات أكشن سكربت 3


abohmam
02-03-2015, 08:44 PM
السلام عليكم و رحمة الله و بركاته

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

هذه الدورة منقولة من أحد المدونات بناء على نصيحة من الأخ " خادم المسلمين " لفائدتها

تعلم AS3 -جزء1- الدرس 1 [مقدمة]

http://4.bp.blogspot.com/-4CtwMA6g-iM/VA5ZsHzh8GI/AAAAAAAAAMg/Rud23sayzfM/s1600/actionscripticon_400-300x300.png

________________________

مقدمة:

سنة 1996 بدأت المغامرة في عالم الفلاش عندما قامت macromedia اشتراء شركة futureWave صاحبة برنامج خاص بالنيمشين اسمه Future Splash Animator
الذي كان يملك نفس قاعدة الفلاش إلا انه في ذلك الوقت لم يكن فيه أي لغة برمجية فلقد كان يستعمل للانميشن فقط.


http://www.pxleyes.com/blog/wp-content/uploads/2010/07/1-futuresplash.png


قامت macromedia بتسميته Flash 1.0 سنة 1996,و انتظرنا الى غاية 1999 أين عرفنا مصطلح البرمجة في الفلاش مع Flash4.0
في ذلك الوقت ال documentation لم تكن تتحدث عن لغة الاكشن سكربت و لكن فقط عن الاكشن التي بفضلها يمكننا اضافة بعض السلوكات المتقدمة في الأزرار و مختلف المحتويات الجرافيكية
و هنا بدأ استخدامه في مجالات متعددة أين أصبحنا نجده في العديد من المنتديات و أنظمة اخرى.


سنة 2001 ظهرت لغة الأكشن سكربت أخيرا معflash 5. . الذي أخذ يتطور نظرا لكثرة الطلبات من مستخدميه لكي يصبح أكثر سهولة و تنظيما
Macromedia طورت لغة جديدة سنة 2003 مع برنامج flash MX 2004 اسمه الاكشن سكربت 2.
هذه النسخة تجيب على تطلعات المبرمجين نظرا لسهولتها و الكثير من المزايا التي تقدمها.
Macromedia تتطور مع مرور الوقت و ها هو الاكشن سكربت 3 يظهر و هو أخر نسخة في الوقت الحالي بعدما قاموا بصناعة برنامجهم الجديد Flex ..

سنتين بعد ظهور هذه اللغة قامت شركة العملاقة Adobe بشراء macromedia و هنا الاكشن سكربت 3 يبدأ أيامه مع برنامج Flash CS3


1.أشياء تجعلك تبرمج ب الأشكن سكربت 3 :


- سرعة تشغيل الاكواد أسرع ب 10x مرات سرعة النسخ السابقة .
- الاكشن سكربت 3 يقدم امكانيات لا تقارن مع النسخ السابقة.
- هذه اللغة تمكنك من برمجة محتويات فلاشية في برنامج flash, flex, AIR قد أتكلم لاحقا عن هذه الفريموركات.
- لا يحتاج منك تعلم لغات oriented object سابقة أخرى .
- تعلمه و استعماله أسهل من لغات من نفس النوع مثل الجافا أوC# اوC++
- المبرمجون بالنسخ السابقة سيكونون سعداء باكتشافهم جديد هذه اللغة و التنظيم الجديد الخاص بـ API .


2.البرامج الضرورية:

للبرمجة بلغة فلاش هناك العديد من الادوات التي تمكننا من هذا:
Flash cs3 (أو نسخة أحدث منها)
Flex Builder
Eclipse (SDK Flex And Air)


اللغة وAPI

الاكشن سكربت 3 يحتوي على الكثير من الاشياء الجديدة التي سنتكلم عنها في هذه السلسة من الدروس,في هذا الدرس الاول سنكتشف بعضا منها و بعض السلوكيات الجديدة و المهمة لكل مبرمج.

ماذا يحتوي الأكشن سكربت 3 [AS3] :

عموم الاكشن سكربت 3 يحتوي على شيئين اساسين و هما
لغة البرمجة(القلب): و هي لغى الاكشن سكربت المعروفة في النسخ السابقة و التي أساسها في البداية ECMAScrtipt .
API الخاص بقارئ الفلاش:و هي تخص قارئ الفلاش فكل كلاس نقوم باستدعائها لاستخدامها هي جزء من api لقارئ الفلاش و ليس لقلب لغة الاكشن سكربت.


http://im76.gulfup.com/dKnOMP.jpg


عكس اللغات السابقة,نلاحظ ان مختلفوظائف قارئ الفلاش مخزنة في packages خاصة.


يعتبر الفلاش واحد من اقوى المترجمات الموجودة في عالم الويب و تم انشاء مئات الالاف من الالعاب و البرامج
و الانمي التي نراها بشكل يومي و نلعبها كثيرا كمثال العاب الفيسبوك كلها بالفلاش

حسنا سأكتفي بهذا و لن أتعمق كثيرا و سنبدأ في الاشياء المهمة الا و هي البرمجة في الدروس القادمة ان شاء الله.

ماذا سنتعلم في هذه الدورة؟

اليكم فيديو

https://www.youtube.com/watch?v=jFql7Q8snDc

abohmam
02-03-2015, 08:51 PM
السلام عليكم و رحمة الله و بركاته

تعلم as3 -جزء1- الدرس 1.2 [المتغيرات]


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

التي سنتعلم فيها كيفية صنع برامج فلاش بمختلف أنواعها


ما معنى البرمجة؟

برمجة تعني كتابة تعليمات و أوامر يقوم الحاسوب بتنفيذها..
أجهزتنا مليئة بالبرامج ف notepad برنامج
الالة الحاسبة برنامج
الالعاب برامج

البرامج موجودة في كل مكان و تمكننا بفعل كل شئ و ما نريده بجهاز الكمبيوتر

ما معنى التعليمات؟ و كيف يتم تنفيذها من طرف الحاسوب؟

سأجيب عن هذا السؤال بمثال في حياتنا اليومية
فلنفرض أنك تريد طبخ أكلة
لطبخها يجب ان يكون عندنا كمية من الملح و ملعقة و بيض و زيت ..الخ

- نضع قليلا من الزيت في المقلاة
- نتركها تسخن
- نقوم بغسل البيض
- لما تسخن الزيت قليلا نكسر البيض
- نضعه داخل المقلاة
- نضع قليلا من الملح
... الخ الخ

وضع الزيت في المقلاة , غسل البيض ..الخ فهذه هي التعليمات (instructions بالفرنسية)
و تنفذ بشكل تسلسلي من الاعلى الى الاسفل ,, واحدة بواحدة
____________________________

من بين أهم الأشياء في البرمجة هي المتغيرات و هذا هو موضوعنا اليوم

سنتحدث في هذا الدرس عن طريقة انشاء المتغيرات بمختلف أنواعها

http://4.bp.blogspot.com/-mxH24SVtgNM/VA5au222HOI/AAAAAAAAAMo/dZ6x1ulZUk0/s1600/preview_101_variables.jpg

_______________________________

1. ماذا نعني بالمتغير؟ (variable):

لو تتذكرون الرياضيات لما كنا في المتوسطة, فانكم حتما ستتذكرون هذا المصطلح -المتغير- و هم عبارة عن أحرف او رموز مثل أ ب ج أو a b c .. تحمل قيم عددية
(و أشهر واحد هو "س" أو "x" )

مثلا
E = mc²
أو
ط = ك.س²

(قانون أنشتاين للطاقة)
حيث
m :كتلة الجسم
c: سرعة الضوء (ثابت)

اذا كانت كتلة الجسم m = 20 (مثلا)
يمكن اذن كتابة المعادلة هكذا

E = 20 * c²

حيث قمنا بتعويض المتغير m بقيمته

_______________________

في البرمجة, المتغيرات لهذا نفس المبدأ مع فرق بسيط
-الفرق الأول هو ان هاته المتغيرات لاتحتوي فقط على قيم عددية
-الفرق الثاني في التسمية حيث يمكننا ان نمزج اسم المتغير مع ارقام او بعض الرموز مثل _ -
مثلا بامكاني تسمية المتغير ب as3arabic

في الرياضيات المتغير يمكنه ان يغير قيمته في أي لحظة, نفس الشئ ينطبق في البرمجة
مثلا المتغير money نفرض ان قيمته 500 بامكانها ان تكبر او تنقص في أي وقت

اذن بصفة عامة للمتغير اسم خاص به و قيمة يمكننا في أي وقت قراءة محتواها او تغييرها


متى نستعمل المتغيرات؟

نستعملها لما نكون بحاجة لتخزين معلومات معينة
حيث يتم تخزينها في الذاكرة المركزية و سنشرحها في فيديو في الدرس القادم
فلو نعود الى المثال السابق لتحضير طبخة
قلنا اننا سنحتاج الى كمية (قيمة) معينة من الزيت
و عدد من البيضات (قد يكون 3 او 4 او اكثر او اقل ..)
في البرمجة هذه هي المتغيرات يعني الادوات التي قد نستعملها في مختلف الاكواد في برنامجنا

_________________


Syntax:

في كل لغة برمجية هناك العديد من انواع المتغيرات و لكل واحدة منهم طريقة معينة لانشائها (syntax)

الطريقة الصحيحة لانشاء متغير في الاكشن سكربت 3 هي :

var name : type = value

حيث :

var هي كلمة دلالية
name: اسم المتغير و لنا الحرية في اختياره و يجب ان لا يكون كلمة دلالية و يبدأ بحرف
type: و هو نوع المتغير (سنتكلم عن مختلف انواع المتغيرات)
value: و هو قيمة المتغير اذا اردنا اعطاء قيمة للمتغير

_______________________________________


سنقوم بانشاء أول متغير لنا في لغة الاكشن سكربت 3 ببرنامج فلاش

أولا:قم بانشاء مشروع actionscript 3 جديد
ثم قم بالضغط على أول اطار موجود داخل ال TIMELINE


http://1.bp.blogspot.com/-i4s8aG-kDGQ/VA5h9mAukPI/AAAAAAAAAM4/xA3N2GzEDx8/s1600/1.gif


اضغط بزر الفأرة الأيمن و اختر Action (أو اضغط F9 في لوحة المفاتيح)

لاحظ الأكواد التالية:

http://4.bp.blogspot.com/-hnzTcnnsv_s/VA5jUUP3DJI/AAAAAAAAANI/IJWsYBZ-6nY/s1600/1.jpg


قمنا بانشاء متغير من نوع String (سلسلة حروف) و قيمتها "as3arabic"
سلسلة الحروف دائما تكون مكتوبة بين مزدوجتين

________


http://4.bp.blogspot.com/-siY78yBOMWU/VA5j7kogQiI/AAAAAAAAANQ/211bkZkNzlU/s1600/2.jpg


انشأنا متغير اسمه speed نوعه عدد حقيقي قيمته 12.6


قم بتجريب الكود التالي:

قم بكتابة هذا الكود ثم اضعط على CTRL + Enter أو control -> Test Scene لتجريبة

http://2.bp.blogspot.com/-k2YTEjbVMKw/VA5kVHlZ-6I/AAAAAAAAANY/IEzrDORtSww/s1600/3.jpg


سيكون هناك خطأ من هذا النوع:


1067: Implicit coercion of a value of type String to an unrelated type Number.


http://4.bp.blogspot.com/-sBw2t-r8kxY/VA5lHUYKVbI/AAAAAAAAANg/AoMkaGQf4eE/s1600/4.jpg


يعني أننا انشأنا متغير من نوع عدد حقيقي لكن قيمته من نوع سلسلة حروف و هذا ما يرفضه المترجم

هذا يسمى ب mode précis اي مود دقيق في الترجمة
بامكاننا نزعه و ترك المترجم يغير اوتوماتيكيا القيم حسب نوعها الا انا هذا قد يشكل خطرا على المبرمج


الطريقة الامثل هي

var speed: Number=Number("15.5");


حيث قمنا بترجمة و تغيير قيمة "15.5" الى 15.5
نسمي هذه العملية ب Casting و سنراها في الدرس القادم


ملاحظة 2 :

varmyVariable = 15;
نلاحظ اننا لم نعطي للمتغير أي نوع لكن المترجم يقبلها و لا ينشئ رسالة خطأ لانه في الحقيقة يقوم باختيار النوع المناسب حسب القيمةالا ان هذا يستغرق بعض الوقت
فمن الافضل دائما التصريح بالنوع

ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــــ

بعض أنواع المتغيرات Data types:

هناك نوعين من المتغيرات

1.المتغيرات البسيطة primitive value: طريقة انشائها مثلما سبق و ذكرنا في الاعلى
(var name: type = value)
و هي:
String Number int uint Boolean


String: متغيرات قيمتها تكون على شكل سلسة من الاحرف مثلما رأينا في الاعلى
Number : للأعداد الحقيقية
int : متغيرات قيمتها عدد طبيعي (سالب أو موجب)
uint: متغيرات قيمتها عدد طبيعي موجب
Boolean: متغيرات قيمتها صحيح أو خطأ (true,false)


2.متغيرات معقدة: و هي ليست كالاولى و تكون طريقة انشائها كالاتي
var name: type= new type();
مثل:
Object Array XML MovieClip الخ
(سنشرحها لاحقا)

___________________________


القيمة الافتراضية (Default Value ):

اذا قمنا بانشاء متغير دون اعطائه قيمة مثل var age:int و اردنا التعرف على قيمته هل سيتشكل لنا رسالة خطأ؟ ماذا سيحدث
فلنجرب هذا الكود


var myBool: Boolean;
trace(myBool);


سيكتب لنا : false
أي انه أعطى false للمتغير بالرغم من اننا لم نقم بهذا. اذن المترجم يعطي قيم افتراضية للمتغيرات في حالة لم نفعل نحن هذا
سأعطيكم مختلف القيم الافتراضية التي يعطيها المترجم حسب النوع


ملاحظة
الدالة trace مهمة جدا فهي تساعدنا على معرفة قيم المتغيرات و الكثير من الاشياء و هي خاصة بالمبرمج
سنستعملها كثيرا
اليكم القيم الافتراضية التي يعطيها المترجم للمتغيرات حسب النوع


http://img01.arabsh.com/uploads/image/2015/03/02/0c3f4d4265f40d.jpg


المتغيرات بدون نوع هي المتغيرات التي انشأناها هكذا

var myVar;

فهي لا تملك أي نوع

trace(myVar);
يكتب
Undefined

abohmam
02-03-2015, 08:54 PM
السلام عليكم و رحمة الله و بركاته

مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 3 و سنعطي في هذا درس بعض الامثلة التطبيقية و التمارين

في الدرس السابق تكلمنا باختصار عن الجانب النظري للمتغيرات تعلم AS3 -جزء1- الدرس 1.2 [المتغيرات]


في هذا الدرس ان شاء سيكون تطبيق لما تعلمناه سابقا

http://3.bp.blogspot.com/-tSPNPdnT8RM/VA5ndjCAglI/AAAAAAAAAN4/ZbFn_2nbfks/s1600/v.jpg

____________________________________________

1.Affectation: و نقصد بها اخذ نفس قيمة متغير اخر مثلا

http://4.bp.blogspot.com/-ZETKAzJQO5s/VA5l-wyf0ZI/AAAAAAAAANo/a_3TPulOTEE/s1600/1.jpg


قم بكتابة هذا الكود ثم اضعط على CTRL + Enter أو control -> Test Scene لتجريبة

والنتيجة

http://2.bp.blogspot.com/-fuUDR7UUf0M/VA5moQoeAWI/AAAAAAAAANw/Nsxb-PKD7QE/s1600/2.jpg


أي أن b اخذ نفس قيمة المتغير a و التي هي 2
بصفة عامة عندما نكتب
b= a;
تعني " سآخذ ما يوجد في المتغير a و اضعه في b"

_____________________________________________


2.MAX_VALUE / MIN_VALUE:

قبل اعطاء قيمة عددية للمتغير يجب التأكد من انها تنتمي الى مجال معين و للتعرف عليه نكتب الاتي

trace(int.MIN_VALUE);
trace(int.MAX_VALUE);


أنا يكتبلي

-2147483648
2147483647


اي كل متغير من نوع int يجب ان تكون قيمته تنتمي الى هذا المجال
نفس الشئ بخصوص Number و uint

_____________________________


3.Casting:

في الدرس السابق عملنا ملاحظة لما يكون متغير من نوع Number (مثلا) و نعطيه قيمة من نوع اخر (String مثلا) يتشكل لنا رسالة خطأ
الطريقة الصحيحة لتخلص من هذا المشكل هو

var myVar1: type = type(var_has_other_type);

كمثال


var a : int = 5;
var b : String = "2";
a= int(b);
trace(a);


يكتب 2 :)

قام المترجم بتحويل "2" الى 2 اي من سلسلة حروف الى عدد طبيعي و اعطاها الى المتغير b

مثال 2


var a:int= int("as3arabic");

trace(a);


نحاول جعل هاته السلسة من الحروف عددا طبيعيا؟


الا ان هذا غير منطقي طبعا و النتيجة يكتب لنا NaN

فلهذا يجب الحذر من هذا النوع من الاخطاء فالمترجم لن يشكل رسالة خطأ و انما يعطي قيمة للمتغير ! (و هي NaN)
و عدم اكتشافها قد يسبب لكم في مشاكل و نتائج غير منتظرة

_______________________________


4.العمليات الحسابية :

للقيام بعملية حسابية لعددين سنتبع نفس الطريقة التي تعلمناها في المدرسة :)


الجمع : +
الطرح: -
الضرب: *
القسمة: /
باقي القسمة : %


trace(5+1);

يكتب 6


trace(10%3);
يكتب 1 لان باقي قسمة 10 على 3 = 1


أمثلة


مثال 1:


var integ:int = 1+2;
var integ2:int = -10;
var result:Number = integ * integ2;
result = result / 3;
trace(result);

- سيكتب لنا 10

الشرح
var integ : uint = 1+2 سيأخذ قيمة 3
result = integ * integ2 يـأخذ قيمة 3 * (10-) و هي 30-
result = result / 3
يأخذ قيمة 10- لان
(-30) / 3 = -10


2مثال

varnumb: Number= 3.5;
varnumb2: Number = 1.2;
varmyInt : int= numb+numb2; // سيتم تحويل العدد الحقيقي الى عدد طبيعي اوتوماتيكيا
trace(myInt);


يكتب 4 بالرغم ان numb+num2= 4.7
أي انه يظهر فقط الجزء الطبيعي للعدد الحقيقي

_______________________________

5. سلسلة الحروف:

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

trace("as3arabic");

يكتب as3arabic

و اذا لم نضع المزدوجتين؟؟

trace(as3arabic);


سيظن المترجم ان هناك متغير اسمه as3arabic و اذا بحث عنه و لم يجده ستظهر رسالة الخطأ هذه


1120: Access of undefined property startimes.

و في حالة ما اذا وجدها ؟ سيظهر قيمتها طبعا :) كما كنا نرى سابقا

_____________________________

2.5:
اذا اردنا أن نظهر المزدوجتين في الشاشة مثل هذا

hello "as3arabic "


هل هذا الكود صحيح؟؟

trace("hello"as3arabic "");

الجواب هو خطأ لان مع نهاية كلمة " hello" المترجم سيعتبر ان سلسلة الحروف قد انتهت !
من اجل حل هذا المشكل هناك طريقتين و هما


trace("hello\"as3arabic \" ");
أو
trace('Hello "as3arabic " ');

____________________________________

3.5 : concatenation

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

trace("hello"+ " as3arabic " );

يكتب hello as3arabic أي اننا قمنا بالصاق كلمة hello مع as3arabic لتصبح كلمة واحدة تم طباعتها بواسطة الدالة trace

مثال

var first:String = "Hello ";
var sec:String = "as3arabic ";
var year:int= 2014;

trace(first +"!"+ sep + sec + year);


سيكتب لنا

Hello !as3arabic 2014

__________________________


4.5 بعض الدوال و المتغيرات المهمة في سلاسل الحروف:

طول (أو عدد أحرف) سلسلة length:


var hello:String= "Hello as3arabic ";

trace(hello.length);


يكتب لنا 15

تحويل الى حروف كبيرة او صغيرة:


var hello = "HeLLo As3aRaBiC";
trace(hello.toLowerCase());
trace(hello.toUpperCase());


الاولى ستقوم بتحويل كل الحروف الى احرف صغيرة

و الثانية الى احرف كبيرة

__________________________


البحث داخل سلسلة حروف (indexOf):


var ss:String = "hello";
trace(ss.indexOf("e"));
trace(ss.indexOf("a"));


1 الاولى ستظهر 1 و تعني ان الحرف موجود في المركز
0الترتيب يبدأ من
h: مركزها 0
e: 1
l:2
o:4

لأن سلسلة الأحرف يمكن التعامل معها كالجدول (سنرى هذا لاحقا)
اما الثانية فالنتيجة -1 لانه غير موجود


__________________________________


https://www.youtube.com/watch?v=Esc1N9hk1QU

abohmam
02-03-2015, 09:32 PM
السلام عليكم و رحمة الله و بركاته

مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 3 و سنتحدث في هذا الدرس عن الدوال الشرطية

http://2.bp.blogspot.com/-GTDAlPWHG40/VA5pmcD7F6I/AAAAAAAAAOQ/b7_4WPXkSCc/s1600/asifconditional.jpg

من الجيد فهم الدروس السابقة :

تعلم AS3 -جزء1- الدرس 1 [مقدمة]
تعلم AS3 -جزء1- الدرس 1.2 [المتغيرات]
تعلم AS3 -جزء1- الدرس 2.2 [المتغيرات_تطبيق]

If statement

http://2.bp.blogspot.com/-HlavLcNhRzo/VA5of8qAgLI/AAAAAAAAAOA/TahJlK7O2oE/s1600/1.jpg

_______________________________

لقد رأينا في الدرس السابق طريقة التعامل مع الأعداد و المتغيرات العددية و مختلق العمليات التي يمكننا القيام بها
في هذا الدرس سوف نرى كيفية تجريب محتوى تلك المتغيرات و سنقوم بتنفيذ أو لا مجموعة أكواد حسب قيمة تلك المتغيرات .
كما ترون فالدوال الشرطية ضرورية جدا في عالم البرمجة.


مفاهيم أساسية:

كما سبق و قلنا الشرط هو لتجريب محتوى متغير او مجموعة متغيرات ثم نقوم بتنتفيذ اكواد حسب تلك القيم بهذا الشكل
اذا (شرطي == صحيح) اذن نفذ هذا الكود
و إلا نفذ هذا الكود
في دالة شرطية يمكنني تجريب القيم حسب نوعها, مثلا يمكننا مقارنة عدد اذا كان اكبر او يساوي عدد اخر أي اننا نبحث عن علاقة بين العددين او متغيرين

http://img01.arabsh.com/uploads/image/2015/03/02/0c3f4d4265fa07.jpg

_____________________________________

الفرق بين = و == و === :

في الدرس السابق رأينا طريقة اعطاء قيمة الى متغير عن طريق "="
;var a:int = 5
أي "=" تستعمل لل affectation فقط !
أما "==" و "===" فهي تستعمل للمقارنة!

الفرق بينهما هو :
فلنفرض أننا نملك متغيرين, الأول سلسلة أحرف قيمته "3.14" و الثاني عدد حقيقي قيمته 3.14
اذا قارنا القيمتين عن طريق "==" فالمترجم سيحتسب القيمة صحيحة لانه يقوم بتحويل "3.14" الى قيمة عددية و يقارن ليجدهما متساويين
اذا قارنا القيمتين عن طريق "===" فالمترجم سيقارن القيمتين + النوع
و بما ان النوع مختلف فواحد Number و الاخر String ف النتيجة هي خطأ

____________________________________

العوامل المنطقية (opération logique):


في السابق العوامل المستعمة لمقارنة قيمتين, أما العوامل المنطقية فهي تستعمل لربط عدة شروط
و هذا ما يمكننا مثلا لتجريب شرط اذا كانت قيمة محصورة بين عدد و عدد اخر

نأخذ نفس المثال السابق

:عددي محصور بين 0 و 10 يعني -
عددي أكبر من 0
عددي أصغر من 10
تكتب على هذا الشكل:
(عددي > 0 و عددي <10)
بالانجليزية
myNumber > 0 AND myNumber < 10
في الفلاش هذه هي الروابط المنطقية الموجودة
و تعني "لا" المنطفي : !
و تعني "و" المنطقي :&&
و تعني "أو" المنطقي : ||
شرح:
لما نقول( ألفا و بيتا) فالنتجية تكون صحيحة فقط و فقط اذا كان ألفا صحيح و بيتا صحيح
اذا كان ألفا خطأ و النتيجة ستكون خطأ , نفس الشئ اذا كان بيتا خطأ
لما نقول (ألفا أوبيتا) ف لكي تكون النتيجة صحيحة يكفي ان يكون إما الفا أو بينا صحيح
لما نكتب (!الفا) فالقيمة تكون صحيحة اذا كان الفا خطأ ف "!" تعكس القيمة و عكس خطأ هو صحيح

_________________________________

:If ..else statement syntax

الان سنتكلم عن طريقة كتابة الشروط في الاكشن سكربت 3


if(condition)
{
//code1
//في حالة تحقق الشرط
// condition == true
}
else
{
//code2
//condition == false
}

تعني اذا تحقق الشر : if (condition)
في حالة لم يتحقق يتم تنفيذ كود 2:else
أمثلة


var myLife:int= 0;
if(myLife == 0 )
trace('You are died');


سيكتب لنا You are died
لان قيمة المتغير تساوي 0 يعني الشرط محقق
هناك ملاحظتين :
الاولى لم نكتب لم نفتح الوسام {}
else و الثاني لا توجد
عدم وجود else يعني ببساطة اذا كانت القيمة مختلفة عن 0 فلا تفعل أي شئ لاننا لم نخصص لها كود
اما بخصوص الاوسمة فهو يأخذ اول كود ياتي بعد الشرط اما الباقي فيعتبر خارج الجملة الشرطية
مثلا


var myLife:int = 0;
if(myLife == 0)
trace("You are died");
else
trace("You are alive");
trace("startimes");


you are diedنعرف ان القيمة تساوي 0 يعني الشرط محقق يعني سيكتب لنا
لن يتم تنفيذ كودها و هو السطر الاولelse و في هذه الحالة
سيتم كتابتها لانها خارج الجملة startimes و هذا ما يعني ان

______________________________________


طريقة أخرى لكتابة جملة شرطية ذات سطر واحد

عوضا ان نكتب

if(myLife == 0)
myLife == 100;
else
myLife = myLife + 50;


يمكننا اختصارها الى

MyLife = (myLife == 0) ? 100: myLife + 50;

___________________________

If.. else IF:

مثلما كنا نفعل في السابق بامكاننا مقارنة متغير مع عدة قيم لتنفيذ اكواد مختلفة و تكتب على هذا الشكل


if(condition)
{
}
else if(condition 2)
{
}
else if(c3)
{
}
..
...
..
else
{
}

مثال :


var myNumber:int= 1;

if(myNumber <0)
trace(myNumber +" < 0");

else if (myNumber == 0)
trace(myNumber + " == 0");

elsetrace(myNumber +" >0");

نقارن المتغير اذا كان اصغر من 0. اذا كان الشرط غير محقق نقارن اذا كان يساوي 0 . و اذا كان غير محقق فحتما هو موجب
_____________________________________


:SWITCH .. CASE

تخيل اننا نملك العديد من الجمل الشرطية لنفس المتغير

if(c1)
{
}
else if(c2)
{
}
....
else if(condition n)
{
}

سيكون الكود طويل و غير أنيق
هي الحل حيث تبسط لنا الكود الى هذا الشكلswitch

switch(variable)
{
caseVALUE1:code1;break;
case VALUE2: code2;break;
// ... case valueN: code N;break;
default: code Default
}

و تقرأ هكذا
break اذا كان المتغير يساوي القيمة 1 فنفذ الكود 1 ثم اخرج عند الوصول الى

و الا فانه سيكمل تنفيذ الاكواد التي تأتي بعد الكود الحاليbreak يجب دائما كتابة
أي الكود 2 و 3 .. الخ
في حالة وجوده لأنه غير اجباري default في حالة ما اذا كان المتغير لا يساوي أي قيمة فالمترجم سينفذ الكود الموجود في مثال


switch(myColor)
{
case"red" : trace("My color is red"); break;
case"blue" : trace("My Color is blue"); break;
case"green": trace("My color is green"); break;
default: trace("Other colors");
}

abohmam
02-03-2015, 09:42 PM
السلام عليكم و رحمة الله و بركاته

مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 3
و سنتحدث في هذا الدرس عن الحلقات التكرارية (Loops statement) بالفرنسية Les boucles

http://3.bp.blogspot.com/-uoB5y8fwed8/VA8M1Qxr_iI/AAAAAAAAAOc/IPw044-2xVw/s1600/shutterstock_112490612-300x300.jpg


في الدرس السابق تكلمنا عن الدوال الشرطية التي مكننا من تنفيذ اختيارات حسب الشروط
انها خطوة كبيرة في عالم البرمجة !
فهمها مهم جدا لأنها جد ضرورية و سنحتاجها في أي وقت
الا أن هذا ليس كل شئ فهناك أشياء أخرى يجب تعلمها, و سنتكلم عن الحلقات التكرارية

من اسمها نفهم أننا نتكلم عن شئ (أو كودات) تنفذ بصفة مكررة و هذا يعني اننا نقوم بتنفيذ سلسلة من الاكواد عدة مرات.
في الاكشن سكربت 3 هناك ثلاث أنواع من الحلقات التكرارية سنشرحها في هذا الدرس مع أمثلة طبعا.

_____________________________


I.الحلقة التكرارية WHILE: (ما دام)

كما سبق و ذكرنا فالحلقات التكرارية تمكننا من تكرار الاكواد عدد مراة
قد يكون العدد منتهي (محدود , مثلا نكررها 5 مرات . 6مرات .. 100 مرة)
و قد يكون غير محدود -الى مالا نهاية-

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

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

مادام (شرطي صحيح) اذن نفذ هذه الاكواد

كما ترون ف while تشبه تمام الدوال الشرطية (if ..esle) إلا ان الفرق هو ان الاكواد تنفذ بشكل متكرر الا غاية عدم تحقق الشرط الازم
الدالة while تقوم بتجربة الشرط اذا كان محققا أم لا قبل تنفيذه

كيف نكتبها في الأكشن سكربت 3؟ syntax:


while(Condition)
}
اكواد تنفذ اذا كان الشرط محقق//
{


مثلما رأينا في if ..else فاذا لم نضع الاوسمة سيتم تنفيذ السطر الاول فقط بعد الشرط
_______________________

كيف تعمل الحلقة while ؟

تعني مادام الشرط محقق: while(condition)
}: بداية الحلقة التكرارية و من هنا سيتم تنفيذ الاكواد
الاكواد:و هي الاكواد التي تنفذ سطرا بسطر
{ : نهاية الحلقة التكرارية و هنا نعود الى الشرط و نرى ان كان صحيحا ام لا
اذا كان صحيح نعيد تنفيذ الاكواد مجددا
و اذا كان خاطئا نكمل تنفيذ الاكواد التي تأتي خارج الحلقة يعني بعد وسام النهاية

_______

مثال:

var i: int = 0;
while(i<3)
{
trace("i = "+i);
i = i+1;
}


اذا قمنا بتجربة الكود فسيظهر لنا
i = 0
i = 1
i = 2

لم يظهر 3 لأن لما كان i يساوي 3 الشرط لم يتحقق لأن 3 ليس أصغر من 3 :)

Syntax :

بامكاننا كتابة الكود الاتي

;i = i+1

كالاتي

i++;

-------------------------------------------

II. الحلقة التكرارية Do .. While:

و تعني نفذ هذه الاكواد ثم جرب ان كان الشرط صحيح
و هي شبيه للحلقة while لكن الفرق هو ان الاولى تتأكد من صحة الشرط ثم تنفذ
اما الثانية فهي تنفذ ثم تتحقق
و هذا ما يعني ان while بامكانها عدم تنفيذ اي كود اذا كان من البداية الشرط غير محقق
اما الثانية فستنفذ على الاقل مرة واحدة

مثال


var nb:int = 2;
do
{
trace(nb);
nb++;
}while(nb == 0)

بالرغم من ان الشرط غير محقق من البداية الا انه سيكتب لنا 2

_________________________

III.الحلقة التكرارية FOR


تستعمل عموما لما نكون نعلم عدد التكرارات التي نحتاجها لتنفيذ كود معين

و تكتب على هذا الشكل


for(INIT,CONDITION,ACTION)
{
//instructions..
}

INIT: هنا يتم وضع المتغيرات و قيمتهم الابتدائية و بامكاننا انشاء متغيرات هنا
CONDITION: مثلما كنا نرى في الاعلى أي نضع الشرط
ACTION: بامكاننا وضع الكثير من الأشياء هنا لكن عموما تستعمل لزيادة او انقاص قيمة المتغير الذي نقارن به عدد مرات تنفيذ الاكواد

مثال:

for(var i :int= 0; i< 3; i++)
{
trace("i = "+i);
}


سيظهر لنا

i = 0
i = 1
i = 2
____________

ماذا يحدث بالضبط؟

خطوة بخطوة :
1.
var i :int= 0
هذا أول كود ينفذ و لمرة واحدة فقط حيث تم انشاء متغير قيمته 0

2.
ثاني شئ نتأكد من صحة الشرط أي i<3
اذا كان صحيحا يتم تنفيذ الاكواد و الا نخرج

3.
بعد الوصول الى وسام نهاية الحلقة {
نصعد الى action و نضيف قيمة 1 الى i

4.
نعود مجددا الى الشرط اذا كان صحيحا ننفذ الكود و الا نخرج
و هكذا.... الى غاية عدم تحقق الشرط

--------------------------
شكرا

abohmam
02-03-2015, 10:07 PM
السلام عليكم و رحمة الله و بركاته

مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 3
وسنتحدث في هذا الدرس عن الجداول (Arrays) بالفرنسية Les tableaux

http://4.bp.blogspot.com/-1pGw7XdBlQw/VA8OGC9eDeI/AAAAAAAAAOs/bj2soSmviUA/s1600/preview.jpg

______________________________________


تكلمنا في الدرس الثاني عن المتغيرات البسيطة, التي تمكننا من تخزين المعلومات و قيم معينة
إلا أنها قد تكون محدودة جدا عندما يتعلق الأمر بقيم كثيرة
كما كنا نرى سابقا كل متغير له قيمة واحدة..و هذا يعني اذا احتجنا الى تخزين الكثير من القيم يلزمنا الكثير من المتغيرات و هذا قد يكون عائقا!
لهذا سندخل في عالم الجداول
المبدأ الذي تعمل عليه الجداول هو أنها باستطاعتها تخزين الكثير من القيم في متغير واحد
و هذا ما يسهل علينا استعمال تلك المعلومات في البرمجة


مثال:
فلنفرض اننا نريد تخزين مجموعة أسماء..سيكون مملا و طويلا ان نستعمل الطريقة الكلاسيكية:


var name1:String = "name1";
var name2:String = "name2";
var name3:String = "name3";
var name4:String = "name4;
...

_____________________________________


في الأكشن سكربت 3 هناك العديد من الطرق لانشاء جدول
سنرى في هذا الدرس الجداول من نوع Array


الجداول في الاكشن سكربت 3:


النوع Array:

و هو أول نوع من الجداول تم استعماله في الاكشن سكربت منذ برمجته

1.هذه الجداول ليست ثابتة مثلما نرى في لمترجمات الاخرى و انما ديناميكية
و هذا يعني أنه بامكاننا اضافة او ازالة قيم متى نريد أي ان حجمه ليس ثابتا
في لغة C اذا أنشأنا جدولا ب 5 قيم فانه اذا قمنا بملئه ب 5 قيم فلا يمكننا اضافة قيمة 6 (للقيام لهذا يلزمنا انشاء جداول بطريقة اخرى)


2. لسنا مجبرين على اعطاء نوع القيم للجدول و نقصد بهذا :
في اللغات الاخرى اذا اردنا انشاء جدول, يجب علينا ان نعطي نوع القيم (أعداد , سلاسل حرفية ..الخ) و يجب أن تكون كل قيمه من نفس النوع
أما في الأكشن سكربت 3 فيمكننا ادخال عدة أنواع من القيم في نفس الجدول (int, uint, String, Number ..ect)

____________________________________

Syntax:

هناك عدة طرق لانشاء الجداول, و تبقى الطريقة الأساسية مثل التي رأيناها في الدرس الثاني

var myTable : Array = VALUES;


حيث أن VALUES قد تكون قيم عددية
قد تكون متغير اخر (يعني نأخذ القيم الموجودة في ذلك المتغير و نضعها في myTable.. )
كما نلاحظ هي مشابهة تماما لما تعلمناه سابقا

____________________________________

طرق انشاء الجداول و Initialisation :

I.جداول أحادية الابعاد:

http://3.bp.blogspot.com/-d737RU4D0xw/VA8RNYg4iVI/AAAAAAAAAO8/uS7M5Tfxt2c/s1600/1320453551085.png


هناك عدة طرق مختلفة لانشاء جدول و اعطائه قيمته الاولي (initialisation):

0.var myArray : Array = [];


قمنا بانشاء جدول فارغ (طوله 0)


1.var myArray: Array = new Array();

نفس ما قمنا به في الاعلى لكن بكتابة مختلفة, يعني أنشأنا جدولا فارغا.

2. var myArray: Array = new Array(7);

هذا يعني أننا قمنا بانشاء جدول طوله 7 (نقصد بالطول عدد الخانات التي يحتويها حاليا)

http://3.bp.blogspot.com/-d737RU4D0xw/VA8RNYg4iVI/AAAAAAAAAO8/uS7M5Tfxt2c/s1600/1320453551085.png

3.var myArray: Array = new Array("hello"," as3arabic ","programmers");

و هذا يعني أننا قمنا بانشاء جدول يملك 3 قيم كما هو مكتوب

http://2.bp.blogspot.com/-ncN-I2C5afI/VA8SBl7CVWI/AAAAAAAAAPE/4Hr1EEZisvE/s1600/hel.jpg


4.var myArray: Array = ["Hello" , " as3arabic ", "programmers"];


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

________________________________

الدالة trace:


هذه الدالة ستطبع لنا "كل" قيم الجدول

var myArray: Array = ["Hello" , " as3arabic ", "programmers"];
var myArray2:Array = [1,2,3,4,10];
trace("Array1 = "+myArray);
trace("Array2 = "+myArray2);



ستكتب
Array1 = Hello as3arabic programmers

Array2 = 0 1 2 3 4 10

________________________________

عناصر الجدول (elements):

ونقصد بالعنصر القيمة المحتواة في الجدول
نعلم ان الجدول قد يحتوي على الكثير من القيم او العناصر
و لكن يجب استعمال كل واحد منها على حدى
و هنا نتحدث عن ما يسمى بالمؤشر أو بالانجليزية index او بالفرنسية indice


index:
و هو رقم الخانة التي تحتوي على العنصر في الجدول و قيمته تتراوح بين 0 و (طول الجدول-1)
يتم كتابة المؤشر بين []


سنشرحه في مثال
varmyArray:Array = [15,16,17];


هذا الجدول يتكون من ثلاث قيم حيث
مؤشر العدد 15 هو 0
trace(myArray[0]); //سيكتب 15


مؤشر العدد 16 هو 1
trace(myArray[1]); // سيكتب 16


مؤشر العدد 17 هو2
trace(myArray[2]); //17 سيكتب


كما نرى الخانة الاولى في الجدول رقمها 0 و ليس 1 و هذا مهم

http://1.bp.blogspot.com/-Qk-zxM3R3EQ/VA8ORAKS8sI/AAAAAAAAAO0/6NF52AgMROM/s1600/t%C3%A9l%C3%A9chargement.png

_________________________________

مثال اخر:


var myArray : Array = new Array(3); // أنشأنا جدول طوله 3 لكن بدون قيم
myArray[0] = 10; // الخانة الاولى ستحمل القيمة 10
myArray[1] = 20;
myArray[2] = myArray[0] + myArray[1] + 10;


trace(myArray[2]);



ماذا سيظهر؟ دون تجريب الكود (الاجابة في التعليقات)؟؟

____________________________


بعض خصائص النوع جداول Array:


1.طول الجدول length:


لمعرفة كم عدد القيم التي يحتويها الجدول نستعمل الخاصية length


var myArray : Array = new Array(10);
trace(myArray.length); // 10 سيكتب


_____________________________


2.اضافة خانة جديدة الى جدولunshift / push:


أ.push:
فلنفرض اننا قمنا بانشاء جدول من 3 قيم
ثم أردنا اضافة خانة جديدة أي قيمة جديدة فياخر الجدول علما ان الجدول مملوء
يجب علينا استعمال الخاصية push
___________________




var myArray:Array = [10,20,30];
trace( myArray.length); //3 سيكتب


myArray.push(40);

trace( myArray.length); //4 سيكتب
trace(myArray[3]); // سيكتب 40 أي ان الخانة الأخيرة تحتوي على 40

___________________

ب. unshift

مثل push تماما إلا انها تضيف القيمة في أول خانة في الجدول يعني ال index 0

_________________________________

3.حذف قيمة من الجدول shift / pop:

مثلما رأينا في الأعلى ف shift و popتعمل بنفس المبدأ و هو
pop: حذف خانة من اخر الجدول
shift: حذف خانة من أول الجدول

____________________________________


هل يمكننا اضافة أو حذف قيم من index نحن نختاره؟


و هنا سنتكلم عن الخاصية splice :


splice(i , j ,values);


حيث
i: هو الاندكس الذي نريد أن نضيف أو نحذف
j:عدد القيم التي نريد حذفها انطلاقا من الاندكس i
values: القيم التي نريد اضافتها قد تكون واحدة او كثيرة
مثلا
splice(1,1,20,50,30);
تعني اذهب الى الخانة الثانية (لأن الترتيب يبدأ من الصفر) ثم احذفها ثم قم باضافة القيم 20 50 30


1.للاضافة:
سننشئ جدول من 3 قيم و سنقوم باضافة قيمة في الخانة الثالثة


var myArray: Array = [10,20,40];
myArray.splice(2,0,30);
trace(myArray);
// 10 20 30 40


طبعا كما ترون (splice(2,0,30 لاننا لا نريد حذف اي قيمة لكن فقط للاضافة

2. للحذف :

var myArray: Array = [10,20,40];
myArray.splice(1,2);
trace(myArray); // 10


_________________________________

تمارين
1.
نريد انشاء جدول يحتوي على 50 خانة فارغة
ثم نقوم بملئ كل خانة برقم الاندكس الموجودة فيه
مثلا الخانة 0 قيمتها 0 .. الخانة 40 قيمتها 40

أكتب الكود المناسب دون تجريبه في الفلاش

.2
var myArray: Array = ["Hello ","as3arabic"," 's "," developer","!"];
myArray.pop();
myArray.splice(2,1);
myArray.shift();
trace(myArray);



دون تجريب الكود أعطينا ماذا ستيطبع في الشاشة؟

الاجابة في التعليقات
_________________________________


II.السلاسل الحرفية :

سبق و أن تكلمنا عن السلاسل الحرفية في الدرس الثاني
و قلنا انها نوع من انواع المتغيرات حيث تكون قيمتها مجموعة احرف

مثلا
var myName:String = "as3arabic";


في الحقيقة السلاسل الحرفية هي مثل الجدول! طوله هو عدد الأحرف
فمثلا "as3arabic" سيتم تقسيمها الى 9 خانات
الخانة الاولى (index 0) قيمتها a
الثانية قيمتها s
للتأكد جرّب الكود التالي


var myName : String = "as3arabic";

for(var i:int = 0; i<myName.length ;i++)
{
trace(i + " = "+ myName.charAt(i) );
}


النتيجة
0 = a
1 = s
2 = 3
..
8 = c
_________

قمنا بانشاء متغير من نوع سلسلة حرفية
ثم قمنا باظهار محتوى كل خانة من خاناته
طبعا مثلما نفعل مع الجداول فلاظهار خانة يجب كتابة رقم الاندكس غير اننا هنا لا نستعمل []
بل نكتب اسم المتغير متبوع بالكلمة (charAt(index حيث نضع رقم الخانة مكان index
عوض ان نعرضها واحدة بواحدة


myName.charAt(0)
myName.charAt(1);

myName.charAt(8)


قمنا بانشاء حلقة تكرارية تبدأ من 0 (لان اول خانة رقمها 0 )

الى غاية طول الحلقة myName.length

(طبعا يمكن ان نكتب 9 عوض myName.length لكن المشكلة هي لو قمنا بتغيير قيمة myName فالحلقة دائما تدور 9 مراة دائما فمثلا

myName = "as3";
لما يصل المتغير i الى قيمة 3
myName.charAt(3)

سنتفاجئ برسالة خطأ لان طول المتغير 3 يعني الاندكسات الممكنة هي 0,1,2

لهذا من الافضل ان نترك myName.length فهي أكثر ديناميكية )

(سنتكلم لاحقا عن الكلاس String و مخلف خصائصها في الجزاء الثاني )

__________________________________

III. المصفوفات و الجداول متعددة الأبعاد:

رأينا ان كل عنصر من الجدول يحتوي على معلومات من عدة أنواع كالاعداد الحقيقية و السلاسل الحرفية ..الخ
و ما يجب ان نقوله هو ان بامكانه ايضا احتواء متغيرات معقدة كالكائنات و الجداول!
هذا يعني ان كل عنصر من الجدول بامكانه ان يكون جدولا هو أيضا لصبح لدينا جدولا متعدد الابعاد


لا يوجد فرق كبير في كيفية الوصول الى قيمة العناصر او تغييرها .
هذا مثال عن جدول ثنائي الابعاد 2D و التي تسمى بالمصفوفات:


http://4.bp.blogspot.com/-Sve-7zJBYnI/VA8W_xjJGCI/AAAAAAAAAPM/fCAXkYP4J0c/s1600/matrix.png


سنتعمق في المصفوفات :


في الجداول أحادية الابعاد تعلمنا عن index و قلنا انه مكان تواجد عنصر ما (element) الذي يحتوي على قيمة
و كنا نصل اليه بهذه الطريقة


arrayName[index]

أما المصفوفات تملك أسطر (rows بالانجيليزية, lignes بالفرنسية)
و أعمدة (columns)


للوصول الى العنصر نكتب التالي

matrixName[row][column]

حيث
row: رقم السطر و يبدأ من الصفر
column: رقم العمود و يبدأ من الصفر


http://4.bp.blogspot.com/-Tnr7XRvrxfA/VA8YtJBKxMI/AAAAAAAAAPU/UcyMNQRfPrc/s1600/lv_struct_7.gif

لدينا هذا الكود:

var myArray: Array = [];
myArray[ 0 ] = [ "A", "B", "C" ];
myArray[ 1 ] = [ "D", "E", "F" ];
myArray[ 3 ] = [ "G", "H", "I" ];
trace( myArray[ 1 ][ 2 ] ); //F


السطر الاول(رقم 0 ) يحتوي على جدول طوله 3 يحتوي على القيم A B C
السطر الثاني (رقم 1) يحتوي على جدول طوله 3 يحتوي على القيم D E F
السطر الثالث(رقم 2) يحتوي على جدول طوله 3 يحتوي على القيم G H I

نريد معرفة محتوى السطر رقم 1 (ابتداء من الصفر ) يعني السطر الثاني
و العمود رقم 2


http://1.bp.blogspot.com/-jtwP8qX_hIw/VA8aot_xLpI/AAAAAAAAAPc/8-Jb7EXRduw/s1600/1320457062256.png

abohmam
02-03-2015, 10:14 PM
السلام عليكم و رحمة الله و بركاته
مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 3
و سنتحدث في هذا الدرس عن الدوال Functions

سنتحدث في هذا الدرس عن الدوال و التي نجدها في كل لغات البرمجة

الدوال تمكننا من كتابة برامج مصغرة نقوم باستدعائها عند الحاجة

سوف نفهم جيدا معنى الدوال و طريقة كتابتها و الهدف منها
سنقدم بعد الامثلة و التمارين أيضا

___________________________________

مفاهيم أساسية:

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

مكونات الدالة:

تتكون الدالة من ثلاث أشياء أساسية و هي
المداخل (Input): و هي مجموعات متغيرات تدعى parameters (و بامكاننا عدم أي واحدة) نقوم بالعمل بها داخل الدالة للقيام بمهمة معين
العمليات او الحسابات : و هي الاكواد التي يتم تنفيذها و هي مكتوبة في قلب الدالة
نوع الدالة : و هو نوع النتيجة او المخرج الذي يجب ان يرجعه لنا الدالة بعد نهاية التنفيد
المخرج (output): و هي القيمة النهائية التي ستحتويها الدالة

تمام مثلما كنا نرى في المدرسة
مثلا في الرياضيات
f(x) = x²;
هذه الدالة مربع
المدخل هو x و المخرج (او النتيجة) هو مربع المدخل

http://3.bp.blogspot.com/-y5W_GHCiqgg/VA8jRWvTo2I/AAAAAAAAAPo/kOhOw1574qM/s1600/fct.jpeg


طريقة كتابة دالة في الاكشن سكربت 3 (Syntax):


f unction name_of_function(parameters):type
{
//codes
return OUTPUT;
}

حيث

function: كلمة دلالية تكبت قبل انشاء دالة

name_of_function: و هو اسم الدالة و يكون اختياري
من الافضل ان يكون حسب وظيفة الدالة و يمنع ان يكون كلمة دلالة و يجب أن يبدأ بحرف و ليس برقم او شئ اخر

parameters: و هو المدخل, يمكن ان يكون 0 (اي بدون مدخل) , أو مجموعة مداخل

type: و هو نوع المخرج الذي تعطينا الدالة

return: كلمة دلالية تعني أرجع القيمة التي تكتب بعدها
سيتم الخروج من الدالة مباشرة بعد تنفيذ هذا الامر
أي كود يكون مكتوب تحت return لن ينفذ طبعا


سأعطي مثال الدالة مربع التي ذكرناها سابقا و نقوم باستدعاها
ستكتب بهذا الشكل


f unction power2( x:int ) :int
{
var result:int = x*x;
return result;
}

var myNumber:int= 10;
var myResult:int;

myResult = power2(myNumber); // استدعاء الدالة
trace(myResult);
//يكتب 100

و هذا يعني ان المتغيرmyResult أخذ القيمة التي خرجت بها الدالة power2
قم بتجريب هذا الكود معطيا قيما أخرى للمتغير myNumber

______________________________________


و اذا اردت كتابة دالة لا ترجع لنا أي قيمة ؟؟ مثلا دالة تطبع لنا hello as3arabic

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

مثال

___________1___________

function salutation():void
}
trace("Hello as3arabic");
{

salutation();
ستكتب لنا hello as3arabic//


كما نرى فالدالة salutation لا تحتوي على parameters بما اننا لا نحتاجها
و هي لا تملك return فنحن لا نحتاج ان ترجع لنا اي قيمة

____________2___________

function alert(txt: String):void
{
trace("Alert: "+txt);
}

alert("Attention virus!");
ستكتب !Alert: Attention virus //

______________________________________


المتغيرات المحلية Local variables:

و نقصد بها المتغيرات التي يتم انشائها داخل الدالة (لا نتلكم على ال parameters)
فهي متغيرات يتم حذفها مباشرة بعد الخروج من الدالة
يتم انشائها عند الحاجة طبعا

مثلا

function Exemple():void
{
var Name:String = "Chafik";
trace(Name);
}

Exemple();
trace(Name);

قمنا بانشاء الدالة Exemple و داخلها قمنا بانشاء متغير Name ثم استدعينا الدالة
و قمنا بطباعة المتغير Name
الا أن هذا يتسبب بحدوث خطأ لأن المترجم لم يجد المتغير Name لانه يتم حذفه بعد الخروج من الدالة

___________________________________


parameters اختيارية (Optional) :

لما نقوم بانشاء دالة ما
ثم نقوم باستدعائها
علينا باحترام مكان تواجد ال parameters أي ترتيبهم و عددهم
فاذا جربنا هذا الكود

function test(p1:int):void
{
trace(p1);
}
test();

قمنا بانشاء الدالة test ذات مدخل واحد و هو p1
لكن عند استدعائها لم نضع أي مدخل
و هذا سيشكل رسالة خطـأ
اذن p1 هو مدخل اجباري

_______________________

أحيانا نريد ان نضع مداخل اختيارية اذا قمنا باستدعاء الدالة دون وضعهم ستشتغل بقيمة ابتدائية من اختيارينا
مثلا
اريد ان استدعي دالة تكتب لي
"Hello Chafik" اذا اعطيتها اسمي كمدخل
و في حالة لم اعطيها اسمي تكتبلي
"Hello as3arabic"

اليكم الطريقة


f unction salutation(msg:String= "as3arabic"):void
{
trace("Hello "+msg);
}

salutation("Chafik");
salutation();


الاولى ستظهر Chafik أما الثانية فستظهر القيمة الابتدائية و هي as3arabic
اذن msg هومدخل اختياري


ملاحظة مهمة :يجب دائما وضع المداخل الاجبارية قبل الاختيارية
مثلا

function exemple(p1:int, p2:int , p3:int = 1, p5:int = 5)

_________________________________

تمارين

1. أكتب دالة لمقارنة عددين و ترجع لنا العدد الاكبر

2. اكتب دالة ترجع لنا أصغر قيمة موجودة داخل جدول

3.اكتب دالة لحساب القاسم المشترك الاكبر لعددين PGCD
__________________

الى هنا نصل الى نهاية الجزء الاول من هذه الدورة التي رأينا فيها أساسيات البرمجة في الاكشن سكربت 3
فهم الاساسيات مهم جدا قبل البدأ في الجزء الثاني عن قريب ان شاء الله

azizsoft
02-03-2015, 10:40 PM
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

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

بارك الله فيكم جميعا :abc_022:

عبود عبود
02-03-2015, 10:49 PM
جزاك الله خيرا

:abc_152:

كاو دهوكي
03-03-2015, 03:31 AM
شـكــ وبارك الله فيك ـــرا لك ...:abc_152:

يا يريت هناك ملف لــpdf تكون الكتابة واضحة جودته عالية لهذه الشرح حتى نستفيد اكثر وتكون لاي واحد كأرشيف
وجزاك الله خيرا:abc_023:

كريم جودي
03-03-2015, 07:16 AM
جزاك الله خيرا

أبو يوسف
03-03-2015, 01:53 PM
:teslam:

جهد كبير وعمل رائع

جزاك الله خيرا اخي ابو همام وبارك الله فيك

فرح صالحي
03-03-2015, 02:10 PM
جزاك الله خيرا الى يوم الدين
موفق بإذن الله .:abc_022:.. لك مني أجمل تحية .

كريم جودي
03-03-2015, 08:02 PM
هل هناك ملف pdf لهذا الدرس اذا امكن

أبو فارس
04-03-2015, 02:41 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

abohmam
05-03-2015, 01:19 AM
جزاكم الله خيرا جميعا إخواني

أشكر لكم هذا المرور العطر والتواصل الجاد

ان شاء الله بعد الإنتهاء سيتم التجميع سواء كملف pdf أو كتاب إلكتروني وهكذا طلب الأخ خادم المسلمين " أيضا

موفقين ان شاء الله

خادم المسلمين
05-03-2015, 10:16 PM
بسبب انقطاع الانتر نت اسف على التأخير فى الرد على الموضوع المدهش والاكثر من رائع لاروع مدير منتدى
شكرا جزيلا على المجهود المبذول فى نقل هذه المادة العلمية النفيسة
ومنتظرين باقى الدروس ان شاء الله
وجزاكم الله خيرا

خادم المسلمين
08-01-2017, 06:59 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

خادم المسلمين
17-09-2018, 05:31 PM
:abc_022::abc_022: