چند نکته ی مهم درباره تابع :
1) تابع با چندین مقدار برگشتی :
همونطور هم که تو قضیه ی دیتابیس تو کتاب اوستا حامد گفته شد (تو فیلم دیتابیس sql و ... گفته نشدبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) ، یه تابع میتونه یا میتونیم کاری کنیم که بجا یه مقدار ، چندین مقدار رو برگردونه که در این صورت باید به تعداد مقدار بازگشتی اون تابع (مثلا فرض میکنیم 3 تا مقدار بازگشتی داره) ، باید به همون تعداد ، متغییر براش تعریف کرد و همه ی متغییرهاشو با ویرگول از هم جدا کرد . مثلا تو مثال زیر :
تابع بالا که اسمش func هست ، 3 مقدار Val1 و Val2 و Val3 رو برمیگردونه . که موقع فراخونیش هر کدوم به ترتیب ، دقیق تو متغییرهاش (که موقه فراخونی استفاده کردیم) ذخیره میشن ینی مقدار بازگشتی Val1 (که تو مثال بالا که مقدارش 300 هست) تو متغییر Plus و مقدار Val2 (که تو اینجا 20000 هه) تو multiplication و مقدار Val3 (که تو اینجا 100 هه) تو متغییر Minus ذخیره میشهکد:function func(a,b) Val1 = a+b Val2=a*b Val3 = a-b return Val1,Val2,Val3 end Plus,multiplication,Minus = func(200,100) Dialog.Message("Notice", "a+b = "..Plus.."\na*b = "..multiplication.."\na-b = "..Minus, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
ینی اولین مقدار بازگشتی تو اولین متغییر تعریف شده و دومین مقدار بازگشتی تابع ، تو دومین متغییر تعریف شده و ... به همین ترتیب ذخیره میشه
2) اجرای تابع (تابعی که در نرم افزار از پیش تعریف شده باشه) داخلی :
همیشه اگه دو تابع داخلی تو در تو باشه ، اول تابع داخلش اجرا میشه و در مرحله ی بعد ، مقدار بازگشتی تابع فراخونی شده برگردونده میشه مثلا :
تو مثال بالا ، اول پیام Your message here داده میشه و بعد مقدار بازگشتی تابع Dialog.Message که عدد هست رو تو پیام دوم میدهکد:Dialog.Message("Notice", Dialog.Message("Notice", "Your message here.", MB_YESNO, MB_ICONINFORMATION, MB_DEFBUTTON1), MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
3) اجرای چند تابعی که خودمون میسازیم :
دقیق عملیاتش برعکس بالایی هست . ینی اونجا تابع آماده ی داخل پروژه بود اما اینجا تابعی که خودمون میسازیم (چند تا تابع تو هم) . تو اینجا بر عکس حالت بالا ، هیچ وقت تابع داخلی حتی اجرا هم نمیشه جز اینکه تو تابع بیرونی تر هه (تابع خارجی تر یا اولیه) اون تابع داخلی اش فراخونی بشه یا برگردونده بشه
مثال :
تو مثال بالا اگه تابع داخلی تره (Sec) تو تابع خارجی تره (Init) فراخونی نمیشد یا برگردونده نمیشد ، تابع Sec هیچ وقت اجرا نمیشد . یه نکته ی دیگه هم اینه که تو این حالت نمیتونیم مستقیما تابع داخلی رو فراخونی کنیم چون ارور میده و تابع داخلی یه تابع رو بصورت مستقیم تشخیص نمیده ینی نمیتونیم این جوری بنویسیم :کد:function Init(a,b,c) function Sec(a,b) ABC = a+b+5 return ABC end return Sec(a,b) end Nm = Init(10,20,30) Dialog.Message("Notice", Nm, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
4) تابع با ورودی و آرگومان متفاوت :کد:function Init(a,b,c) function Sec(a,b) ABC = a+b+5 return ABC end return Sec(a,b) end Nm = Sec(10,20) Dialog.Message("Notice", Nm, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
همونطور که اوستا محمد (سید اهل انجمن خودمون برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ) تو لینک زیر گفت :
http://persiancoders.com/1393/04/%D8...4%D8%AE%D8%B5/
برای مشخص کردن تابع بدون مشخص کردن ورودی یا آرگومان باشه ، از سه نقطه ... استفاده میشه . بدش هم حتما ورودی ها رو به روش زیر یا همون روشی که تو لینک بالا گفته شد ورودی ها رو تو آرایه ریخت و با بدست آوردن تعداد آرایه (تعداد تو لوا رو با علامت # نشون میدن مثلا تو مثال زیر تو خطی که نوشت #arg ینی تعداد آرایع ی arg) به الگوریتم اون تابع میپردازیم :
برا فراخونیش تو دکمه :کد:function average(...) result = 0 local arg={...} for i,v in pairs(arg) do result = result + v end return result/#arg end
حالا گلپسران اساتید ، هر جا احساس کردین نیاز به توضیح داره برا این قسمت ، حتما بگین . ممنون برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنیدکد:Debug.Print(average(1,4,3,5,4).."\r\n"); --result = 3.5 Debug.Print(average(1,4,5,4,4,3,7,8,9,4,2,9).."\r\n"); --result = 5 Debug.Print(average(2,9)); --result = 5.5 Debug.ShowWindow(true);






پاسخ با نقل قول
Bookmarks