BottomSheet
4⃣
خب تا اینجا bottom sheet های نوع Persistent رو دیدیم و با دو روش استفاده از اون ها ، شباهت ها و تفاوت های این روش ها اشنا شدیم.
❓حالا چرا به اینا میگن Persistent؟
🔥این کلمه به معنی ماندگار هست (یه چیز توی این مایه ها 😝)
حالا چون این نوع از bottom sheet ها مزاحم کار کردن با بقیه قسمت های صفحه نمیشن و با کار کردن با بقیه قسمت های صفحه بسته نمیشن، توی متریال دیزاین بهشون میگن
Persistent Bottom Sheets
#capsule
#intermediate
4⃣
خب تا اینجا bottom sheet های نوع Persistent رو دیدیم و با دو روش استفاده از اون ها ، شباهت ها و تفاوت های این روش ها اشنا شدیم.
❓حالا چرا به اینا میگن Persistent؟
🔥این کلمه به معنی ماندگار هست (یه چیز توی این مایه ها 😝)
حالا چون این نوع از bottom sheet ها مزاحم کار کردن با بقیه قسمت های صفحه نمیشن و با کار کردن با بقیه قسمت های صفحه بسته نمیشن، توی متریال دیزاین بهشون میگن
Persistent Bottom Sheets
#capsule
#intermediate
💊Capsule
GIT
🔥چطوری توی گیت کامیت های خوب, استاندارد و قابل فهم بزنیم؟
ساختار کامیت :
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
چیزی که بیشتر مرسومه :
<type>[optional scope]: <description>
توضیحات بیشتر :
https://www.conventionalcommits.org/en/v1.0.0/
GIT
🔥چطوری توی گیت کامیت های خوب, استاندارد و قابل فهم بزنیم؟
ساختار کامیت :
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
چیزی که بیشتر مرسومه :
<type>[optional scope]: <description>
توضیحات بیشتر :
https://www.conventionalcommits.org/en/v1.0.0/
توی این پست راجب خط اول صحبت میکنم.
🟢<type>(<scope>): <subject>
✔️type : required
✔️scope : optional
✔️subject: required
✅type
میتونین به صورت قراردادی توی پروژه ای که دارین انجام میدین type های مختلف رو مشخص کنید .
🔥یه سری type هایی که مرسوم هست :
🔰feat(feature)
وقتی یه چیز جدیدی اضافه کردی
🔰docs
وقتی داکیومنت تغییر کرده یا داکیومنت نوشتی
🔰fix
وقتی یه باگی رو فیکس کردی
🔰refactor
یه کدی رو تغییر دادی که نه ویژگی جدید اضافه شده و نه باکی فیکس شده
🔰style
کد ها رو فرمت کردی
مثلا خطهای اضافه رو پاک کردی
اسپیس ها رو درست کردی
که فقط کدها قشنگتر به نظر بیان
🔰test
یه تستی نوشتی
🔰chore
کارهایی مثل اضافه کردن به دپندنسی یا فایل pubsoec که تغییری توی کدها ایجاد نمیکنن
#git
#intermediate
🟢<type>(<scope>): <subject>
✔️type : required
✔️scope : optional
✔️subject: required
✅type
میتونین به صورت قراردادی توی پروژه ای که دارین انجام میدین type های مختلف رو مشخص کنید .
🔥یه سری type هایی که مرسوم هست :
🔰feat(feature)
وقتی یه چیز جدیدی اضافه کردی
🔰docs
وقتی داکیومنت تغییر کرده یا داکیومنت نوشتی
🔰fix
وقتی یه باگی رو فیکس کردی
🔰refactor
یه کدی رو تغییر دادی که نه ویژگی جدید اضافه شده و نه باکی فیکس شده
🔰style
کد ها رو فرمت کردی
مثلا خطهای اضافه رو پاک کردی
اسپیس ها رو درست کردی
که فقط کدها قشنگتر به نظر بیان
🔰test
یه تستی نوشتی
🔰chore
کارهایی مثل اضافه کردن به دپندنسی یا فایل pubsoec که تغییری توی کدها ایجاد نمیکنن
#git
#intermediate
🟢<type>(<scope>): <subject>
✔️type : required
✔️scope : optional
✔️subject: required
✅scope
🔥این پارامتر اختیاری هست
🔥کاملا قراردادی هست و بستگی داره به پروژه ای که انجام میدین و توی پروژه باید مشخص کنید که این پارامتر چه مواردی رو میتونه در بر بگیره .
❌پس دنبال موارد از پیش تعیین شده نباشید
🔰برای نمونه توی یه پروژه ای که لایه های مختلف مثل presentation, data, logic داره .
این ها میتونن به عنوان scope در نظر گرفته بشن
🔰یا پروژه ای که سرویس های مختلف داره...
🔰ریپوزیتوری bloc روی گیت هاب که خودش از پروژه های مختلف مثل bloc, fluttet_bloc, ... تشکیل شده، هر پروژه رو به عنوان یه scope در نظر گرفته.
✅پس کاملا قراردادیه.
✅مثل مورد قبلی یعنی type, ابتدای پروژه باید یه لیستی رو مشخص کنید و قرارداد کنید و از اون پیروی کنید ( البته در طول پروژه میتونه بروزرسانی بشه)
#advanced
#capsule
✔️type : required
✔️scope : optional
✔️subject: required
✅scope
🔥این پارامتر اختیاری هست
🔥کاملا قراردادی هست و بستگی داره به پروژه ای که انجام میدین و توی پروژه باید مشخص کنید که این پارامتر چه مواردی رو میتونه در بر بگیره .
❌پس دنبال موارد از پیش تعیین شده نباشید
🔰برای نمونه توی یه پروژه ای که لایه های مختلف مثل presentation, data, logic داره .
این ها میتونن به عنوان scope در نظر گرفته بشن
🔰یا پروژه ای که سرویس های مختلف داره...
🔰ریپوزیتوری bloc روی گیت هاب که خودش از پروژه های مختلف مثل bloc, fluttet_bloc, ... تشکیل شده، هر پروژه رو به عنوان یه scope در نظر گرفته.
✅پس کاملا قراردادیه.
✅مثل مورد قبلی یعنی type, ابتدای پروژه باید یه لیستی رو مشخص کنید و قرارداد کنید و از اون پیروی کنید ( البته در طول پروژه میتونه بروزرسانی بشه)
#advanced
#capsule
🟢<type>(<scope>): <subject>
✔️type : required
✔️scope : optional
✔️subject: required
✅subject
🔥برای این مورد از یک جمله کوتاه برای شرح دادن commit مورد نظر استفاده کنید.
جمله باید :
✔️زمان حال ساده باشه.
✔️امری باشه.
✔️با حروف کوچک شروع بشه.
✔️تهش نقطه نباشه
✅update the folan thing
❌Update the folan thing
❌update the folan thing.
❌updated the folan thing
❌the folan thing is updated
❌the folan thing was updated
❌the folan thing has been updated
#capsule
#advanced
✔️type : required
✔️scope : optional
✔️subject: required
✅subject
🔥برای این مورد از یک جمله کوتاه برای شرح دادن commit مورد نظر استفاده کنید.
جمله باید :
✔️زمان حال ساده باشه.
✔️امری باشه.
✔️با حروف کوچک شروع بشه.
✔️تهش نقطه نباشه
✅update the folan thing
❌Update the folan thing
❌update the folan thing.
❌updated the folan thing
❌the folan thing is updated
❌the folan thing was updated
❌the folan thing has been updated
#capsule
#advanced
🔥Challenge
❓ چالش :
▶️سناریو :
فرض کنید که میخواین توی تیم نقشه نشان استخدام بشید و کار اصلی که از شما میخوان این هست که یه SDK برای فلاتر بنویسید
همچنین به شما گفته میشه که ما الان یه دونه SDK نیتیو داریم و شما باید از همون استفاده کنید و یه دونه SDK برای فلاتر توسعه بدید...
در نهایت باید همه قابلیت های نیتیو اعم از کار کردن با نقشه و مارکر زدن توی نقشه و این ور اون ور کردن نقشه و... رو توی فلاتر هم داشته باشیم
خب پیشنهاد هاتون رو بگید که چکار میکنید و از چه روشی استفاده میکنید
#challenge
❓ چالش :
▶️سناریو :
فرض کنید که میخواین توی تیم نقشه نشان استخدام بشید و کار اصلی که از شما میخوان این هست که یه SDK برای فلاتر بنویسید
همچنین به شما گفته میشه که ما الان یه دونه SDK نیتیو داریم و شما باید از همون استفاده کنید و یه دونه SDK برای فلاتر توسعه بدید...
در نهایت باید همه قابلیت های نیتیو اعم از کار کردن با نقشه و مارکر زدن توی نقشه و این ور اون ور کردن نقشه و... رو توی فلاتر هم داشته باشیم
خب پیشنهاد هاتون رو بگید که چکار میکنید و از چه روشی استفاده میکنید
#challenge
برای اپ های فلاتریتون چه معماری استفاده میکنید؟
چطوری یادش گرفتید؟
بنظرتون تا چه حد بهش مسلط هستید؟
چطوری دانشتون رو در موردش ارتقا میدید؟
چطوری یادش گرفتید؟
بنظرتون تا چه حد بهش مسلط هستید؟
چطوری دانشتون رو در موردش ارتقا میدید؟
چقدر با دیزاین پترن ها آشنایی دارین؟
کدوم ها رو بلدین؟
کدوم ها رو صرفا سینتکسش رو بلدین؟
کدوم ها رو به صورت کاربردی ازش استفاده میکنین؟
به غیر از سینگلتون 😅😝
کدوم ها رو بلدین؟
کدوم ها رو صرفا سینتکسش رو بلدین؟
کدوم ها رو به صورت کاربردی ازش استفاده میکنین؟
به غیر از سینگلتون 😅😝
💊Capsule
🔥extends vs implement
1⃣
🟢واژه extend به معنای گسترش دادن یا توسعه دادن هست
B extends A
یعنی اینکه B داره A رو توسعه میده (گسترش میده)
🟢واژه implement به معنای پیاده سازی یا اجرا کردن هست
B implement A
یعنی B داره A رو پیاده سازی میکنه.
#capsule
🔥extends vs implement
1⃣
🟢واژه extend به معنای گسترش دادن یا توسعه دادن هست
B extends A
یعنی اینکه B داره A رو توسعه میده (گسترش میده)
🟢واژه implement به معنای پیاده سازی یا اجرا کردن هست
B implement A
یعنی B داره A رو پیاده سازی میکنه.
#capsule
💊Capsule
🔥extends vs implement
2⃣
گفتم که extend به معنای توسعه دادن هست .
پس وقتی که کلاس B داره کلاس A رو توسعه میده (extends) , طبیعتا طبق معنای توسعه دادن، باید تمام ویژگی ها و رفتار های کلاس A رو داشته باشه و بتونه اون رفتار ها رو تغییر بده و یا ویژگی ها و رفتار های جدید بهش اضافه کنه.
هر کلاس دو تا مولفه داره
✔️Fields ویژگی
✔️Methods رفتار
این ها میتونن static یا instance باشن
✔️instance Fields or methods
✔️Static Fields or methods
❌در این جا با static ها کاری نداریم (چون در سطح کلاس هستن و نه در سطح اشیا ساخته شده از کلاس)
🔥وقتی یک کلاس از یک کلاس دیگه extends میکنه:
🟢همه instance Field ها و instance method های اون رو به ارث میبره .
❌به غیر از اعضای private
❌توی دارت private نداریم.
🟢میتونه اون ها رو تغییر یا به اصطلاح override کنه.
🟢یا میتونه field ها یا method های جدید رو به اون اضافه کنه.
🔥در اینجا اصطلاح super class و sub class معرفی میشه
B extends A
در نتیجه کلاس A در اینجا super class و کلاس B یک subclass از کلاس A هست
کلاس فرزند تمام رفتار ها و ویژگی های والد رو به ارث میبره.
میتونه اون ها رو به صورت دست نخورده باقی بگذاره یا اون ها رو تغییر بده.
همچنین میتونه رفتار ها و ویژگی های جدید اضافه کنه.
#capsule
🔥extends vs implement
2⃣
گفتم که extend به معنای توسعه دادن هست .
پس وقتی که کلاس B داره کلاس A رو توسعه میده (extends) , طبیعتا طبق معنای توسعه دادن، باید تمام ویژگی ها و رفتار های کلاس A رو داشته باشه و بتونه اون رفتار ها رو تغییر بده و یا ویژگی ها و رفتار های جدید بهش اضافه کنه.
هر کلاس دو تا مولفه داره
✔️Fields ویژگی
✔️Methods رفتار
این ها میتونن static یا instance باشن
✔️instance Fields or methods
✔️Static Fields or methods
❌در این جا با static ها کاری نداریم (چون در سطح کلاس هستن و نه در سطح اشیا ساخته شده از کلاس)
🔥وقتی یک کلاس از یک کلاس دیگه extends میکنه:
🟢همه instance Field ها و instance method های اون رو به ارث میبره .
❌به غیر از اعضای private
❌توی دارت private نداریم.
🟢میتونه اون ها رو تغییر یا به اصطلاح override کنه.
🟢یا میتونه field ها یا method های جدید رو به اون اضافه کنه.
🔥در اینجا اصطلاح super class و sub class معرفی میشه
B extends A
در نتیجه کلاس A در اینجا super class و کلاس B یک subclass از کلاس A هست
کلاس فرزند تمام رفتار ها و ویژگی های والد رو به ارث میبره.
میتونه اون ها رو به صورت دست نخورده باقی بگذاره یا اون ها رو تغییر بده.
همچنین میتونه رفتار ها و ویژگی های جدید اضافه کنه.
#capsule
💊Capsule
🔥extends vs implement
3⃣
خب بریم سراغ implement
گفتیم که این واژه به معنای پیاده سازی هست
یک لحظه از دنیای برنامه نویسی بیاین بیرون
توی دنیای واقعی
من به شما میگم، اقا خانم، فلان چیز رو پیاده سازی کن.
وقتی بهت میگم فلان چیز رو پیاده سازی کن شما منتظر چی هست؟ در جواب چی میگی؟
میگی چی رو؟
درسته؟
منتظر یه دستور هستی
منتظر یک یا چند دستور
دستور العمل
دستور هایی که یک نفر صادر کرده و دیگری میخواد پیاده کنه یا اجرا کنه.
🔥پس وقتی که میگیم B میخاد A رو implement کنه، در واقع A باید یک مجموعه ای از دستور العمل ها باشه.
❌در اینجا دیگه A چیزی پیاده نکرده، چون که A قراره که دستور رو صادر کنه و یکی دیگه اون ها رو پیاده یا اجرا کنه.
❓پس باید بفهمیم که چطور میتونیم یک مجموعه از دستور ها رو بنویسیم که دیگران اون ها رو اجرا کنن.
پست بعدی 😍
#capsule
🔥extends vs implement
3⃣
خب بریم سراغ implement
گفتیم که این واژه به معنای پیاده سازی هست
یک لحظه از دنیای برنامه نویسی بیاین بیرون
توی دنیای واقعی
من به شما میگم، اقا خانم، فلان چیز رو پیاده سازی کن.
وقتی بهت میگم فلان چیز رو پیاده سازی کن شما منتظر چی هست؟ در جواب چی میگی؟
میگی چی رو؟
درسته؟
منتظر یه دستور هستی
منتظر یک یا چند دستور
دستور العمل
دستور هایی که یک نفر صادر کرده و دیگری میخواد پیاده کنه یا اجرا کنه.
🔥پس وقتی که میگیم B میخاد A رو implement کنه، در واقع A باید یک مجموعه ای از دستور العمل ها باشه.
❌در اینجا دیگه A چیزی پیاده نکرده، چون که A قراره که دستور رو صادر کنه و یکی دیگه اون ها رو پیاده یا اجرا کنه.
❓پس باید بفهمیم که چطور میتونیم یک مجموعه از دستور ها رو بنویسیم که دیگران اون ها رو اجرا کنن.
پست بعدی 😍
#capsule
💊Capsule
🔥extends vs implement
4⃣
رسیدیم به اینجا که یک مجموعه از دستور ها رو یه جایی بنویسم و بقیه کلاس ها بتونن اون ها implement کنن.
🔥برای این منظور توی زبان های برنامه نویسی از مفهومی به نام interface ها استفاده میکنن.
✅توی یک interface ما فقط یک سری متد تعریف میکنیم و این متد ها هیچ بدنه و یا body ندارند.
✅در واقع فقط داریم یک دستور رو صادر میکنیم.
✅کلاس های دیگه که interface مورد نظر رو implement میکنن، باید تمام متد هایی که داخل اون interface تعریف شده رو پیاده سازی کنن.
🔥در واقع توی interface ما فقط امضای متد یا Signature اون رو مشخص میکنیم.
#capsule
🔥extends vs implement
4⃣
رسیدیم به اینجا که یک مجموعه از دستور ها رو یه جایی بنویسم و بقیه کلاس ها بتونن اون ها implement کنن.
🔥برای این منظور توی زبان های برنامه نویسی از مفهومی به نام interface ها استفاده میکنن.
✅توی یک interface ما فقط یک سری متد تعریف میکنیم و این متد ها هیچ بدنه و یا body ندارند.
✅در واقع فقط داریم یک دستور رو صادر میکنیم.
✅کلاس های دیگه که interface مورد نظر رو implement میکنن، باید تمام متد هایی که داخل اون interface تعریف شده رو پیاده سازی کنن.
🔥در واقع توی interface ما فقط امضای متد یا Signature اون رو مشخص میکنیم.
interface Contract{
void doSomething() ;
}
Class Concrete implement Contract {
void doSomething () {
// do your work...
}
}
#capsule
💊Capsule
🔥extends vs implement
5⃣
❌توی دارت چیزی به نام interface نداریم.
🔥برای این منظور از abstract کلاس ها استفاده میکنیم.
✅کلاس های abstract هم میتونن متد های معمولی داشته باشن (همراه با بدنه /مثل بقیه کلاس ها) و هم متد های بدون بدنه.
✅هم میتونیم یک abstract کلاس رو implement کنیم و هم میتونیم ازش extends کنیم.
❓ولی تفاوتش چیه؟ 🤔
🔥اگه extends کنیم، این کلاس مثل یک super class برای ما عمل میکنه و تمام ویژگی های اون رو به ارث میبریم و علاوه بر اون باید متد های بدون بدنه اون رو پیاده سازی کنیم.
🔥اگه اون رو implement کنیم، کلا دیگه موضوع به ارث بردن ویژگی های اون میره پی کارش و ما مجبور میشیم که تمام متد های اون رو (چه با بدنه و چه بدون بدنه) پیاده سازی کنیم.
در واقع حتی متد هایی از کلاس پدر که پیاده سازی هم دارن، نادیده گرفته میشن و باید همه متد هاش داخل کلاس مورد نظر پیاده سازی بشن.
❌ولی این مورد استفاده توصیه نمیشه.
✅اگه abstract کلاسمون همه متد هاش بدون بدنه بودن و شبیه به interface بود اون رو implement میکنیم.
✅و اگه هر دو نوع رو در خودش داشت ازش extends میکینم که بتونیم تمام ویژگی هاش رو به ارث ببریم و متد های بدون بدنش رو هم implement یا پیاده سازی کنیم.
#capsule
🔥extends vs implement
5⃣
❌توی دارت چیزی به نام interface نداریم.
🔥برای این منظور از abstract کلاس ها استفاده میکنیم.
abstract class Contract{
void doSomething() ;
}
Class Concrete implement Contract {
void doSomething () {
// do your work...
}
}
✅کلاس های abstract هم میتونن متد های معمولی داشته باشن (همراه با بدنه /مثل بقیه کلاس ها) و هم متد های بدون بدنه.
✅هم میتونیم یک abstract کلاس رو implement کنیم و هم میتونیم ازش extends کنیم.
❓ولی تفاوتش چیه؟ 🤔
🔥اگه extends کنیم، این کلاس مثل یک super class برای ما عمل میکنه و تمام ویژگی های اون رو به ارث میبریم و علاوه بر اون باید متد های بدون بدنه اون رو پیاده سازی کنیم.
🔥اگه اون رو implement کنیم، کلا دیگه موضوع به ارث بردن ویژگی های اون میره پی کارش و ما مجبور میشیم که تمام متد های اون رو (چه با بدنه و چه بدون بدنه) پیاده سازی کنیم.
در واقع حتی متد هایی از کلاس پدر که پیاده سازی هم دارن، نادیده گرفته میشن و باید همه متد هاش داخل کلاس مورد نظر پیاده سازی بشن.
❌ولی این مورد استفاده توصیه نمیشه.
✅اگه abstract کلاسمون همه متد هاش بدون بدنه بودن و شبیه به interface بود اون رو implement میکنیم.
✅و اگه هر دو نوع رو در خودش داشت ازش extends میکینم که بتونیم تمام ویژگی هاش رو به ارث ببریم و متد های بدون بدنش رو هم implement یا پیاده سازی کنیم.
#capsule
💊Capsule
🔥extends vs implement
6⃣
🔥اگه بخوایم یک abstract کلاس قابل ارث بری نباشه و کلاس های دیگه نتونن ازش extends کنن و فقط مجبور باشن که implement اش کنن و در واقع شکل interface به خودش بگیره از تکنیک زیر استفاده می کنیم.
❌البته کلاس هایی که توی یک فایل یا library هستن میتونن این دست انداز رو رد کنن و بازم extends کنن😝
#capsule
🔥extends vs implement
6⃣
🔥اگه بخوایم یک abstract کلاس قابل ارث بری نباشه و کلاس های دیگه نتونن ازش extends کنن و فقط مجبور باشن که implement اش کنن و در واقع شکل interface به خودش بگیره از تکنیک زیر استفاده می کنیم.
abstract class MyInterface{
const MyInterface._() ;
}
❌البته کلاس هایی که توی یک فایل یا library هستن میتونن این دست انداز رو رد کنن و بازم extends کنن😝
#capsule
💊Capsule
نام گذاری
برای نام گذاری متغیر ها , فانکشن ها , کلاس ها و ... توی زبان های برنامه نویسی از 4 الگوی مختلف استفاده میشه:
✔️snake_case
✔️camelCase
✔️PascalCase
✔️kebap-case
🔥هر زبان برنامه نویسی برای نام گذاری قوانین خودش رو داره و باید اون ها رو رعایت کنیم.
🔥توی دارت :
✅برای نام گذاری فایل ها از snake_case استفاده میکنیم.
home_page.dart
✅برای نام گذاری متغیر های و فانکشن ها از camelCase استفاده میکنیم.
var newUser;
User createUser(){}
✅برای نام گذاری کلاس ها از PascalCase استفاده میکنیم.
class HomePage{}
#capsule
نام گذاری
برای نام گذاری متغیر ها , فانکشن ها , کلاس ها و ... توی زبان های برنامه نویسی از 4 الگوی مختلف استفاده میشه:
✔️snake_case
✔️camelCase
✔️PascalCase
✔️kebap-case
🔥هر زبان برنامه نویسی برای نام گذاری قوانین خودش رو داره و باید اون ها رو رعایت کنیم.
🔥توی دارت :
✅برای نام گذاری فایل ها از snake_case استفاده میکنیم.
home_page.dart
✅برای نام گذاری متغیر های و فانکشن ها از camelCase استفاده میکنیم.
var newUser;
User createUser(){}
✅برای نام گذاری کلاس ها از PascalCase استفاده میکنیم.
class HomePage{}
#capsule
🔥زبان جدید گوگل
https://www.instagram.com/tv/CgzAvoRFjWs/?igshid=YmMyMTA2M2Y=
توی پست بالا، جادی در مورد زبان جدید گوگل صحبت میکنه
-کربن- زبان جدید و خیلی جدید گوگله که هنوز ابتدای راهه و دارن روش کار میکنن.
یک زبانی هست که میتونه با c++ مخلوط بشه و بخاطر جدید تر بودنش کار با c++ رو راحتر کنه.
پ.ن: این زبان رو من کار نکردم و فقط حرفهای جادی رو کپی و پیست کردم.
https://www.instagram.com/tv/CgzAvoRFjWs/?igshid=YmMyMTA2M2Y=
توی پست بالا، جادی در مورد زبان جدید گوگل صحبت میکنه
-کربن- زبان جدید و خیلی جدید گوگله که هنوز ابتدای راهه و دارن روش کار میکنن.
یک زبانی هست که میتونه با c++ مخلوط بشه و بخاطر جدید تر بودنش کار با c++ رو راحتر کنه.
پ.ن: این زبان رو من کار نکردم و فقط حرفهای جادی رو کپی و پیست کردم.