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

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

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
🔥اخبار Google IO 2023 رو میتونید از کانال زیر دنبال کنید:

@persian_flutter
Forwarded from Pure Coder (Mohammad Taheri)
⭕️آدرس سایت:
https://purecoder.ir

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

⭕️کانال:
@purecoder_ir

⭕️پشتیبانی:
@PureCoder_support
Pure Coder
❄️Dart - future releases ⭕️ ویژگی هایی که دارت برای کلاس ها در نظر گرفته یه سری هاش خوبه, ولی انقد زیاد شده که باید حواست باشه قاطی نکنی😅😅 ⭕️مثلن final class ها که توی جاوا هم بودن خیلی خوبه. ⭕️یا sealed چیز بدی نیست مثلن کسایی که از پکیج هایی مثل ٍdartz…
💥سال گذشته یه پست در مورد یکی از ویژگی های جدید Dart 3 که Class modifier ها بودن داشتیم.

🔥حالا که نسخه stable اش ریلیز شده و همه میتونن فلاترهاشون رو آپدیت و ازش استفاده کنن... وقتشه که این موارد رو خوب یاد بگیریم.

😍به زودی, خیلی زود, همه ی این ها رو خیلی ریز با هم یاد میگیریم.

@purecoder_ir
Forwarded from Persian Flutter (PayamZ)
انتخاب شما کدومه؟ 🤔

Bloc یا Riverpod

تو این مقاله توضیح دادم که چرا Riverpod برنده واقعی توی این مقایسه هست.

قطعا این دوتا پکیج میتونن نیاز های اولیه و ساده هر پروژه ای رو حل کنن اما من چندتا سناریو طراحی کردم که توی اونها نشون میدم Riverpod چقدر میتونه خوب تر عمل کنه.

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

اگه براتون مفید بود لایک یادتون نره

https://medium.com/snapp-x/riverpod-or-bloc-making-the-right-choice-for-your-real-world-app-7bc2e6b0b49
🔥Flutter Performance

⭕️هر فریم (frame) توی فلاتر ۷ فاز (phase) رو سپری میکنه تا در نهایت من و شما تصویر مربوط به اون فریم رو روی نمایشگر ببینیم :

1⃣User input
2⃣Animation
3⃣Build
4⃣Layout
5⃣Paint
6⃣Composite
7⃣Resterize

در ابتدا و توی مرحله ۱ انجین فلاتر (engine) ورودی های کاربر رو تشخیص میده و اون ها رو پردازش و در اختیار فریمورک (framework) قرار میده. (کالبک هایی داخل framework کال میشن)

برای مثال میتونیم به تاچ های کاربر اشاره کنیم.

🔸البته موارد دیگه ای رو هم میشه جزو user input بحساب اورد که ازش میگذریم.

مرحله ی ۲ تا ۶ به طور کامل توی فریمورک اتفاق میفته و هندل میشه.

🔸فریمورک به زبان دارت نوشته شده .

بعد از اون فریمورک یک سری کامند های گرافیکی رو به انجین میده و مرحله ی ۷ توی انجین انجام میشه.

🔸انجین به زبان c++ نوشته شده.

🔸همه ی کارهایی که داخل فریمورک انجام میشه توی ترد UI انجام میشه.

🔸مرحله اخر توی یه ترد دیگه انجام میشه.

@purecoder_ir
Forwarded from Persian Flutter (PayamZ)
از کدوم سرویس CI/CD بیشتر استفاده میکنید؟
Anonymous Poll
49%
GitHub actions
8%
Azure pipelines
7%
Code magic
36%
هیچکدام
ایا asynchronous programming توی دارت به صورت نرم افزاری هندل میشه یا یه سر و سری با سخت افزار هم داره (سی پی یو و ترد ها)
Anonymous Poll
54%
کاملن نرم افزاری
46%
سخت افزار هم دخیله (سی پی یو و ترد ها)
ایا در asynchronous programming چند تسک به طور همزمان (به طور همزمان و موازی) اجرا میشن؟
Anonymous Quiz
55%
آره
45%
نه
🔥دارت ۳، یک قدم رو به جلو

⭕️دارت ۳ با فیچر های جدید زیادی سرانجام چند روز پیش معرفی شد.

⭕️فیچر های جدید این نسخه رو میتونیم در موارد زیر خلاصه کنیم :

Records
Patterns
class modifiers

⭕️با class modifier ها میتونیم یه سر و سامون خوبی به کلاس هامون بدیم و بهتر مدیریتشون کنیم.

😍اگه از زیاد کد زدن خوشت نمیاد، خوشحال باش... چون دارت کلی سوپرایز جدید واست داره...

⭕️قراره pattern ها با دست های پشت پرده بهمون کمک کنن که کمتر کد بنویسیم. (خوشگل تر؟ 🤔🤔🤔 شاید...)

🟢با pattern ها به خصوص ساختار if و switch متحول میشه.

🟢میتونیم علاوه بر switch statement ها نوع دیگری از switch ها، یعنی switch expression ها رو هم از این به بعد داشته باشیم.

