جایگاه this در actionscript

نوشته شده توسط

حسین معماریان

در ۱۷ دی ماه سال ۱۳۸۸

۳ دیدگاه

اگه تجربه کد نویسی با اکشن اسکریپت رو داشته و یا دیده باشید حتما به این کلمه “This” برخورد کرده اید! به راستی چه کاری انجام میدهد و با نوشتن و یا حذف این کلمه در اکشن اسکریپت چه اتفاقی  می افتد؟

سلام ، هر چند وقت یکبار می خواهم راجع به نکاتی در زبان اکشن اسکریپت بنویسم که در بهبود کدنویسی مان  بسیار کمک خواهد کرد و باعث میشه که دید بهتری داشته باشیم نسبت کامپایلر و کلا تمیز هم کد بنویسیم. قبلا هم یه نمونه از این دسته نوشته ها داشتیم  تحت عنوان آشنایی با نحوه کامپایل کدها در فلش درنوشتار امروز هم می خواهم راجع به کلمه کلیدی this بنویسم .
اگه تجربه کد نویسی با اکشن اسکریپت رو داشته و یا دیده باشید حتما به این کلمه “This” برخورد کرده اید! به راستی چه کاری انجام میدهد و با نوشتن و یا حذف این کلمه در اکشن اسکریپت چه اتفاقی  می افتد؟
به عنوان مثال نگاهی به کد زیر بیاندازید:


class sample
{
public var value:int = 1;
public function sample()
{
trace(this.value); // 1
trace(value); // 1
}
}

طبیعی است که در خروجی که هیچ تفاوتی نداشته باشند! اما برای  برای کامپایلر این دو خط خروجی ها تفاوت دارند.

اکشن اسکریپت معمولا این اجازه رو به ما میده برای دسترسی به شی مان که از نوع متغییر یا یا متد باشد از This استفاده نکنیم.

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

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

Class Main
{
 Private var value:int = 1;

 Public function test(parameter)
 {
 value += parameter;
 }
}

وقتی این کد اجرا شود اکشن اسکریپت  مواجه میشه با متغییرParameter ، اول در متغیرهای داخلی و بعد در پارامترها می گردد که در اینجا یه پارامتر به این نام داریم و مقدار این پارامتر رو در متغییر میریزد. متغییر بعدی value که اول متغیرهای داخلی و بعد پارامتر و بعد نمونه متغییر که در اینجا یافت می شود و مقدار یک برای این متغییر در نظر میگیرد. اگر ما از کلمه This استفاده میکردیم کامپایلر یا همان اکشن اسکریپت یک راست می رفت سراغ جایی که این متغییر تعریف شده است یعنی همان نمونه متغییرها.

حتی الامکان سعی میشه متغیرهای که تعریف می شوند همنام نباشند اما گاهی اوقات اجتناب ناپذیر هستند در این مواقع برای مدیریت متغییر ها که از کدامیک استفاده کنیم می توان از This کمک گرفت. به مثال زیر توجه کنید:

Class sample
{

 Public var value:int = 1;
 static public var value:int = 2;

 public function sample()
 {
 Var value:int = 3;

 Trace(value, value); //output:3 3

 Trace(value, this.value); //output:3 1

 Trace(value, this.value, sample.value);//output:3 1 2
 }
}

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

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

امیدوارم مفید واقع شده باشد.

۳ دیدگاه برای “"جایگاه this در actionscript"”

  1. aliamel

    در ۲۶ خرداد ماه سال ۱۳۹۰

    سلام و تشکر بابت پستی که گذاشتی
    یک سوال دارم
    گاهی اوقات This به فرم اصلی اشاره می کنه. منظور از فرم همون صفحه دیزاینی هست که کامپوننت ها رو میشه داخلش به طور دستی قرار داد و اون رو به کلاس مربوطه لینک کرد.
    کلمه This رو چطوری و کجا در کلاس استفاده کنیم تا به فرم اصلی مون اشاره کنه؟

  2. حسین معماریان

    در ۲۷ خرداد ماه سال ۱۳۹۰

    سلام ، فکر کنم منظور از فرم اصلی stage باشد ، اینطور نیست که با this به جای دیگری دسترسی داشته باشید! this به نمونه ساخته شده اشاره میکند مثلا اگر در داخل فلش کد نوشته باشید و کلاسی در کار نباشد this به root اشاره میکند ، اگر یک کلاس داشته باشید جدا از کلاس اصلی ، this به نمونه ساخته شده کلاس اشاره میکند. لذا بیشتر کاربرد this برای مقدار دهی دقیق متغییرهای همنام در داخل کلاس هست نه برای دسترسی به نمونه کلاسهای دیگر…
    موفق باشید

  3. aliamel

    در ۲۷ خرداد ماه سال ۱۳۹۰

    ممنون بابت توضیحی که دادی.اما امروز متوجه شدم که this در داخل کلاسی که به طور دستی ایجاد کردیم می تونه به فرم اصلی (stage) هم اشاره کنه.این یکی از کاربرد های مهم this هست که خیلی حائز اهمیت بود.

    تشکر

دیدگاهی برای ما بنویسید