آموزش برنامه نویسی فلاتر Flutter
2.03K subscribers
580 photos
68 videos
22 files
281 links
اولین مرجع فارسی آموزش برنامه نویسی فلاتر Flutter

🌐 https://flutter-learn.ir

سوالات برنامه نویسی خودتون در بخش پرسش و پاسخ سایت بپرسید:
🌐 https://flutter-learn.ir/question/


👨‍💻 Admin: @atyscode
Download Telegram
نحوه استفاده از Enum در برنامه نویسی فلاتر و دارت

▪️انواع شمارشی (که به آنها enum یا enumeration نیز گفته می‌شود) نوعی خاص از کلاس در زبان برنامه نویسی دارت هستند که برای نمایش تعداد ثابتی از مقادیر ثابت استفاده می‌شوند. البته در اکثر زبان ها نیز وجود دارند.

به عبارت دیگر، با استفاده از enum می‌توانید دسته‌ای از مقادیر مرتبط را که نمی‌توانند تغییر کنند، تعریف کنید.

🌐 کاربرد و نحوه استفاده از Enum در برنامه نویسی فلاتر و زبان دارت


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
▫️در قالب چندتا پست نحوه اجرا شدن برنامه های دارت و فلاتر میخوایم بررسی کنیم تا با کارکرد #کامپایلر دارت بیشتر آشنا بشیم.

این از پست ها قسمت اول هست

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
محیط اجرایی دارت VM, امکان اجرای مستقیم کدهای دارت از روی فایل منبع خام را ندارد و در عوض انتظار داره که یک فایل باینری dill که شامل ساختار درختی سریال سازی شده Dart AST کرنل هست را بهش بدیم.
وظیفه تبدیل کد منبع دارت به ساختار درختی کرنل برعهده قسمت مشترک پیش پردازنده ( CFE) است که به زبان دارت نوشته شده

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
برای حفظ راحتی انجام این تبدیل ها برنامه اجرایی دارت از یک Isolate جدا به نام Kernel service استفاده میکند و نتیجه آن تبدیل به کد باینری میشود سپس محیط اجرایی فایل باینری کرنل تولید شده را اجرا میکند


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
اما در فلاتر قضیه کمی متفاوت هست و کامپایل شدن برنامه و اجرا شدن روی دوتا ماشین مختلف انجام میشود.
کامپایل روی دستگاه توسعه دهنده یا میزبان و اجرا روی دستگاه هدف انجام میشود که باینری کرنل را از فلاتر دریافت میکند.

اما در این قسمت فلاتر خود کد دارت را تجزیه نمیکند بلکه از یک فرایند به نام frontend_server که یک پوشش روی CFE هست برای تبدیل های خاص فلاتر از کرنل به کرنل استفاده میکند.
فرآیند frontend_server زمانی اهمیت پیدا میکند که درخواست Hot Reload را به کار میبریم.
در این حالت frontend_server میتواند از وضعیت CFE در کامپایل قبلی استفاده مجدد بکند و فقط کتابخانه هایی را که واقعا تغییر کرده اند دوباره کامپایل کند.



⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
آموزش برنامه نویسی فلاتر Flutter
دسترسی به محیط توسعه IDX برای همه فراهم شد برای استفاده دارد وبسایت زیر بشید 🌐 Idx.google.com
قرار هست به زودی اندروید استودیو هم روی محیط IDX اجرا بشه و نیازی به استفاده از کد ادیتور قبلی ندارید.
برای اینکه وارد لیست انتظار بشید فرم زیر و پر کنید:

🌐 ثبت نام


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
اعلام وضعیت

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
▫️ اگر دوست دارید تقریبا هر تکنولوژی های مختلفی و با زبان های برنامه نویسی متفاوت پیاده سازی کنید این مخزن گیتهاب گنجینه مفیدی برای شماست.
برای مثال چجوری یک دیتابیس یا حتی سیستم عامل از صفر طراحی کنید.

🌐 https://github.com/codecrafters-io/build-your-own-x

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
▪️ در ابتدا، به جای اینکه بدنه توابع یا کلاس ها به طور کامل کامپایل و اجرا شوند، یک جایگذار (placeholder) دارند که به متد LazyCompileStub اشاره می‌کند.

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

