خانه » برنامه نویسی » اکشن اسکریپت » توابع در اکشن اسکریپت ۳

توابع در اکشن اسکریپت ۳

یکی از مواردی که در برنامه نویسی اکشن اسکریپت جایگاه مهمی دارد ، توابع می باشند. به طوری که نسخه جدید فلش بر پایه توابع نوشته شده است. مثالا شما بعد از تعیین رویدادی برای دکمه ای می بایست این رویداد را به تابعی ارسال نمایید تا دسترسی های رویداد را توسط آن کنترل نمایید ( در زمان وقوع رویداد)
به همین دلیل سعی می کنیم با توابع و قواعد آن به صورتی سطحی آشنایی پیدا کنیم :

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

۱. تابع چیست ؟
۲. مثالی در مورد کاربرد تابع.
۳. توضیحات ساده در مورد تابع.
۴. توضیحات پیشرفته در مورد تابع.

تابع چیست ؟
اصولا توابع یک بلاک (بخش) از کد هستند که به عنوان تابع ایجاد می شوند و ما می توانید با تعریف تنها یک باره آنها ، آنها را در موارد متعدد مورد استفاده قرار دهیم و هم در حجم و هم در سرعت فراخوانی و هم در تمیزی و قابل فهم تر بودن کدی که می نویسم بسیار تاثیر گزار می باشد.
یکی دیگر از فواید توابع این می باشد که شما در هر زمان می تواند کد مربوط به تابع خود را به روز رسانی نمایید و دیگر نیازی نیست که کدها را در تمامی بخش های استفاده شده تغییر دهید.
در ادامه با مثال بیشتر با توابع آشنا خواهید شد.

مثالی در مورد کاربرد تابع:

به کد زیر دقت نمایید ، توسط این کد ما شی Star را از درون کتابخانه فلش با مختصات x و y ی که تعریف می کنیم به استیج پروژه اضافه می کنیم

var myStar:Star;

myStar = new Star();
myStar.x = 100;
myStar.y = 150;
addChild(myStar);

توجه : کلاسStar یک MovieClip می باشد که ما آن را با Star در Library نام گزاری کرده ایم و یک کلاس ثابت از مجموعه کلاس های نرم افزار فلش نمی باشد.

خوب حال به فرض ما نیاز داریم این شی را و یا شی دیگری را در جایی دیگر از صفحه و یا در همان مختصات دوباره اضافه کنیم ، برای این کار می بایست کد را دوبار تکرار کنیم!!!

var myStar:Star;

myStar = new Star();
myStar.x = 100;
myStar.y = 150;
addChild(myStar);

myStar = new Square();
myStar.x = 100;
myStar.y = 150;
addChild(myStar);

این کار در عمل مشکلی ندارد ولی باعث می شود کد پروژه شما بسیار حجیم و زیاد بشود در زمان ویرایش و … دچار مشکلات و سختی فراوان بشوید خوب حال همین کد را با کمک توابه می توانیم به صورت زیر استفاده کنیم :

function makeStar():void {
	myStar = new Star();
	myStar.x = 100;
	myStar.y = 150;
	addChild(myStar);
}

makeStar();
makeStar();

هر چند بار که بخواهیم می توانیم makeStar را فراخوانی کرده و با هر بار فراخوانی تمامی کدهای درون تابع را اجرا کنیم.

توضیحات ساده در مورد تابع:

ساختار کلی تابع به صورت زیر می باشد :

function functionName(argument):returnType{
	statements;
}

توضیحات ساختاری :

functionName : نام تابع می باشد که که توسط آن شما می توانید تابع را فراخوانی نمایید.
argument : یا آرگومان های تابع ورودی های تابع می باشند که با کاما از هم جدا می شوند (در ادامه با مثال توضیح بیشتر داده می شود)

