Multi Type Return Functions (record) در دارت 3

امروز میخوایم در مورد record ها که در دارت 3 معرفی شد صحبت کنیم و ببینیم که اصلا چی هستن ! رکوردها شبیه به list ها هستن و میشه آرایه ای از داده هارو داخلشون ذخیره کرد و در جاهای مختلف استفاده کرد, البته با این تفاوت که دیتا تایپ و تعداد متغییر ها باید مشخص بشه !چجوری ؟ جلوتر میبینیم !تعریفشون مثل پارامتر های وردی متدها هستش و تفاوتی با اونا نداره که هم به صورت named parameter و هم به صورت معمول که هممون استفاده میکنیم تعریف مشن. شاید زیاد کاربردی به نظر نیاد و نشه همه جا ازش استفاده کرد, به نظر من بیشتر واسه کم کردن تعداد خط کدا خوبه ولی خب یادگیریش خالی از لطف نیست و ممکن یه جایی به درد بخوره !حالا بریم یه مثال بزنیم که کامل جا بیفته ! اول سناریو تعریف میکنیم بعد کد میزنیم ....نکته : مثالی که میزنم خیلی ساده طرح شده و صرفا واسه درک مطلب هستش و از نظر مهندسی نرم افزار درست نیستتصور کنین ما قراره از کاربر دو تا عدد بگیریم و 3 تا عملیات مختلف رو با 3 تا متد مختلف رو اون اعداد انجام بدیم که عبارتند از تقسیم اعداد, زوج بودن حاصل تقسیم و کانکت کردن عدد با یک رشته, که مقادیر بازگشتی هر متد برای قسمت خاصی از برنامه درنظر گرفته شده !پس تا اینجا شد 3 تا متد که مقادیر بازگشتی bool , String و double دارن و به شکل زیر نوشته میشن !خب متد ها آمادس و میشه ازشون استفاده کرد . این حالت عادیه که هممون بلدیم ! حالا اگه بخوایم همین کارو با record ها انجام بدیم چی ؟! خیلی ساده یه متد مینویسیم و به جایه یه مقدار بازگشتی, مقادیری که انتظار داریم برگرده رو در اول متد با پارانتز مشخص میکنیم به شکل زیر :نکته : من اینجا از named pramatere استفاده کردم, شما میتونی فقط دیتا تایپ مشخص کنی .... خب اینجا ما 3 تا متد رو به یک متد تبدیل کردیم, به یک متدی که 3 تا نوع داده مختلف برگشت میده.حالا داخل بدنه متد هر 3 عملیاتی که بالا تعریف کرده بودیم رو میتونیم پیاده سازی کنیم که میشه مثل کد پایین : همونطور که میبینین من اول عملیات تقسیم رو تو یه متغییر لوکال ذخیره کردم و بعد از return پارانتز باز کردم و نام پرامتر بازگشتی رو صدا زدم تا مقدار داخلش ست کنم !حالا چطور میشه از این متد استفاده کرد ؟! از این متد به دو روش میشه استفاده کرد, یا باید یه record دقیقا به همین شکلی که متد تعریف کردیم, تعریف کنیم و یا مستقیما متد رو صدا بزنیم و با دات مقدار مورد نظر رو فراخوانی کنیم,که الان به هر دو روش اینکارو انجام میدیم !روش اول ساخت record : ساخت رکورد دقیقا مثل تعریف متغییر هستش, با این تفاوت که اینبار به جای یه دیتا تایپ چندتا دیتا تایپ رو داخل پارانتز مشخص میکنیم ! به شکل زیر :همونطور که میبینین تو خط کد 33 من یه record رو به صورت late تعریف کردم که همون دیتا تایپ های بازگشتی متد myInfo رو داره و بعد داخل initState متد رو صدا زدم و record رو مقدار دهی کردم نکته : حتما حواستون باشه که اگه از named parameter ها استفاده میکنید, نام پارامتر های record با نام پارامتر های متد یکی باشه و اگه از named parameter استفاده نمیکنید حواستون به ترتیب تعریف دیتا تایپ ها باشه ! حالا هرجا که لازم باشه میتونیم record رو صدا بزنیم و به مقادیر داخلش دسترسی داشته باشیم مثل record.message یا record.isEven ... این از روش اول .روش دوم : صدا زدن خود متد myInfo هستش که زیاد کار منطقی به نظرم نمیاد ولی خوب میشه از این روش هم استفاده کرد مثلا :myInfo(12, 13).isEven; //return bool myInfo(12, 14).divition; // return double و در آخر این روش تو برنامه های بزرگ ممکنه مفهوم سالید رو زیره سوال ببره و اپ از حالت استاندارد خارج بشه چون همونطور که میدونین هر متد و هر کلاسی باید یه کار مشخص انجام بده نه چند کار پس حواستون به این موضوع هم باشه .خیلی ممنونم بخاطر وقتی که گذاشتین و این مقاله رو مطالع کردین امیدوارم که مفید بوده باشه موفق باشید .