خانه » مالتی مدیا » ادوبی فلش » حلقه های تکرار در اکشن اسکریپت ۳

حلقه های تکرار در اکشن اسکریپت ۳

اصولا حلقه های تکرار همان طور که از نامشان معلوم می باشد ، کار و یا کارهای خاصی رو به تعدادی دفعاتی که با شرطی مشخص می شود انجام می دهند و کاربرد بسیار زیادی در برنامه نویسی دارند.

  1. حلقه تکرار for
  2. حلقه تکرار while

در این مطلب به موارد زیر می پردازیم :

  1. یک مثال ساده از حلقه
  2. حلقه For
  3. حلقه While
  4. حلقه Do While
  5. حلقه For Each In
  6. حلقه For In

1- یک مثال ساده از حلقه

تصور کنید نیاز دارید یک movie Clip را ده بار بر روی پروژه خود اضافه کنید به صورت معمول از این روش استفاده می کنید

addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());
addChild(new MovieClip());

خوب توسط حلقه ها (در اینجا حلقه For) خواهید توانست با کد زیر همین کار را به راحتی و با کد کمتر انجام دهید

for (var i:Number=1; i < 10; i++)
{
    addChild(new MovieClip());
}

addChild : توسط addChild یک شی بر روی صفحه در استیج افزوده می شود ، این گزینه برای افزودن اشاء بر روی صفحه با اکشن اسکریپت الزامی می باشد، در این مورد در بخش Display List ها توضیح بیشتری داده خواهد شد.

۲ – حلقه For

فرمت و قالب کلی حلقه for به صورت زیر می باشد

var i:Number;
for (i=0; condition, action)
{
	statements;
}

counter : شمارنده که در اول تعریف و مقدار دهی می شود

for (var i:Number=0; condition, action){
statements;
}

شما می توانید نوع شمارنده را جداگانه نیز مشخص نمایید :

var i:Number;
for (i=0; condition, action)
{
statements;
}

condition : شرطی که حلقه در زمان درست بود آن به کار خود ادامه می دهد.
action : فرمانی که توسط آن به طور مثال شمارنده را کاهش و یا افزایش می دهیم.
statements : کد مورد نظر شما که قصد دارید با هر چرخش حلقه اجرا شود.

به عنوان مثال در کد زیر ابتدا my_mc را تعریف می کنید و سپس نام آن را mc به اضافه i که همان شمارنده است قرار می دهیم و سپس آن را توسط addChild به استیج پروژه می افزاییم.

for (var i:Number=0; i<10 ; i++)
{
var my_mc = new MovieClip();
my_mc.name = "mc"+i;
addChild(my_mc);
}

نکته قابل توجه این است که شما نمی توانید از متغیر هایی مه درون حلقه ساخته ای بیرون از آن استفاده کنید ، در هر چرخش حلقه متغیرها با مقدارهای جدید مقدار دهی می شوند و شما نتها نتیجه پایانی را مشاهده می کنید.

۳ – حلقه While

فرمت و قالب کلی حلقه Whileبه صورت زیر می باشد

while (condition)
{
statements;
}

condition : شرطی که حلقه در زملن درست بود آن به کار خود ادامه می دهد.

statements : کد مورد نظر شما که قصد دارید با هر چرخش حلقه اجرا شود.

برای استفاده از این نوع حلقه می بایست شمارهنده خود را به صورت مجزا بسازید و عمل افزایش را در پایان هر مرحله انجام دهید ، به مثال زیز توجه نمایید:

var i:Number = 0;
while (i < 10)
{
new MovieClip();
i++;
}

ابتدا متغیر i از نوع عددی ایجاد می شود و بعد حلقه while با شرط کوچکتر بودن i از ۱۰ و بعد در پایان هر حلقه مقدار i توسط i++ یه واحد افزایش می یابد و این حلقه ۱۰ بار تکرار خواهد شد.

توصیه : اصولا اکثر کار های مورد نیاز حلقه را سعی نمایید با حلقه for انجام دهید ، زیرا انعتاف و سرعت بیشتری دارد

۴ – حلقه Do While