returnType : نوع بازگشت تابع می باشد، در واقع برای تعیین نوع مقداری که قرار است درون تابع return شود در صورتی که تابع شما return ی نداشته باشد این مقدار بر روی void قرار می دهیم و این به این معنی می باشد که تابع مقداری را بر نمی گرداند، البته تعریف این مقدار الزامی نیست و در صورتی که نوع خروجی را ندانید می توانید با ستاره(*) به هر نوعی از اطلاعات اشاره نمایید.

statements : شامل کدی می شود که می بایست با هر بار فراخوانی تابع اجرا شود.

حال تابعی ایجاد می کنیم که یک MovieClip ایجاد نماید و آن را در مختصات x و y مقدار دهی نماید
توجه داشته باشید که کد مربوط به تابع می بایست بین دو براکت {} مربوط به تابع قرار گیرد و نکته دیگر این است که متغیری که درون تابعی تعریف شود از بیرون تابع یعنی بیرون محدوده {} تابع قابل فراخوانی نیست. (در ادامه توضحاتی در این مورد داده شده)

به مثال دقت بفرمایید :

function magicalFunction(){
	var myMovie:MovieClip = new MovieClip();
	myMovie.x=100;
	myMovie.y=150;
}

در بالا تابعی با نام magicalFunction ایجاد کردیم.
و حال برای فراخوانی تابع باید به این نکته توجه داشته باشیم که برای فراخوانی تابع صورت مجزا و نه درون رویدادها می بایست از دوپرانتز در آخر نام تابع استفاده کنیم ، این () در واقع محل آرگومان های تابع می باشد و در صورتی که تابع آرگمانی نداشته باشد به صورت زیر استفاده می شود.

فراخوانی ساده :

magicalFunction();

فراخوانی در رویداد :

addEventListener(MouseEvent.CLICK ,magicalFunction );

باید توجه داشته باشید تا زمانی که تابع فراخوانی نشود(با کدهای بالا) کد تابع اجرا نخواهد شد.

توضیحات پیشرفته در مورد تابع:

همان گونه که در مرحله قبل ذکر کردیم ساختار تابع به شکل زیر می باشد :

function functionName(argument):returnType{
	statements;
}

حال می خواهیم به arguments و با همان آرگمان های تابع بپرداریم ، توجه داشته باشد که بهتر است نوع هر آرگمان را مشخص کنید که مثلا عددی است و یا رشته متنی و…
نکته دیگر این است که آرگمان ها با کاما (,) از هم جدا می شوند و به تعداد نامحدود شما می توانید آرگمان داشته باشید
شما آرگمان خود را با نامی در () بعد از نام تابع تعریف می کنید و با همین نام می توانید از آن در تابع خود استفاده کنید ، در زمان فراخوانی تابع این آرگمان ها مقدار دهی می شود و مقدارها درون کد تابع مورد استفاده قرار می گیرد.

کدی که در قبل استفاده کردیم امکان مقدار دهی به x و y را در زمان فراخوانی را ندارد!!

 var myStar:Star;

function makeStar():void {
	myStar = new Star();
	myStar.x = 100;
	myStar.y = 150;
	addChild(myStar);
}

makeStar();
makeStar();

حال کد را طبق تعاریفی که در بالا داشتیم به صورت زیر تغییر می دهیم :

var myStar:Star;

function makeStar(myX:Number, myY:Number):void {
	myStar = new Star();
	myStar.x = myX;
	myStar.y = myY;
	addChild(myStar);
}

makeStar(100,200);
makeStar(150,320);

همان طور که در کد مشاهده می کنید دو آرگمان myX:Number, myY:Number را تعریف کردیم و همین متغیرها را در کد به جای مقدارهای عددی قرار دادیم.

حال در زمان فراخوانی به راحتی می توانیم مختصات را نیز تعریف نماییم. در کد بالا ستاره اول در مختصات ۱۰۰,۲۰۰ و ستاره دوم در مختصات ۱۵۰,۳۲۰ ایجاد می شود.

