در این بخش به توضیح اولویت های اجرای دستورات در حالت های مختلف می پردازیم 

هنگامی که در gml در حال کد نویسی هستید بهتر است بدانید که استفاده مستقیم از توابع برای پارامتر های یک تابع دیگر روش تضمین شده ای نیست به این معنی که اولویت اجرای دستورات از پلتفرمی به پلتفرم دیگر متفاوت است بنابراین باید کد هایی که نوشته می شوند صریح باشند این روش به بهینه سازی کد ها در پلتفرم های متفاوت کمک می کند به عنوان مثال پلتفرم ویندوز کد ها را از راست به چپ و پلتفرم html5 از چپ به راست ارزیابی و اجرا می کند بنابراین برای جلوگیری از بروز هر گونه مشکل باید از استفاده از توابع در پارامتر ها خودداری کنید 

برای روشن شدن بیشتر این موضوع مثال زیر را در نظر بگیرید که توابع مختلف به عنوان پارامتر یک اسکریپت مستقیما استفاده شده اند 

buffer_seek(buff, buffer_seek_start, 0);
 scr_buffer_get_info(buffer_read(buff, buffer_s8), buffer_read(buff, buffer_s16),buffer_read(buff, buffer_s16));

در کد بالا مشکل این است که در بعضی از پلتفرم ها اخرین تابع  bufer_read اول خوانده می شود بنابراین تمامی پارامتر های اسکریپت اشتباها مقدار دهی می شوند و از چیزی که انتظار داشتید نتیجه معکوس می دهد 

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

var val[0] = buffer_read(buff, buffer_s8);
 var val[1] = buffer_read(buff, buffer_s16);
 var val[2] = buffer_read(buff, buffer_s16);
 scr_buffer_get_info(val[0], val[1], val[2]);

با این که به نظر میرسد کمی کد ها بیشتر شدند اما این روش کد ها را تمیز نگه میدارد و از هر گونه مشکل در ارزیابی دستورات جلوگیری میکند 

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

به عنوان مثال کد زیر را در نظر بگیرید:

a = b == c || d;

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

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

a = (b == c || d); //better
 a = ((b == c) || d); //best


نسخه PDF این مطلب را دانلود کنید






نویسنده: hadi eb