نکته ای که در مورد این حلقه می بایست بگویم این است که این حلقه بدون توجه به شرط حلقه یک بار تمامی دستورات statements را اجرا خواهد کرد و سپس برای شرچخ دوم شرط را چک می کند در صورت درست بودن به چرخش ادامه می دهد.

فرمت و قالب کلی حلقه Whileبه صورت زیر می باشد

do
{
statements;
}
while (condition);

condition : شرطی که حلقه در زملن درست بود آن به کار خود ادامه می دهد.
statements : کد مورد نظر شما که قصد دارید با هر چرخش حلقه اجرا شود.

برای درک بیشتر به مثال زیر توجه نمایید:

var i:Number = 0;
do
{
new MovieClip();
i++;
}
while (i < 10);

ابتدا شمارنده را تعریف می کنیم و سپس حلقه do while در پایان بخش statements توسط i++ افزاینده را یک واحد افزایش می دهیم.


۵ – حلقه For Each In

ساختار کلی حلقه for each in به صورت زیر می باشد :

for each (var prop in obj)
{
trace(prop);
}

obj همان شی مورد نظر که می خواهیم درون آن پیمایش نماییم، می باشد و prop مقداری است که توسط آن به محتوای شی دسترسی پیدا می کنیم، برای مثال ابتدا یک آبجکت (Object) ایجاد می کنیم :

var myObject:Object = new Object();
myObject.myName = "IFLashLord";
myObject.myAge = 5;

خوب اول myObject رو ایجاد کردیم بعد myAge ,myName را در Object ایجاد و مقدار دهی کردیم.وحالا حلقه :

for each (var prop in myObject)
{
trace(prop);
}

با تست این کد خروجی با مقدارهای IFLashLord و ۵ را در output فلش مشاهده خواهید نمود در واقع این نوع حلقه می تواند به شما در پیمایش object هایی که از properties های آن خبری ندارید و اصلا آنها را نمی دانید ،کمک نماید در مثال بدون اشاره به نام myName و myAge به این دو مقدار دسترسی پیدا کردیم.

۶ – حلقه For In

ساختار کلی حلقه for in به صورت زیر می باشد :

for (var prop in obj)
{
trace(prop);
}

obj = شی مورد نظر که می خواهیم درون آن پیمایش نماییم prop = مقداری که توسط آن به محتوای شی دسترسی پیدا می کنیمبرای مثال ابتدا یک آبجکت (Object) ایجاد می کنیم :

var myObject:Object = new Object();
myObject.myName = "IFLashLord";
myObject.myAge = 5;

و حالا حلقه :

for  (var prop in myObject)
{
trace(prop);
}

با تست این کد خروجی با مقدارهای myName و myAge را در output فلش مشاهده خواهید نموداین دو حلقه آخر از حلقه های پیشرفته در اکشن اسکریپت می باشد که در پروژهای حرفه مورد نیاز قرار می گیرند ، در این مثال ها به صورت ابتدای و مثال ساده توضیح داده شده اند.در پایان این مبحث به مواردی درمورد حلقه های می پردازیم : گاهی اوقات شما می خواهید به مقدار شمارنده حلقه for دسترسی پیدا کنید و این کار عملا به صورت عادی قابل انجام نیست خوب حال برای این مشکل به مثال زیر توجه کنید : شاید در ابتدا این کد به نظر شما برسد :

for (var i:Number = 0; i<10; i++)
{
var k:Number = i;
}
trace(k);

خوب با اجرای این کد با خطا رو به رو خواهید شدراه حل :

var k:Number;
for (var i:Number = 0; i<10; i++)
{
     k= i;
}
trace(k);

همون طوری که در مثال مشاهده می کنید ابتدا متغیر k را می سازیم و فقط نوع آن را مشخص می کنیم در این مرحله می توانید مقدار خالی و یا صفر هم به متغیر بدهیمدر درون حلقه k را برابر با شمارنده i قرار می دهیمحالا بدون هیچ مشکلی به تعداد نهایی شمارنده که ۱۰ می باشد دسترسی پیدا میکنیمشاید بپرسید که این چه لزومی دارد ، این موضوع زمانی کاربرد دارد که شما توسط کدی درون حلقه بسته به شرایطی خاص عملکرد حلقه را پایان می دهید با این روش می توانید محل ایست شدن را به صورت یه متغیر داشته باشید.البته برای دسترسی به دیگر مقدارها هم مفید می باشد ، میتوانید آرایه ای ایجاد کنید و همه مقدارها را درون آن جمع اوری نمایید و صدها کار دیگر….