این تابع به سادگی از سیستم در زمان اجرا می‌خواهد که کد اجرایی برای تابع فعلی تولید کند و سپس به این کد تازه تولید شده منتقل می‌شود.

وقتی تابع برای اولین بار کامپایل می‌شود، کامپایلر غیر بهینه‌ این کار را انجام می‌دهد. کامپایلر غیر بهینه‌ساز کد ماشین را در دو مرحله تولید می‌کند


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
آموزش برنامه نویسی فلاتر Flutter
⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
مرحله 1)
AST سریالیزه شده بدنه تابع برای تولید گراف جریان کنترل (CFG) برای بدنه تابع پیمایش می‌شود. CFG شامل بلوک‌های پایه پر شده با دستورالعمل‌های زبان میانی (IL) است.
دستورالعمل‌های IL استفاده شده در این مرحله شبیه دستورالعمل‌های یک ماشین مجازی مبتنی بر پشته هستند: آن‌ها عملوندها را از پشته می‌گیرند، عملیات را انجام می‌دهند و سپس نتایج را به همان پشته اضافه میکنند

مرحله 2)
در ادامه نتیجه CFG تبدیل به چند دستورالعمل IL میشود تا آنها نیز به دستور العمل های کد ماشین تبدیل شوند, نوع تبدیل ها یک به چند است
در این مرحله هیچ بهینه‌سازی انجام نمی‌شود.
هدف اصلی کامپایلر غیر بهینه‌ساز تولید سریع کد اجرایی است.

اما برای انجام کامپایل بهینه چه کاری انجام میشود؟


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
آموزش برنامه نویسی فلاتر Flutter
⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
🔰 کامپایلر بهینه‌ساز به ترجمه IL غیر بهینه‌سازی به IL بهینه شده مبتنی بر تخصیص ایستای منفرد (SSA) ادامه می‌دهد و با انجام یک سری توالی های پیش بینی سعی میکند دستور العمل بعدی را تخمین بزند و این کار در ترکیب با بهینه سازی های کلاسیک استفاده میکند.

در نهایت، IL بهینه شده با استفاده از تخصیص ثبات , اسکن خطی و کاهش ساده یک به چند دستورالعمل IL به کد ماشین کاهش می‌یابد

پس از تکمیل کامپایل، کامپایلر پس‌زمینه از رشته متغیر mutator thread می‌خواهد وارد یک نقطه امن شود و کد بهینه شده را به تابع ضمیمه کند.
بار بعدی که این تابع فراخوانی می‌شود، از کد بهینه شده استفاده خواهد کرد.

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



⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
🔸 هر زمان که نسخه بهینه شده پیش بینی اشتباهی انجام دهد به موردی برخورد می‌کند که نمی‌تواند آن را مدیریت کند، به سادگی اجرا را به نقطه تطبیق تابع غیر بهینه شده منتقل می‌کند و اجرا را در آنجا ادامه می‌دهد. و نسخه بهینه شده حذف میشود

دو روش وجود دارد که VM از طریق آن‌ها فرض‌های گمانه‌زنی انجام شده توسط کامپایلر را محافظت می‌کند:

روش اول: چک‌های درون خطی (مانند دستورالعمل‌های IL CheckSmi، CheckClass) که بررسی می‌کنند آیا فرض در محل استفاده که کامپایلر این فرض را انجام داده است برقرار است یا خیر

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


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
🔸 فلاتر 3.24
🔸 دارت 3.5
منتشر شد


⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
آموزش برنامه نویسی فلاتر Flutter
⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
▫️ آپدیت Shared Preferences

اضافه شدن SharedPreferencesAsync و SharedPreferencesWithCache

در SharedPreferencesAsync به شکل مستقیم میتونید با پلتفرم ارتباط برقرار کنید و به روز ترین اطلاعات ذخیره شده روی preferences را دریافت کنید ولی سرعت کمتری نسبت به حالت کش شده داره.

تغییر مهم بعدی این هست که در پیاده سازی بخش سیستم عامل اندروید دیگه از خود Shared Preferences استفاده نمیشه و سویچ شده به Preferences DataStore

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir