Pure Coder
787 subscribers
189 photos
30 videos
8 files
150 links
⭕️آدرس سایت:
https://purecoder.ir

⭕️گروه پرسش و پاسخ:
@purecoder_gp

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
💊Capsule
🔥extends vs implement
6⃣

🔥اگه بخوایم یک abstract کلاس قابل ارث بری نباشه و کلاس های دیگه نتونن ازش extends کنن و فقط مجبور باشن که implement اش کنن و در واقع شکل interface به خودش بگیره از تکنیک زیر استفاده می کنیم.

abstract class MyInterface{

const MyInterface._() ;

}


البته کلاس هایی که توی یک فایل یا library هستن میتونن این دست انداز رو رد کنن و بازم extends کنن😝
#capsule
PYsvgTz.png
2 MB
🔥Design Patterns🔥

#capsule
💊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++ رو راحتر کنه.

پ.ن: این زبان رو من کار نکردم و فقط حرفهای جادی رو کپی و پیست کردم.
🔥Challenge

ابسترکشن (abstraction) رو توضیح بدید.


کلاس abstract و interface و از این جور داستان ها مد نظر نیست.

مفهومش توی دنیای واقعی چیه (دنیای واقعی، خارج از برنامه نویسی)

میتونید با مثال هایی مفهومش رو توی دنیای واقعی بیان کنید و بعد بگید که برنامه نویس ها چطوری از این مفهوم الگو گرفتن .

و بعد از تحلیلتون به این سوال پاسخ بدید

آیا abstraction فقط فقط مخصوص OOP یا برنامه نویسی شی گرا هست؟ یا بقیه پارادایم های برنامه نویسی هم دارن از این مفهوم استفاده میکنن؟ چرا و چگونه؟

#challenge
#advanced
میگن یوتیوب مثل دانشگاس

ولی یه جمله دیگه هم هست که میگه دانشگاه به درد نمیخوره و چیزی ازش در نمیاد

خلاصه حواستون باشه 😅😅
🔥Challenge

1⃣یه کلاس یوزر داریم که یه فیلد ایمیل داره و یه instance field داخل کلاس از نوع bool داریم که نشون میده ایمیل ولید هست یا نه...

چه اسمی برای این فیلد انتخاب میکنی؟

isValid
emailIsValid
isEmailValid
isValidEmail
hasValidEmail
🤔other...

2⃣یه فانکشن تک و تنها (خارج از هر کلاسی داریم) که قراره یه استرینگ به عنوان ورودی بگیره و یه bool برگردونه که مشخص میکنه این استرینگ یک ادرس ایمیل معتبر هست یا نه...

چه اسمی برای این فانکشن انتخاب میکنی؟

isValid
validate
validateEmail
emailIsValid
isEmailValid
isValidEmail
hasValidEmail
🤔other...

🔥هر گزینه ای انتخاب کردی با ذکر دلیل..
🔥میتونی بین گزینه ها مقایسه انجام بدی و بگی این چرا بده و اون چرا بهتره و... (این مدل پاسخ خیلی خوبه 😍)
🔥میتونی چند گزینه انتخاب کنی یا گزینه دیگه ای پیشنهاد بدی (با ذکر دلیل و تحلیل)


#challenge
کدوم یک از دیزاین پترن های زیر نقش اساسی تر از بقیه رو در فلاتر ایفا میکنه؟
Anonymous Quiz
18%
Template method
40%
Observer
18%
Composite
6%
Visitor
18%
Decorator
Pure Coder
کدوم یک از دیزاین پترن های زیر نقش اساسی تر از بقیه رو در فلاتر ایفا میکنه؟
هر ۵ مورد توی فلاتر استفاده شدن(+ بقیه دیزاین پترن ها)

یکی از بقیه اساسی تره
🤔بحث

توی زبان JAVA یه مفهومی داریم به اسم inner class

به این صورت که میتونیم داخل یک کلاس , یک کلاس دیگه تعریف کنیم.

public class Order{
private Totals totals;

private class Totals{

private double total;
private double discount;
}

}

توی زبان Dart چنین امکانی وجود نداره!!

به نظر شما چنین امکانی توی زبان Dart لازم هست ؟

#challenge
🔥Flutter 3.3

یکی از مواردی که توی این نسخه روش مانور دادن موتور گرافیکی جدید هست

Impeller

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

همچنین میتونه از قابلیت های جدید پردازنده های گرافیکی (سخت افزار) به خوبی استفاده کنه که یک مزیته.

این تغییرات البته توی انجین اتفاق افتاده (c++) و کدی که من و شما میزنیم تحت تاثیر قرار نمیگیره.

🔥برای استفاده از این قابلیت و استفاده از impeller میتونید از کامند زیر برای ران کردن اپ استفاده کنید :
flutter run enable-impeller

یا توی اندروید و فایل مانیفست این رو ست کنید

<meta-data android:name="io.flutter.embedding.android.EnableImpeller"
android:value="true" />

🟢هنوز در دست توسعه هست البته.

برای اطلاعات بیشتر و تنظیمات ios هم لینک زیر رو ببینید.

🤔تست کنید ببیند ایا واقعا ادعاشون صادقه 😁

https://github.com/flutter/flutter/wiki/Impeller
🔥Challenge

🟢اگه یک متد رو داخل یه کلاس با _ پرایوت کنیم، بقیه کلاس ها یا فانکشن هایی که داخل اون فایل هستن هم میتونن از اون متد استفاده کنن.

