السلام عليكم و رحمة الله و بركاته
مرحبا بكم في هذا الدرس الجديد من سلسلة دروس تعلم الاكشن سكربت 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 :
طرق انشاء الجداول و Initialisation :
هناك عدة طرق مختلفة لانشاء جدول و اعطائه قيمته الاولي (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");
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 سيكتب
__________________________________________________________
مثال اخر:
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 و التي تسمى بالمصفوفات:
سنتعمق في المصفوفات :
في الجداول أحادية الابعاد تعلمنا عن 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
________________________________________________
السطر الثاني (رقم 1) يحتوي على جدول طوله 3 يحتوي على القيم D E F
السطر الثالث(رقم 2) يحتوي على جدول طوله 3 يحتوي على القيم G H I
نريد معرفة محتوى السطر رقم 1 (ابتداء من الصفر ) يعني السطر الثاني
و العمود رقم 2
________________________________________________
الدرس القادم
سؤال قد يكون خارج الموضوع
ردحذفهل يمكننى تقسيم نص تم تحميله من ملف خارجى ووضع هذا النص فى مصفوفة واتمكن من البحث عن قيمة معينه داخل هذه المصفوفة ؟
وإن كانت الاجابة بنعم فكيف يحدث ذلك ؟