برای درک بیشتر return تابعی تعریف می کنیم که دو قدار را جمع کند و یک مقدار به عنوان خروجی بدهد:

function calculate(){
	var num1:Number = 50;
	var num2:Number = 100;
	var myResult:Number;

	myResult = num1+num2;
	return myResult;
}

و حال توسط کد زیر از آن استفاده می کنیم :

var myMC:MovieClip = new MovieClip();
myMC.x = calculate();

با این کار مختصات x مریوط به myMC به مقدار ۱۵۰ که جمع دو عددی که در تابع بود ، می باشد مقدار دهی می شود زیرا تابع calculate مقداری را که با return بر می گرداند مثل این است که ما myMC.x را برابر ۱۵۰ قرار داده باشیم.

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

function calculate():Number{
	var num1:Number = 50;
	var num2:Number = 100;
	var myResult:Number;

	myResult = num1+num2;
	return myResult;
}

var myMC:MovieClip = new MovieClip();
myMC.x = calculate();

همان طور که برای تابع makeStar نوع داده بازگشتی را بر روی void به این معنی که بازگشتی ندارد قرار دادیم

به صورت کلی تابعی که بازگشتی نداشته باشد و return در آن استفاده نشده باشد را با void تعیین می کنیم و در صورتی که نوع بازگشت نوعی ثابت و خاصی نباشد آن را با * تعیین می کنیم

نکته دیگر در مورد توابع دسترسی به متغییر های داخل توابع می باشد که به صورت عادی امکان پذیر نمی باشد

به طور مثال کد زیر با خطا رو به رو خواهد شد :

function calculate ():Number {

	var num1:Number = 50;
	var num2:Number = 100;
	var myResult:Number;
	myResult = num1+num2;

}

trace(myResult);

زیرا myResult قابل دسترسی از خارج تابع نمی باشد

برای حل این مشکل از روش زیر استفاده می کنیم و کد را به صورت زیر می نویسیم :

var myResult:Number;

function calculate ():Number {

	var num1:Number = 50;
	var num2:Number = 100;
	myResult = num1+num2;

}

trace(myResult);

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

آرگمان نامحدود برای تابع (استفاده از امکان (…) در تابع):

این موضوع یک بحث جدید در مورد توابع می باشد که با یک مثال آن را توضیح می دهیم ، گاهی اوقات ما نیاز داریم تابع ما به تعداد نامحدودی آرگمان ورودی بپزید و تعداد ورودی را دقیق نمی دانیم تا برا آن مقداری را تعریف کنیم ، یک را این است که مقدارها را به صورت آرایه به تابع بدهیم و راه جدید در واقع ساده شده همان راه دادن داده ها به صورت تابع می باشد (با کمک تکنیک سه نقطه (…) )

به کد مربوطه دقت نمایید :

function Sum (...arg:Array):Number {
	var sumNum:Number=0;
	for(var i:Number = 0; i<arg.length; ++i) {
		sumNum +=arg[i];
	}
	return sumNum;
}

trace(Sum (2,2,3));

در بالا ابتدا تابعی با نام Sum ایجاد می کنیم و برای آرگمان های آن قبل از نام آرگمان … اضافه می کنیم و بدون فاصله نام آرگمان خود را که در اینجا arg می باشد نام می نویسم و نوع آن را هم با : بر روی آرایه Array تنظیم می کنیم
در این مثال خروجی ما از نوع عددی می باشد ( در واقع این تابع تمامی آرگمانهایی که به عنوان ورودی به آن داده شود را با هم جمع می کند )
حال ما در تابع آرایه ای با مقدار تمامی آرگمان های ورودی تابع مربوطه داریم که با یک for و پیمایش تابع مقدارها را توسط += به sumNum می دهیم و مقدار آن را با تمامی عناصر آرایه ورودی ها اضافه می کنیم و در آخر توسط return مقدار sumNum را به عنوان خروجی تعیین می کنیم

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

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

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

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

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

ارسال جواب

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

*

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