Forwarded from 🎥 TiTi Tv | تیتی تی وی
۷ آبان روز بزرگداشت کوروش کبیر گرامی باد
هفتم آبان، سالروز ورود کوروش بزرگ به بابل میباشد. بر اساس رویدادنامه نبونعید، در ۲۹ اکتبر (۷ آبان) سال ۵۳۹ پیش از میلاد کوروش وارد بابل شد. در رویدادنامه نبونعید اینچنین آمده است:
در ماه اَرَخسمنو (Arahsamnu = ماه هشتم)، روز سوم (هفتم آبان ماه) کوروش به بابل اندر آمد. شاخههای سبز در برابر (زیر پای او) گسترده شد.
این روز به مناسبت پایان تصرف امپراتوری بابل به دست سپاه هخامنشیان و پایان دوران ستمگری در جهان باستان انتخاب شده است.
Join → @Aparat_Tv 📺
هفتم آبان، سالروز ورود کوروش بزرگ به بابل میباشد. بر اساس رویدادنامه نبونعید، در ۲۹ اکتبر (۷ آبان) سال ۵۳۹ پیش از میلاد کوروش وارد بابل شد. در رویدادنامه نبونعید اینچنین آمده است:
در ماه اَرَخسمنو (Arahsamnu = ماه هشتم)، روز سوم (هفتم آبان ماه) کوروش به بابل اندر آمد. شاخههای سبز در برابر (زیر پای او) گسترده شد.
این روز به مناسبت پایان تصرف امپراتوری بابل به دست سپاه هخامنشیان و پایان دوران ستمگری در جهان باستان انتخاب شده است.
Join → @Aparat_Tv 📺
⚡️⚡️یه نکته ⚡️⚡️
توی زبان دارت چیزی به صورت صریح به اسم interface نداریم و هر کلاسی میتونه در حکم یک interface عمل کنه.
یعنی با implement کردن یک کلاس به جای extend کردن میتونیم از اون کلاس به عنوان interface استفاده کنیم.
✔️پس یه کلاس توی دارت هم قابلیت ارث بری داره و هم اینکه میشه به عنوان interface ازش استفاده کرد.
🔥حالا اگه بخوایم یه کلاسی بنویسیم که فقط و فقط یه interface باشه باید چکار کنیم؟
یعنی اینکه کلاسمون نه قابلیت ارث بری داشته باشه و نه بشه ازش نمونه ساخت و دقیقن مثل یک interface فقط بشه implement اش کرد.
برای اینکار از پترن ساده زیر استفاده میکنیم.
abstract class MyInterface {
MyInterface._() ;
}
😍یعنی با یه private constructor امکان نمونه ساختن و ارث بری رو ازش میگیریم و فقط میتونیم implement اش کنیم.
توی زبان دارت چیزی به صورت صریح به اسم interface نداریم و هر کلاسی میتونه در حکم یک interface عمل کنه.
یعنی با implement کردن یک کلاس به جای extend کردن میتونیم از اون کلاس به عنوان interface استفاده کنیم.
✔️پس یه کلاس توی دارت هم قابلیت ارث بری داره و هم اینکه میشه به عنوان interface ازش استفاده کرد.
🔥حالا اگه بخوایم یه کلاسی بنویسیم که فقط و فقط یه interface باشه باید چکار کنیم؟
یعنی اینکه کلاسمون نه قابلیت ارث بری داشته باشه و نه بشه ازش نمونه ساخت و دقیقن مثل یک interface فقط بشه implement اش کرد.
برای اینکار از پترن ساده زیر استفاده میکنیم.
abstract class MyInterface {
MyInterface._() ;
}
😍یعنی با یه private constructor امکان نمونه ساختن و ارث بری رو ازش میگیریم و فقط میتونیم implement اش کنیم.
Pure Coder
https://vrgl.ir/Qh1ip
دوستانی که بک اند کار میکنن میتونن این مقاله رو مطالعه کنن.
برای برنامه نویسان فلاتر هم خوندنش خالی از لطف نیست.
برای برنامه نویسان فلاتر هم خوندنش خالی از لطف نیست.
توی پست قبلی یکی از دوستان گفتن که در مورد class و interface و extend و implement ... کاربرد ها و تفاوت هاشون و... صحبت کنیم.
آیا کلن لازم میدونید که در مورد مباحث پایه ای دارت صحبت کنیم؟
آیا کلن لازم میدونید که در مورد مباحث پایه ای دارت صحبت کنیم؟
Anonymous Poll
83%
آره خیلی خوبه
4%
نه لازم نیست
13%
نظری ندارم
⚡️⚡️debug vs profile vs release⚡️⚡️
توی فلاتر سه حالت برای خروجی گرفتن و اجرا کردن اپ داریم.
✔️debug
✔️profile
✔️release
حالت release که برای خروجی گرفتن نهایی و انتشار اپلیکیشن هست.
❓ولی چه تفاوتی بین حالت debug و profile هست ؟
🔥یکی از نکات مهم این هست که برای تست پرفرمانس اپ و بررسی مشکلات احتمالی و به اصطلاح لگ هایی که ممکنه موقع کار با اپ پیش بیاد باید از حالت profile استفاده کنیم.
❓چرا؟
🔥یکی از دلایل این هست که در حالت debug برای کمک به روند توسعه و خطایابی بهتر تعداد زیادی assert هنگام اجرای کد های فریمورک اجرا میشه که باعث افت پرفرمانس اپ در حالت debug میشه که این assert ها در حالت profile و release هیچ تاثیری ندارن.
🔥پس برای تست پرفرمانس اپ به هیچ وجه از حالت debug استفاده نکنید چون که ۱۰۰ درصد نتیجه نادرست خواهد بود.
🔥نکته دیگه این که برای اینکه بهترین تست پرفرمانس رو داشته باشید از دیوایس واقعی استفاده کنید.
پس
Profile mode + Real device
🔥همچنین میتونید از ابزارهایی که فلاتر در حالت profile در اختیارتون میگذاره برای تست پرفرمانس اپ و... استفاده کنید.
توی فلاتر سه حالت برای خروجی گرفتن و اجرا کردن اپ داریم.
✔️debug
✔️profile
✔️release
حالت release که برای خروجی گرفتن نهایی و انتشار اپلیکیشن هست.
❓ولی چه تفاوتی بین حالت debug و profile هست ؟
🔥یکی از نکات مهم این هست که برای تست پرفرمانس اپ و بررسی مشکلات احتمالی و به اصطلاح لگ هایی که ممکنه موقع کار با اپ پیش بیاد باید از حالت profile استفاده کنیم.
❓چرا؟
🔥یکی از دلایل این هست که در حالت debug برای کمک به روند توسعه و خطایابی بهتر تعداد زیادی assert هنگام اجرای کد های فریمورک اجرا میشه که باعث افت پرفرمانس اپ در حالت debug میشه که این assert ها در حالت profile و release هیچ تاثیری ندارن.
🔥پس برای تست پرفرمانس اپ به هیچ وجه از حالت debug استفاده نکنید چون که ۱۰۰ درصد نتیجه نادرست خواهد بود.
🔥نکته دیگه این که برای اینکه بهترین تست پرفرمانس رو داشته باشید از دیوایس واقعی استفاده کنید.
پس
Profile mode + Real device
🔥همچنین میتونید از ابزارهایی که فلاتر در حالت profile در اختیارتون میگذاره برای تست پرفرمانس اپ و... استفاده کنید.
⚡️⚡️⚡️set get in Dart⚡️⚡️⚡️
اگه بخوایم این قاعده رو در دارت پیاده کنیم باید فیلد مورد نظر رو private کنیم و بعدش setter و getter تعریف کنیم.
String get name => _name;
String _name;
set name(String value) {
if(_name == value) return;
_name = value;
}
🔥ترتیبی که معمولن استفاده میکنن برای نوشتن کدها به شکل بالا هست.
✔️اول getter
✔️بعد فیلد private
✔️بعد setter
الزامی نیست ولی میتونید این ترتیب رو رعایت کنید. 😊
❓ولی ایا توی دارت همیشه نیازی به تعریف setter و getter داریم؟
نه.
مثلن وقتی که فیلد مورد نظر final هست (که قاعدتن read-only هم میشه) نیاز نیست که دیگ setter و getter تعریف کنیم.
یه نمونه واضح بخوایم مثال بزنیم ویجت های فلاتر هست.
همه ویجت ها immutable هستن و باید فیلد هاشون final باشن.
خب وقتی که یه ویجت جدید رو ایجاد میکنیم (فرقی نداره چه نوعی باشه) کافیه فقط یه سری فیلد final تعریف کنیم.
🔥به صورت واضح تر بخوایم بگیم توی دارت هر instance field خودش به صورت ضمنی (implicit) هم یه getter هست و هم یه setter.
یعنی وقتی که توی یه کلاس یه فیلد جدید تعریف میکنید برای مثال :
String name;
این فیلد خودش هم setter هست و هم getter.
و نیازی نیست که دیگه به صورت جداگانه براش setter یا getter تعرسف کنیم.
زمانی هم که فیلد رو final کنیم read-only میشه.
❓پس با این حساب توی دارت چه وقتایی setter یا getter تعریف کنیم؟
✔️زمانی که میخوایم توی این متد ها یه کاری اضافه تر از return کردن مقدار (getter) یا ثبت مقدار (setter) انجام بدیم.
✔️زمانی که لازمه فیلد مورد نظر write-only بشه.
✔️زمانی که لازم داریم یه field جدید علاوه بر instance field های قبلی به کلاس اضافه کنیم.
مثلن یه فیلدی که قراره از instance field های دیگه استفاده کنه.
String firstname;
String lastname;
String get fullname => '$firstname $lastname';
✔️توی abstract class ها هم وقتی که یه فیلدی داریم که قراره توی کلاس های فرزند تعیین تکلیف و مقدار دهی بشه معمولن از یه getter به صورت abstract استفاده میکنیم.
String get name;
و کلاس های فرزند اون رو override میکنن.
این نکته رو توی بحث abstraction بیشتر توضیح میدیم.
اگه بخوایم این قاعده رو در دارت پیاده کنیم باید فیلد مورد نظر رو private کنیم و بعدش setter و getter تعریف کنیم.
String get name => _name;
String _name;
set name(String value) {
if(_name == value) return;
_name = value;
}
🔥ترتیبی که معمولن استفاده میکنن برای نوشتن کدها به شکل بالا هست.
✔️اول getter
✔️بعد فیلد private
✔️بعد setter
الزامی نیست ولی میتونید این ترتیب رو رعایت کنید. 😊
❓ولی ایا توی دارت همیشه نیازی به تعریف setter و getter داریم؟
نه.
مثلن وقتی که فیلد مورد نظر final هست (که قاعدتن read-only هم میشه) نیاز نیست که دیگ setter و getter تعریف کنیم.
یه نمونه واضح بخوایم مثال بزنیم ویجت های فلاتر هست.
همه ویجت ها immutable هستن و باید فیلد هاشون final باشن.
خب وقتی که یه ویجت جدید رو ایجاد میکنیم (فرقی نداره چه نوعی باشه) کافیه فقط یه سری فیلد final تعریف کنیم.
🔥به صورت واضح تر بخوایم بگیم توی دارت هر instance field خودش به صورت ضمنی (implicit) هم یه getter هست و هم یه setter.
یعنی وقتی که توی یه کلاس یه فیلد جدید تعریف میکنید برای مثال :
String name;
این فیلد خودش هم setter هست و هم getter.
و نیازی نیست که دیگه به صورت جداگانه براش setter یا getter تعرسف کنیم.
زمانی هم که فیلد رو final کنیم read-only میشه.
❓پس با این حساب توی دارت چه وقتایی setter یا getter تعریف کنیم؟
✔️زمانی که میخوایم توی این متد ها یه کاری اضافه تر از return کردن مقدار (getter) یا ثبت مقدار (setter) انجام بدیم.
✔️زمانی که لازمه فیلد مورد نظر write-only بشه.
✔️زمانی که لازم داریم یه field جدید علاوه بر instance field های قبلی به کلاس اضافه کنیم.
مثلن یه فیلدی که قراره از instance field های دیگه استفاده کنه.
String firstname;
String lastname;
String get fullname => '$firstname $lastname';
✔️توی abstract class ها هم وقتی که یه فیلدی داریم که قراره توی کلاس های فرزند تعیین تکلیف و مقدار دهی بشه معمولن از یه getter به صورت abstract استفاده میکنیم.
String get name;
و کلاس های فرزند اون رو override میکنن.
این نکته رو توی بحث abstraction بیشتر توضیح میدیم.
Pure Coder
سوال
ایا فلاتر single thread هست؟ (دلیلتون رو توضیحم بدید بد نیست)
ایا فلاتر single thread هست؟ (دلیلتون رو توضیحم بدید بد نیست)
دوستانی که گفتن نه حالا بگن چنتا thread داریم توی فلاتر؟ 😁🤔
🔥Capsule
⚡️⚡️⚡️Flutter threads⚡️⚡️⚡️
1️⃣
❓آیا فلاتر single thread هست؟ 🤔
جواب این سوال هم آره هست و هم نه. 😳😳
ولی چرا اره و چرا نه.
بستگی داره از چه نظر به موضوع نگاه کنیم.
🔥اگه فقط کدهایی که خودمون داریم مینویسیم رو در نظر بگیریم و کار هایی ک framework فلاتر روی کدهای ما انجام میده به جواب آره میرسیم.
جهت یادآوری بگم که قبلن توی یه پست دیگه در مورد بخش های مختلف فلاتر توضیح دادیم و گفتیم که فلاتر از یه بخش به اسم framework که کلن با Dart نوشته شده و یه بخش دیگه به اسم engine که با c++ نوشته شده و ... تشکیل شده.
اینجا منظورمون از framework هم همون بخش نوشته شده با Dart هست.
✔️این جا یه thread داریم به اسم UI thread که تمام کدهایی که ما نوشتیم به علاوه کار هایی framework انجام میده، داخلش انجام میشه.
❓حالا کار هایی که framework انجام میده چیه؟
بحث کردن راجب این موضوع خیلی مفصله ولی به طور کلی و خیلی ساده framework کدهای ما (ویجت ها) رو به ی سری painting commands تبدیل میکنه که بعدن اون رو تحویل engine بده و engine هم اون رو روی صفحه نمایش بده.
همچنین کارهای دیگه ای هم framework انجام میده از جمله دریافت event هایی مثل touch یا click های کاربر از engine و پردازش اون ها و هدایت کردن اون touch ها به سمت object های هدف.
کارهای framework به این موارد خلاصه نمیشن....
همه این کارها در یک thread انجام میشه(یک isolate که یک thread داره)
🔥پس نکته مهمی که این جا مطرح هست block نشدن این thread هست.
یعنی باید جوری کد بنویسیم که این thread قفل یا block نشه که اگه این اتفاق بیوفته نتیجش افت frame و لگ توی برنامه (به خصوص موقع اجرای انیمیشن ها خواهد بود)
🔥برای جلوگیری از block شدن این thread میتونیم برای پردازش های سنگین ، isolate های دیگه ای بسازیم.
✔️در مورد جواب ،،نه،، این سوال هم توی پست بعدی صحبت میکینم. ☺️
#capsule
#advanced
#single_thread
⚡️⚡️⚡️Flutter threads⚡️⚡️⚡️
1️⃣
❓آیا فلاتر single thread هست؟ 🤔
جواب این سوال هم آره هست و هم نه. 😳😳
ولی چرا اره و چرا نه.
بستگی داره از چه نظر به موضوع نگاه کنیم.
🔥اگه فقط کدهایی که خودمون داریم مینویسیم رو در نظر بگیریم و کار هایی ک framework فلاتر روی کدهای ما انجام میده به جواب آره میرسیم.
جهت یادآوری بگم که قبلن توی یه پست دیگه در مورد بخش های مختلف فلاتر توضیح دادیم و گفتیم که فلاتر از یه بخش به اسم framework که کلن با Dart نوشته شده و یه بخش دیگه به اسم engine که با c++ نوشته شده و ... تشکیل شده.
اینجا منظورمون از framework هم همون بخش نوشته شده با Dart هست.
✔️این جا یه thread داریم به اسم UI thread که تمام کدهایی که ما نوشتیم به علاوه کار هایی framework انجام میده، داخلش انجام میشه.
❓حالا کار هایی که framework انجام میده چیه؟
بحث کردن راجب این موضوع خیلی مفصله ولی به طور کلی و خیلی ساده framework کدهای ما (ویجت ها) رو به ی سری painting commands تبدیل میکنه که بعدن اون رو تحویل engine بده و engine هم اون رو روی صفحه نمایش بده.
همچنین کارهای دیگه ای هم framework انجام میده از جمله دریافت event هایی مثل touch یا click های کاربر از engine و پردازش اون ها و هدایت کردن اون touch ها به سمت object های هدف.
کارهای framework به این موارد خلاصه نمیشن....
همه این کارها در یک thread انجام میشه(یک isolate که یک thread داره)
🔥پس نکته مهمی که این جا مطرح هست block نشدن این thread هست.
یعنی باید جوری کد بنویسیم که این thread قفل یا block نشه که اگه این اتفاق بیوفته نتیجش افت frame و لگ توی برنامه (به خصوص موقع اجرای انیمیشن ها خواهد بود)
🔥برای جلوگیری از block شدن این thread میتونیم برای پردازش های سنگین ، isolate های دیگه ای بسازیم.
✔️در مورد جواب ،،نه،، این سوال هم توی پست بعدی صحبت میکینم. ☺️
#capsule
#advanced
#single_thread
🔥Capsule
⚡️⚡️⚡️Flutter threads⚡️⚡️⚡️
2️⃣
❓آیا فلاتر single thread هست؟ 🤔
خب بریم در مورد جواب ،، نه،، سوال بالا صحبت کنیم.
گفتیم که همه کدهای ما به علاوه پردازش های framework توی یه thread به اسم UI thread انجام میشه. و در نهایت یک سری painting command ها تولید میشن
❓.ولی این command ها به چه دردی میخورن ؟
🔥این ها به یه thread دیگه ای تحویل داده میشن که مسئولیتش ارتباط برقرار کردن با پردازشگر و درنهایت نمایش تصویر روی نمایشگر هست.
پس یه thread دیگه هم وارد کار شد که اسمش raster thread هست.
🔥همون طور که گفتیم کار Raster thread که بهش GPU thread هم میگن، دریافت painting command ها از UI thread و نمایش اون ها هست (این کار توسط engine که به زبان c++ نوشته شده انجام میشه)
🔥این دو thread یعنی UI و raster نقش اصلی در پرفرمانس اپ رو ایفا میکنن.
🔥ما به raster thread دسترسی نداریم ولی کدهایی که مینویسیم تاثیر مستقیم توی کار اون و پرفرمانسش داره.
پس اگه اپتون با افت فریم مواجه شد دلیلش رو توی کدهای خودتون جستجو کنید و به raster thread یا... انگ نچسبونید 😂😂.
🔥یه thread مهم دیگه هم به اسم IO thread داریم که وظیفش هندل کردن تسک های سنگین هست.
خیلی از future هایی که استفاده میکنیم میره توی این thread و پردازش میشه و بعد از این که done شد برمیگرده و یه event توی UI thread اجرا میشه.
❓ایا thread های دیگه هم غیر از این سه تا داریم ؟
✔️UI
✔️Raster
✔️IO
✔️? 🤔
#capsule
#advanced
#single_thread
⚡️⚡️⚡️Flutter threads⚡️⚡️⚡️
2️⃣
❓آیا فلاتر single thread هست؟ 🤔
خب بریم در مورد جواب ،، نه،، سوال بالا صحبت کنیم.
گفتیم که همه کدهای ما به علاوه پردازش های framework توی یه thread به اسم UI thread انجام میشه. و در نهایت یک سری painting command ها تولید میشن
❓.ولی این command ها به چه دردی میخورن ؟
🔥این ها به یه thread دیگه ای تحویل داده میشن که مسئولیتش ارتباط برقرار کردن با پردازشگر و درنهایت نمایش تصویر روی نمایشگر هست.
پس یه thread دیگه هم وارد کار شد که اسمش raster thread هست.
🔥همون طور که گفتیم کار Raster thread که بهش GPU thread هم میگن، دریافت painting command ها از UI thread و نمایش اون ها هست (این کار توسط engine که به زبان c++ نوشته شده انجام میشه)
🔥این دو thread یعنی UI و raster نقش اصلی در پرفرمانس اپ رو ایفا میکنن.
🔥ما به raster thread دسترسی نداریم ولی کدهایی که مینویسیم تاثیر مستقیم توی کار اون و پرفرمانسش داره.
پس اگه اپتون با افت فریم مواجه شد دلیلش رو توی کدهای خودتون جستجو کنید و به raster thread یا... انگ نچسبونید 😂😂.
🔥یه thread مهم دیگه هم به اسم IO thread داریم که وظیفش هندل کردن تسک های سنگین هست.
خیلی از future هایی که استفاده میکنیم میره توی این thread و پردازش میشه و بعد از این که done شد برمیگرده و یه event توی UI thread اجرا میشه.
❓ایا thread های دیگه هم غیر از این سه تا داریم ؟
✔️UI
✔️Raster
✔️IO
✔️? 🤔
#capsule
#advanced
#single_thread
نظرسنجی
روند ادامه فعالیت کانال رو تو انتخاب کن...
روند ادامه فعالیت کانال رو تو انتخاب کن...
Anonymous Poll
52%
با همین روند کنونی فعالیت کانال ادامه پیدا کنه
21%
مباحث چالشی تر و پیشرفته تر بیان بشه (الان سطح مطالب پایینه)
19%
مباحث پایه ای تر و ساده تر بیان بشه (الان سطح مطالب بالاس)
8%
نظر دیگه ای دارم (اگه این گزینه رو انتخاب کردی لطفن نظرت رو کامنت کن)
Forwarded from 🎥 اپارات 🎥
This media is not supported in your browser
VIEW IN TELEGRAM
عنکبوت رو تا حالا اینجوری اسکول کرده بودید؟ 😅
معلوم نیست چی تو مغز عنکبوت میگذره و چه توهمی نسبت به نشانگر ماوس داره
🎬 @aparatcheh 🎞
معلوم نیست چی تو مغز عنکبوت میگذره و چه توهمی نسبت به نشانگر ماوس داره
🎬 @aparatcheh 🎞