🟢با ترکیب قابلیت هایی که pattern بهمون میدن با sealed class ها میتونیم یه قدم رو به جلو برداریم و نیازمون به ابزار های خارجی رو کمتر کنیم.

⭕️حالا Record ها به دارت اضافه شدن، تا دارت از این نظر چیزی از زبان هایی مثل swift کم نداشته باشه.

🟢حتا Record ها رو اینجا خیلی منسجم تر میبینیم.

😍با این همه هنوز ابتدای راه ورژن ۳ هستیم و این موارد قراره جاده صاف کن بروز رسانی های جذاب اینده باشن.

@purecoder_ir
🔥دارت 3

⭕️یکی از فیچر های جدید و مهم دارت 3, class modifier ها هستن.

⭕️از این به بعد modifier های زیر رو داریم:

base
interface
final
sealed

⭕️همچنین از قبل abstract رو داشتیم.
abstract

⭕️علاوه بر اون توی دارت 3 یه کلاس دیگه نمیتونه به عنوان mixin استفاده بشه و برای اینکه یه کلاس بتونه mixin هم باشه باید از mixin class ها استفاده کنیم:
mixin class

⭕️استفاده از این modifier ها و به خصوص ترکیب کردنشون با هم ممکنه سخت بنظر برسه.

🟢تصویر بالا فرمول حالت های مختلف ترکیب مجازشون رو نشون میده.

سخته؟

@purecoder_ir
Pure Coder
🔥دارت 3 ⭕️یکی از فیچر های جدید و مهم دارت 3, class modifier ها هستن. ⭕️از این به بعد modifier های زیر رو داریم: base interface final sealed ⭕️همچنین از قبل abstract رو داشتیم. abstract ⭕️علاوه بر اون توی دارت 3 یه کلاس دیگه نمیتونه به عنوان mixin…
⭕️ورژن جدید دارت و class modifire ها واقعن یه پیشرفت خیلی خوب برای دارت بوده....ولی جای یه سری modifier ها هنوز توی دارت خالیه...

🟢برای مثال با استفاده از final میتونیم جلوی extend کردن و implement کردن یه کلاس رو بگیریم.

⚠️ولی درحال حاضر نمیتونیم از این modifier برای متد ها استفاده کنیم و نمیتونیم متد ها رو final کنیم و جلوی override شدنشون توی subclass ها رو بگیریم.

🟢برای مثال توی Template Method Pattern من دوست دارم templateMethoe ام رو final کنم که subclass ها نتونن override اش کنن و الگوریتم توسط abstract class تعریف بشه و بقیه نتونن تغییرش بدن...

✔️توی جاوا میشه متد ها رو هم final کرد و به این شکل از override شدنشون توسط subclass ها جلوگیری کرد...

✔️توی C++ و سی شارپ میشه متد رو non virtual کرد و در نتیجه امکان override شدن رو ازش گرفت... (پیش فرض همه متد ها non virtual هستن و در واقع میتونیم virtual اشون کنیم و به subclass ها قابلیت override کردن بدیم)

😒جای چنین چیزی توی دارت خالیه...

🤔احتمالن باید در اینده شاهد final برای متد ها هم باشیم... شایدم نه 🤷‍♂

@purecoder_ir
⭕️تا قبل از دارت ۳ برای اینکه یه کلاس خارج از library خودش قابلیت ارث بری نداشته باشه و فقط به عنوان اینترفیس بشه ازش استفاده کرد، کانستراکتور کلاس رو private میکردیم.

🟢چون subclass ها حتمن باید یکی از کانستراکتور های super class خودشون رو کال کنن، وقتی کانستراکتور های super class به حالت private در میومدن، عملن خارج از library خودش امکان extend کردن وجود نداشت و فقط باید به عنوان یه اینترفیس بهش نگاه میکردیم و implement اش میکردیم.

🟢پس با تعریف یه abstract class و همچنین private کردن کانستراکتورش عملن برای خارج نشینان یه اینترفیس میساختیم.

⭕️توی دارت ۳...

🟢 برای اینکه قابلیت ارث بری رو خارج از library از یه کلاس بگیریم از interface class استفاده میکنیم.

🟢همچنین برای اینکه بتونیم داخل کلاس متد های abstract داشته باشیم هم از abstract class استفاده میکنیم (مثل قبل و بدون تفاوت)

🟢کلاس های abstract توسط بیگانگان هم میتونن extend بشن و هم implement.

🟢نوع Interface class نمیتونن متدهای abstract داشته باشن.

🟢با ترکیب interface و abstract یعنی
abstract interface class

میتونیم کلاس هایی با متد های abstract داشته باشیم که در خارج library امکان extend شدن نداره و فقط میشه implement اش کرد.

@purecoder_ir
💥تخفیف 36 درصدی به مدت 6 روز💥

😍دوره ی Object Oriented Design رو میتونید تا 6 روز اینده با تخفیف 36 درصدی تهیه کنید.

