|
לולאות
ב-actionscript
|
|
שיעור זה מסביר
כיצד להשתמש בלולאות for
/ for in , while
ו- do while
. |
|
|
|
לולאת
for
|
|
בלולאת for צריכים להופיע
שלושה סוגי ערכים חוץ מבלוק הפקודות שמתבצע בכל פעם שמתרחשת הלולאה , מבנה
הכתיבה של הלולאה היא בצורה הבאה : |
|
|
|
for (initialization;
condition ; activities ){ |
|
//what will the loop activate
|
|
//…….. |
|
} |
|
|
|
initialization –
אתחול משתנים . בחלק זה נכתבים המשתנים שמאותחלים רק בתחילת הלולאה , ולא בכל
פעם שמתבצע סיבוב . אם נשים את האיתחול בתוך הלולאה עצמה הערך של המשתנה יחזור
לערך האיתחול בכל סיבוב ואילו בצורה זו המשתנה מאותחל רק פעם אחת . |
|
|
|
condition –
כלל ביצוע הלולאה , כל עוד הערך של הכלל הוא true הלולאה מתבצעת
. דוגמאות לכללים : index>5
, index==20
, val1>=val2
וכדומה . |
|
|
|
Activities –
פעולה שמתבצעת בכל פעם שמתרחש סיבוב , חוץ מהפעם הראשונה . בעיקרון ניתן לכתוב
את הפעולה גם בתוך הלולאה ולא רק בשורת האיתחול שלה , אבל בצורה זו הכיתוב יותר
מסודר ונוח להבנה . לדוגמא : i++ , i--
וכדומה . |
|
|
|
משפט for לדוגמא : |
|
For(i = 0; i < 10; i++){ |
|
//whatever |
|
} |
|
הלולאה תתחיל כאשר i שווה ל-0 ,
הערך i
יוסיף לעצמו 1 בכל סיבוב (i++) , ויסתיים לאחר 10 סיבובים כאשר התנאי i < 10 יהיה שיקרי . |
|
דוגמא נוספת : |
|
For(i = 10, j = 10 ; i<10
; i++ , j--) |
|
בדוגמא זו מאותחלים
שני משתנים , ומתבצעות שתי פעולות . |
|
דוגמא נוספת : |
|
i = 0; |
|
for( ; ; i++){ |
|
//
if(i > 10) stop the loop |
|
} |
|
בדוגמא זו בתוך
שורת האתחול של הלולאה נמצאת רק
הפעולה שמתבצעת בכל סיבוב . כיצד עוצרים פעולת לולאה לא דרך שורת האתחול ? על
ידי פקודת break . |
|
שיפור הדוגמא
הקודמת : |
|
i = 0; |
|
for( ; ; i++){ |
|
if(i > 10) break ; |
|
} |
|
פקודת break מוציאה את התוכנית מהלולאה אל שורת
הפקודות שבאה אחריה . |
|
פקודה נוספת
שימושית ללולאות היא continue
. על ידי פקודה זו ניתן לדלג על שאר הפקודות בסיבוב זה ולעבור לסיבוב הבא . |
|
דוגמא : נניח
שאנחנו רוצים להדפיס את כל המספרים חוץ מהכפולות של 7 : |
|
For (i = 0; i < 100 ;
i++){ |
|
if
(i%7==0)continue; |
|
trace(i); |
|
} |
|
השורה לאחר האתחול
בדקה האם השארית של המספר לחלק ל-7 הוא 0 ובמקרה זה הוא מתחלק ללא שארית ב-7
ולכן לא נדפיס אותו אלא נעבור ישירות לסיבוב הבא . |
|
|
|
לולאת
for ... in |
|
|
|
לולאת for in מתרחשת כמספר האובייקטים/ משתנים עליהם
היא עובדת , הסינטקס של השימוש בלולאה זו היא כמו בדוגמא הבאה : יצרתי בשביל הדוגמא
אובייקט בשם myclass
והגדרתי לו משתנים ופונקציה : myclass= new Object(); myclass.a=10; myclass.b=10; myclass.showme=function(){}; כעת נריץ לולאת for ..in על האובייקט בשביל לגלות את כל שמות
המשתנים : for(i in myclass){ trace(i); } וה-output יהיה : showme b a ניתן גם להשתמש
בלולאה זו על מנת למצוא שימושים באובייקטים מוכרים , לדוגמא : z=new XML(); for(i in z){ trace(i); } וה-output הוא : previousSibling parentNode nodeValue nodeType nodeName nextSibling lastChild firstChild … כלומר כל הפונקציות
הפנימיות של xml
object . או באובייקטים
ויזואליים , לדוגמא (כאשר הסרט ריק) : for(i in _root){ trace(i); } ה-output יהיה : $version שזהו המשתנה היחיד
המוגדר לסרט (ולכל level
כמשתנה גלובלי אוטומטי) . דרך נוספת לשימוש
בלולאת for/in
היא דרך שימוש במערכים . גם אם אנחנו לא יודעים מהו אורך המערך אותו אנחנו רוצים
להציג / לבדוק / לחפש , ניתן לעשות זאת באמצעות לולאת for /in בצורה הבאה : myarray = new
Array(10,25,”gadi”); For (i in myarray){ trace(“index” + i +” – “+x[i]); } וה-output יהיה : gadi 25 10 כלומר כך ניתן לרוץ
על כל המערך בלי צורך להגדיר את מספר הפעמים שצריכה להתבצע הריצה . (אישית מצאתי
את הפקודה הזאת ישימה במיוחד בטעינת מסמך xml כאשר אין מושג
כמה nodes
התקבלו מכל סוג , ניתן פשוט לרוץ על הרשימה של כולם על ידי לולאת for/in ואין צורך בידע
מוקדם על המסמך לפני טעינתו ). |
|
לולאות
while |
|
לולאת while בנויה מתנאי ,
ומבלוק פקודות שמתבצע כל עוד התנאי מתקיים . while( condition ){ //do
the stuff here } לדוגמא , הסקריפט
הבא , מאתחל משתנה , מריץ לולאה שמתרחשת כל עוד המשתנה קטן מ-10 ובתוך הלולאה
מוסיף ערך 1 למשתנה . x=0; while(x<10){ trace(x); x++; } ניתן גם להשתמש
בצורת כתיבה כמו while(true)
ואז רק פקודת break
(כמו בלולאת for)
תוכל לעצור את הלולאה . x=0; while(true){ trace(x); x++; if(x>10)break; } לולאת
do / while
ההבדל היחיד בין
לולאת while
ל- do/while
הוא שהסוג השני יתבצע בכל מקרה פעם אחת לפני בדיקת התנאי , ורק אם התנאי מתקיים
יתבצע פעם נוספת וכו . דבר נוסף הוא ";"
בסוף המשפט : x = 0; do{ trace(x); x++; }while (x<10) ; גם אם נגדיר while(false) בסוף הלולאה ,
כלומר הסיבוב הבא לא יתבצע , לולאה אחת תתרחש ,בניגוד ללולאת for רגילה . לסיכום : כל פעולה שניתן לבצע בעזרת לולאת for ניתן לבצע גם
בעזרת לולאת while
בעזרת סדר פעולות שונה . לעומת זאת לולאת for/while שונה בכך שלא
צריכה את המספר המקסימלי שבו תפסיק הלולאה והופכת אובייקטים למערך . |
|
|