چه کار کنیم که یک متد فقط و فقط و فقط داخل همون کلاسی که تعریف شده قابل استفاده باشه و نه کلاس ها و فانکشن های دیگه اون فایل یا library ؟

#challenge
#dart_challenge
🔥قبل از فلاتر اندروید نیتیو کار میکردم

اونجا هر View (تقریبا شبیه ویجت فلاتر) که میساختیم یه ایدی بهش میدادیم...

وقتی فلاتر رو شروع کردم (سال ۹۷)

اول اول اول فکر میکردم که key ها توی فلاتر شبیه به ایدی توی view های اندروید عمل میکنن و باید به همه ویجت ها key بدیم که بعدا با اون key بتونیم پیداشون کنیم و هر کاری خواستیم باهاشون انجام بدیم.

توی اندروپد از ایدی برای جستجو کردن ویوی مورد نظر بین ویوها استفاده می کردیم.

🔥ولی key ها توی فلاتر کاربرد خیلی خاص و خیلی خیلی محدودی دارن.

🔥🔥خیلی خیلی محدود ولی حیاتی و مهم.

😍توی پست های بعدی با key ها و انواعشون اشنا میشیم و کاربرد هاشون رو بررسی میکنیم.

پ.ن: توی این پست ها فقط کاربرد ها رو میگم و در مورد اتفاقاتی که توی بک گراند میوفته و بلایی که سر key ها و ویجت ها و... میاد صحبت نمیکنم (چون که نیاز به بحث طولانی داره)
💊Capsule
🔥Key
1⃣

🟢دو نوع Key توی فلاتر داریم :

GlobalKey
LocalKey

✔️هر دو subclass کلاس Key هستن.

تفاوت اول و مهم این دو در این هست که GlobalKey باید توی کل اپ unique باشه.

یعنی اگه به یه ویجت توی یک فریم یه GloablKey دادید، دیگه نمیتونید از اون GlobalKey برای ویجت دیگه و توی همون فریم استفاده کنید.

استفاده از یک GlobalKey یکسان برای دو ویجت متفاوت در یک فریم یکسان ممنوع.

ولی LocalKey ها اینطور نیستن و شما میتونید برای دو ویجت متفاوت و در یک فریم از یک LocalKey یکسان استفاده کنید.

🔥به شرطی که :

✔️اون دو ویجت فرزند مشترک یک ویجت پدر نباشند.

مثلا هر دو نباید فرزند مشترک یک column یا یک stack باشن.

🔥علاوه بر اون اگه از Navigator 2 استفاده میکنید باید به page هاتون LocalKey بدید و نمیتونید از یک LocalKey یکسان برای دو page مختلف استفاده کنید.

#capsule
#advanced
💊Capsule
🔥GlobalKey
2⃣

🟢اولین کاربرد مهم GlobalKey برای این هست که به context یک ویجت و همچنین به state اون (در صورتی که ویجت استیت فول) باشه، در بقیه قسمت های اپ دسترسی داشته باشیم.

با استفاده از دو variable به نام های
✔️currentContext
✔️currentState
میتونیم به این منظور برسیم.

🔥علت اینکه توی نام از current استفاده شده چون که این موارد میتونن در طول lifetime یک GlobalKey تغییر کنن.

مثال)
با دادن GlobalKey به نویگیتور به جای استفاده از
Navigator.of(context).push
میگیم
navigatorKey.currentState.push

🔥این کار از لحاظ پرفرمانس عملکرد بهتری داره.

🟢به همین صورت میتونید به ویجت مورد نظر GlobalKey بدید و در بقیه قسمت های اپ به state اون دسترسی پیدا کنین و متد های داخل state اش رو کال کنید (مثل نویگیتور)
یا به contextاش دسترسی پیدا کنید.

بیش از اندازه استفاده نکنید (مطابق نیاز)

#capsule
#advanced
💊Capsule
🔥GlobalKey
3️⃣

🟢در مورد کاربرد اول GlobalKey گفتیم که میتونیم با استفاده از اون به context و state یک ویجت برسیم.

🔥با استفاده از state میتونیم به متد های داخل state ویجت مورد نظر دسترسی داشته باشیم و کالشون کنیم.

مثلا برای Navigator , Scaffold و ... میتونه مفید باشه.

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

خیلی مواقع راه حل استفاده از استیت منجمنت هست.

🔥با استفاده از context هم میتونیم کار هایی از قبیل :‌

✔️دسترسی به renderObject ویجت مورد نظر

✔️نوتیف فرستادن به وسیله context

✔️و...

رو انجام داد.
#capsule
Pure Coder
Screenshot from 2022-09-16 12-14-56.png
این فایل رو میتونید توی قسمت snippets های vscode کپی کنید و همون طور که توی عکس نشون دادم از short cut هاش برای نوشتن unit test ها استفاده کنید.
🔥برای اینکه توی گیت یک یا چندcommit قدیمی رو ویرایش کنید و message اون ها رو تغییر بدید میتونید از مقاله زیر استفاده کنید

https://linuxize.com/post/change-git-commit-message/

😍این کار برای تر و تمیز کردن commit های قدیمی خیلی به درد میخوره.

مثلا من میخواستم یک سری commit های قدیمی که داشتم رو طبق قوانینی که توی پست زیر قبلا توی کانال توضیح دادم ویرایش کنم.

https://t.me/FlutterChallenges/354