الثلاثاء، 9 سبتمبر 2014

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



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

  
الدروس السابقة :





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

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

_______________________________________________________________________

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

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

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

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

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


______________________________________________________________________



طريقة كتابة دالة في الاكشن سكربت 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
فهم الاساسيات مهم جدا قبل البدأ في الجزء الثاني عن قريب ان شاء الله
أي سؤال يطرح سأحاول الاجابة عليه
الجزء الثاني


تابع القراءة Résuméabuiyad

الاثنين، 8 سبتمبر 2014

تعلم AS3 -جزء1- الدرس 5 [الجداول و السلاسل الحرفية]



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



 الدروس السابقة :








______________________________________ 

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

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

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.جداول أحادية الابعاد:


هناك عدة طرق مختلفة لانشاء جدول و اعطائه قيمته الاولي (initialisation):
0.
var myArray : Array = [];


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

1.
var myArray: Array new Array(); 
نفس ما قمنا به في الاعلى لكن بكتابة مختلفة, يعني أنشأنا جدولا فارغا.

2.
 var myArray: Array new Array(7);
 هذا يعني أننا قمنا بانشاء  جدول طوله 7 (نقصد بالطول عدد الخانات التي يحتويها حاليا)



3.
var myArray: Array new Array("hello"," as3arabic ","programmers");
و هذا يعني أننا قمنا بانشاء جدول يملك 3 قيم كما هو مكتوب




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)
يتم كتابة المؤشر بين []


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

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

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

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

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




__________________________________________________________

 مثال اخر:


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" سيتم تقسيمها الى  خانات
الخانة الاولى (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 و التي تسمى بالمصفوفات:



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

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



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

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



matrixName[row][column]

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




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


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




________________________________________________

تابع القراءة Résuméabuiyad

جميع الحقوق محفوظة لمدونة 2014-2015 as3arabic |