موفق و پیروز باشید

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

8 نظر

  1. سلام
    خوشحالم که دوباره برگشتی پادشاه ….
    خیلی جالبه با فلش چه کارهایی که نمی شه کرد ؟ بی خود نیست که هر کی واردش می شه عاشقش می شه !
    ممنون از اینکه دوستانت رو فراموش نمی کنی و مطالب جدید می زاری
    من به دوستی شما افتخار می کنم

  2. سلام و عرض خسته نباشید. من یه کدی نوشتم که بازدن دکمه ای تکست فیلد درست میکنه که کاربر اطلاعاتی درون آن بنویسید. مشکل این است که وقتی اسمش را صدا میکنم ارور دریافت میکنم. چون میخواهم اطلاعاتش را درون متغییر هایی دخیره شود. و امکان عوض کردن آنها باشد.

    مثلا
    removeChild(mytext2)
    که با ارور مواجه میشم. قسمتی از کدم.

    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;
    
    var inputFormat:TextFormat= new TextFormat();
    inputFormat.font = "Arial";
    inputFormat.size = 12;
    var b:Number = 0;
    //my button's name is Add
    Add.addEventListener(MouseEvent.CLICK,added);
    function added(e:MouseEvent)
    {
    
    	var myInput:TextField = new TextField();
    	myInput.type = TextFieldType.INPUT;
    	myInput.defaultTextFormat = inputFormat;
    	myInput.x = 10;
    	myInput.y = b * 20;
    	myInput.height = 18;
    	myInput.width = 200;
    	myInput.border = true;
    	myInput.name = "myInput" + b;
    	b++;
    	addChild(myInput);
    }
    
    • سلام

      با توجه به این که برای اشیاء نام تعریف کرده اید می بایست مثلا این کد را به صورت زیر بنویسید

      import flash.text.TextField;
      
      //دریافت یک شی و دسترسی به آن
      var mytext2:TextField= getChildByName("mytext2")  as TextField;
      
      //برای حذف از همان روش بالا شی را دریافت می کنیم و دستور
      removeChild(mytext2);
      

      در ضمن برای دسترسی به اشیاء در زمان اضافه کردن می توانید مقادیر آن را در یک متغیر که قبلا تعریف کردید وارد کنید تا قابل دسترسی باشد
      ولی روش بر اساس نام که در بالا ذکر شده ساده تر می باشد

      موفق و پیروز باشید

      • با عرض معذرت
        با نوشتن کد شما در زمان اجرا ارور دریافت میکنم.
        البته به جای اسم نوشته شما اسم نوشته کد خودمو وارد میکنم.
        ۱۱۱۸:Implicit coercion of a value with static type flash.display:DisplayObject to a possibly unrelated type flash.text:TextField.

        • سلام

          درسته بخش as TextFieldرا فراموش کرده بودم

          دلیل این خطا این هست که getChildByName شی را به صورت یک DispalyObject می گیرد و ما متغییر را از نوع TextField قرار دادیم به همین دلیل می بایست as TextField را حتما اضافه کنیم
          اگر نوع آن را مشخص نمی کردیم لازم نبود حتما این مورد وارد شود ولی اصولی تر آن همین هست که کد آن قرار داده ام

          import flash.text.TextField;
          
          //دریافت یک شی و دسترسی به آن
          var mytext2:TextField= getChildByName("mytext2")  as TextField;
          
          //برای حذف از همان روش بالا شی را دریافت می کنیم و دستور
          removeChild(mytext2);
          

          این را تست کنید

          موفق و پیروز باشید

  3. خسته نباشید.
    بسیار سپاس
    ممنونم از پاسخ سریعتان
    حل شد…..

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه