الاثنين، 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




________________________________________________


هناك تعليق واحد:

  1. سؤال قد يكون خارج الموضوع
    هل يمكننى تقسيم نص تم تحميله من ملف خارجى ووضع هذا النص فى مصفوفة واتمكن من البحث عن قيمة معينه داخل هذه المصفوفة ؟
    وإن كانت الاجابة بنعم فكيف يحدث ذلك ؟

    ردحذف


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