مفاهیم Object Oriented
اصول SOLID
مفاهیم معماری Clean

⭕️لینک دوره در سایت:
https://purecoder.ir/course/object-oriented-design-part-one/

⭕️دوره تا فصل 9 تکمیل شده و 1 فصل از دوره باقی مونده.

⭕️برای ثبت نام در دوره یا مشاوره در مورد دوره به ایدی زیر پیام بدید:
@PureCoder_support

💥💥💥💥💥💥💥💥💥

@purecoder_ir
Pure Coder pinned a photo
🔥Dart 3
🔥Records

⭕️یکی از اپدیت های جدید و البته خوب دارت توی ورژن ۳ Record ها هستن.

Records are an anonymous, immutable, aggregate type. Like other collection types, they let you bundle multiple objects into a single object. Unlike other collection types, records are fixed-sized, heterogeneous, and typed.

⭕️توی این تعریف داره ویژگی های Record ها رو بیان میکنه :
Immutable type
Aggregate type
Anonymous type

⭕️پس با یه Aggregation (مثل لیست ها یا...) طرف هستیم.

ولی.....

⭕️از تفاوت هاشون با کالکشن ها (مثل لیست ها) اینه که

🔥اولن fixed sized هستن

🔥و خیلی خیلی مهمتر اینکه توی کالکشن ها وقتی که چنتا type ناهمگون بریزیم، مثلن توی یه لیست هم int و هم string بریزم... Type safety رو از دست میدیم. برای مثال باید لیست رو اینجوری تعریف کنیم

List<Object> myList

که نتیجش از دست دادن type safety هست.

ولی توی Record ها با وجود داشتن type های مختلف توی یه aggregation در کنار هم , type safety رو از دست نمیدیم.

(String, int) record;

record = ('A string', 123);

@purecoder_ir
🔥Dart 3
🔥Records and Patterns

⭕️از قبل میدونم که توی دارت Method Argument ها میتونن دو حالت داشته باشن :
Positioned
Named

⭕️حالا Recored ها هم دقیقن شبیه به Method Argument ها میتونن همین دو حالت رو داشته باشن.

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

🟢اون ها میگن که توی زبان های نام برده با دو مفهوم روبرو هستیم :
Tuple
Record

که Tuple ها به صورت Positioned هستن و Record ها به صورت Named

🟢حالا دارت با ترکیب این ها با هم منسجم تر از زبان های یاد شده به نظر میرسه...

🔥به کدهای بالا (تصاویر) که با فلگ های Before و After مشخص شدن توجه کن...

🔥یکی از ویژگی هایی که قراره در اینده داشته باشیم رو میتونی توی این کدها ببینی که با معجزه ی Record ها و Pattern Matching در اینده خواهیم داشت.

😍استفاده از if وسط ویجت!!!
قبلن با لیست ها این کارو میکردیم ولی قراره در اینده با Record ها این کارو کنیم 😍

@purecoder_ir
🔥Dart 3
🔥Class Modifiers

⭕️توی دارت هر library از یک یا چند فایل (.dart) تشکیل شده.

🟢اون فایلی که داری توش کد میزنی رو میگن library
🟢میتونی چند تا فایل رو هم کنار هم بگذاری و همشون با هم یه library واحد رو تشکیل بدن... که برای این کار باید از part و part of استفاده کنی....

⭕️ورژن جدید دارت و class modifier هاش (معمولن) تو رو داخل library خودت محدود نمیکنن.

🟢برای نمونه اگه یه interface class تعریف کردی تا قابلیت extend شدن رو ازش بگیری... همچنان توی library که خود کلاس توش قرار داره میتونی extend اش کنی... ولی خارج از library جلوت رو میگیره و فقط میتونی implement اش کنی...

🟢یا اگه یه base class تعریف کردی... خارج از library دیگه نمیتونی implement اش کنی و فقط باید extend اش کنی.. ولی داخل library که خود کلاس تعریف شده همچنان میتونی هم extend اش کنی و هم implement.

🔥اینکه چرا این این modifier ها داخل library محدودیت ایجاد نمیکنن و فقط خارج library محدودیت ایجاد میکنن، کاملن موجه هست...پس نگین چرا اینجوری شده 😅😅 چون که کاملن با دلیل هست...

🔥اینکه چرا مثل جاوا و سی شارپ یه ضرب یه چیزی به اسم interface معرفی نکردن و باید بگی interface class هم دلیل داره و قابل توجیه هست برای این ورژن...

@purecoder_ir
🔥Pure Talk

🔥میتونید توی گروه زیر عضو بشید و توی topic های مختلف, بحث های تخصصی مورد نظر خودتون رو داشته باشید...

@PureTalk_gp

🔥از جمله ی topic هایی که در حال حاضر ساخته شده Clean Code هست که میتونید بحث های جذابی رو داخلش داشته باشید و یا سوالات و ابهامات خودتون رو بپرسید، از جمله :
TDD
Refactoring
Architecture
Design Principles
Design Patterns
....

@purecoder_ir