Forwarded from Fluttery's Journey
خودمون RenderObject ساختیم😍😍
بدون استفاده از کلاس RenderObject فلاتر
از بیس و اختصاصی برای توضیح مفاهیم...
بدون استفاده از ویجت ها و امکانات فریمورک و فقط با api های Dart Ui یه UI و Animation ساده ساختیم.
بدون استفاده از کلاس RenderObject فلاتر
از بیس و اختصاصی برای توضیح مفاهیم...
بدون استفاده از ویجت ها و امکانات فریمورک و فقط با api های Dart Ui یه UI و Animation ساده ساختیم.
🔥Event Loop
https://purecoder.ir/fluttry-journy-dart-event-loop/
از سری دروس رایگان دوره ی فلاترمون event Loop در دارت هست که از لینک بالا میتونی دنبالش کنی 😍
حتمن بخونش تا با نحوه ی هندل شدن async Task ها و event queue و microtask ها توی دارت اشنا بشی
پشتیبانی:
@purecoder_support
@purecoder_ir
https://purecoder.ir/fluttry-journy-dart-event-loop/
از سری دروس رایگان دوره ی فلاترمون event Loop در دارت هست که از لینک بالا میتونی دنبالش کنی 😍
حتمن بخونش تا با نحوه ی هندل شدن async Task ها و event queue و microtask ها توی دارت اشنا بشی
پشتیبانی:
@purecoder_support
@purecoder_ir
پیام یکی از دوستانی که توی دوره ی فلاتر شرکت کرده بود
مربوط به قسمتی هست که توی فصل ۱ یه مثال از متد بازگشتی رو با روش TDD حل کردیم و روحش ارضا شد 😂😂😝😝
حتا توی دوره بک گراند فلاتر هم ولتون نمیکنم و شده یه گریز کوچیکی به تست میزنم 😝😝
@purecoder_ir
مربوط به قسمتی هست که توی فصل ۱ یه مثال از متد بازگشتی رو با روش TDD حل کردیم و روحش ارضا شد 😂😂😝😝
حتا توی دوره بک گراند فلاتر هم ولتون نمیکنم و شده یه گریز کوچیکی به تست میزنم 😝😝
@purecoder_ir
من کامیت های گیت رو معمولن اینجوری متمایز میکنم:
✅feature
اینا کامیت هایی هستن که معمولن مقدار زیادی کد از لایه های مختلف رو شامل میشن (تست + پروداکشن کد) و همراه با اون یه feature جدید به نرم افزار اضافه میشه.
اینا بزرگترین کامیت ها هستن و کد زیادی رو شامل میشن.
🔥برای تست ها کامیت جدا نمیزنم و همه رو باهم کامیت میکنم (تست + پروداکشن کد)
✅Behavior
اینا مربوط به تغییراتی هستن که observable behavior سیستم رو برای end user تغییر میده, ولی نمیشه اونا رو یه feature به حساب اورد.
برای مثال وقتی که رسپانسی که یه api برمیگردونه رو تغییر میدم.
✅Refactor
وقتی که استراکچر کد (پروادکشن کد یا تست) رو تغییر میدم بدون اینکه observable behavior اش تغییر کنه.
اینا معمولن شامل مقدار کمی تغییرات میشن.
✅style
وقتی کد رو فرمت میکنم, مثل پاک کردن فضاهای خالی و ... .
🔥ریفکتور کردن رو به وقت خاص موکول نمیکنم و موقع اضافه کردن یه فیچر جدید مقدار زیادی رفیکتور انجام میشه. ولی اگه بعد از اضافه شدن فیچر, نیاز به ریفکتور بود (که حتمن هست) پای کامیت های تایپ ریفکتور میاد وسط.
✅Chore
یه پکیجی، دپندنسی، چیزی اضافه کردم
معمولن کوچولوترین کامیت ها هستن.
@purecoder_ir
✅feature
اینا کامیت هایی هستن که معمولن مقدار زیادی کد از لایه های مختلف رو شامل میشن (تست + پروداکشن کد) و همراه با اون یه feature جدید به نرم افزار اضافه میشه.
اینا بزرگترین کامیت ها هستن و کد زیادی رو شامل میشن.
🔥برای تست ها کامیت جدا نمیزنم و همه رو باهم کامیت میکنم (تست + پروداکشن کد)
✅Behavior
اینا مربوط به تغییراتی هستن که observable behavior سیستم رو برای end user تغییر میده, ولی نمیشه اونا رو یه feature به حساب اورد.
برای مثال وقتی که رسپانسی که یه api برمیگردونه رو تغییر میدم.
✅Refactor
وقتی که استراکچر کد (پروادکشن کد یا تست) رو تغییر میدم بدون اینکه observable behavior اش تغییر کنه.
اینا معمولن شامل مقدار کمی تغییرات میشن.
✅style
وقتی کد رو فرمت میکنم, مثل پاک کردن فضاهای خالی و ... .
🔥ریفکتور کردن رو به وقت خاص موکول نمیکنم و موقع اضافه کردن یه فیچر جدید مقدار زیادی رفیکتور انجام میشه. ولی اگه بعد از اضافه شدن فیچر, نیاز به ریفکتور بود (که حتمن هست) پای کامیت های تایپ ریفکتور میاد وسط.
✅Chore
یه پکیجی، دپندنسی، چیزی اضافه کردم
معمولن کوچولوترین کامیت ها هستن.
@purecoder_ir
بهترین زبان برنامه نویسی برای یادگیری مباحث جامع و مشترک مثل دیزاین پترن ها, معماری, تست نویسی و ... زبان جاوا هست و لاغیر.
بدترین زبان هم جاوا اسکریپته. خدا لعنت کنه سازندش رو.
بدترین زبان هم جاوا اسکریپته. خدا لعنت کنه سازندش رو.
Forwarded from Jadi Var Log
هاه.. اومدم یه سوال ساده الگوریتمی در حوزه ارایهها حل کنم ولی راستش رو بخواین اگر خودم با خودم مصاحبه میکردم، نمره قبولی نمی دادم ((:
https://youtu.be/Xne03-Owc84
https://youtu.be/Xne03-Owc84
YouTube
الگوریتم برای فان و مصاحبه برنامه نویسی:احتمالا رد شدن در سوال ساده حذف ارایهها از لیست با وجود حلش
در این سوال، با یه مساله نسبتا ساده در رده آرایهها و لیستها طرف هستیم: میخوایم با داشتن یه لیست و یه عدد، همه مواردی از اون عدد که در لیست هستن رو در همون لیست حذف کنیم و بعد تعداد اعدادی که با اون عدد برابر نیستن رو برگردونیم. ظاهر سوال ساده است؛ من هم…
Pure Coder
هاه.. اومدم یه سوال ساده الگوریتمی در حوزه ارایهها حل کنم ولی راستش رو بخواین اگر خودم با خودم مصاحبه میکردم، نمره قبولی نمی دادم ((: https://youtu.be/Xne03-Owc84
جادی شروع کرده توی یوتیوبش مسائل الگوریتمی حل میکنه و هر چند وقت یه بار یه قسمت جدید میذاره
حتمن دنبال کنید
خودم فرصت و حوصله کنم حتمن پیگیری میکنم ...
حتمن دنبال کنید
خودم فرصت و حوصله کنم حتمن پیگیری میکنم ...
🔥implicit cast
یکی از امکاناتی که توی سی شارپ هست و خیلی جاها کاربردیه و اگه دارت هم چنین چیزی اضافه کنه خیلی خوب میشه implicit cast هست:
یکی از امکاناتی که توی سی شارپ هست و خیلی جاها کاربردیه و اگه دارت هم چنین چیزی اضافه کنه خیلی خوب میشه implicit cast هست:
public static implicit operator Result<T, E>(T value)
{
return Result.Success<T, E>(value);
}
public static implicit operator Result<T, E>(E error)
{
return Result.Failure<T, E>(error);
}
// Usage
public static Result<Money, Error> Create(long amount)
{
if (amount < 0)
return new MoneyAmountIsNegative();
return new Money(amount);
}
Forwarded from OOD Part 1
سوال
اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود
بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو مشخص میکرد.
فرض کن بجای این اینترفیس این مدلی عمل کینم:
ینی برای input جنریک در نظر نگیریم و اونو از جنس object بگیریم
حالا کلاسی که پیاده سازیش میکنه اینجوری عمل میکنه
ینی وروی جنس ابجکت رو به جنس دلخواه خودش cast میکنه تا بتونه باهاش کار کنه..
❓اینجا کدوم اصل سالید نقض شده ؟
😁به نام گذاری ها و ...گیر ندید..کد رو توی تلکرام نوشتم
فقط سوال رو جواب بدید😁
اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود
interface class Usecaee<TInput, TResult>{
Future<TResult> execute(TInput input);
}
بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو مشخص میکرد.
فرض کن بجای این اینترفیس این مدلی عمل کینم:
interface class Usecaee< TResult>{
Future<TResult> execute(object input);
}
ینی برای input جنریک در نظر نگیریم و اونو از جنس object بگیریم
حالا کلاسی که پیاده سازیش میکنه اینجوری عمل میکنه
class AddNewProductCategory implements Usecase<void> {
Futue<void> execute(object input) {
var params = input as AddNewCategoryParams;
}
}
ینی وروی جنس ابجکت رو به جنس دلخواه خودش cast میکنه تا بتونه باهاش کار کنه..
❓اینجا کدوم اصل سالید نقض شده ؟
😁به نام گذاری ها و ...گیر ندید..کد رو توی تلکرام نوشتم
فقط سوال رو جواب بدید😁
Pure Coder
سوال اگه معماری کلین رو به یاد داشته باشی یه دونه کلاس abstract یا اینترفیس برای یوزکیس ها میساختیم که جنریک هم بود interface class Usecaee<TInput, TResult>{ Future<TResult> execute(TInput input); } بعد هر کلاسی این رو impl میکرد تایپ. Tinput رو…
جواب اصل سوم بود
Liskov Substitution
هیچکس جدیش نمیگیره این بچه رو 😂😂
Liskov Substitution
هیچکس جدیش نمیگیره این بچه رو 😂😂
مهمترین اصلی که هر برنامه نویسی باید همه جا جلوی چشمش باشه YAGNI هست
You Aren't gonna need it.
خیلی خیلی میبینیم که طرف به بهونه رعایت DIP (اص 5 سالید) توی پروژش برای هر کلاسی یه اینترفیس هم میزنه:
One interace
One implementation
یه دونه اینترفیس و فقط یه دونه implementation.
مثلن
ProductRepositpryInterface
ProductRepositpryimpl
ProductDatasourceInterface
ProductDatasourceImpl
😱😱😱😱😱😱😱
یا مثلن میبینیم که یه Repository میخواد بنویسه و مثلن چندین متد داخلش بگذاره:
getById
getAll
getWhere
save
...
و برای هر کدوم این متد ها یه اینترفیس جدا میزنه و میگه میخوام ISP (اصل 4 سالید) رو رعایت کنم!!
خب با رعایت کردنش میخوای چه چیزی رو بدست بیاری؟😅
این اصول رو که برای قشنگی ابداع نکردن که مثل نقل و نبات بریزیم توی کدمون😅
باید نیاز بشه تا استفاده کنیم و هر کدوم جایگاه خودشون رو دارن و استفاده ی بی مورد بدتر complexity پروژه رو بیشتر میکنه.
نکنید آقا نکنید 😅😅
@purecoder_ir
You Aren't gonna need it.
خیلی خیلی میبینیم که طرف به بهونه رعایت DIP (اص 5 سالید) توی پروژش برای هر کلاسی یه اینترفیس هم میزنه:
One interace
One implementation
یه دونه اینترفیس و فقط یه دونه implementation.
مثلن
ProductRepositpryInterface
ProductRepositpryimpl
ProductDatasourceInterface
ProductDatasourceImpl
😱😱😱😱😱😱😱
یا مثلن میبینیم که یه Repository میخواد بنویسه و مثلن چندین متد داخلش بگذاره:
getById
getAll
getWhere
save
...
و برای هر کدوم این متد ها یه اینترفیس جدا میزنه و میگه میخوام ISP (اصل 4 سالید) رو رعایت کنم!!
خب با رعایت کردنش میخوای چه چیزی رو بدست بیاری؟😅
این اصول رو که برای قشنگی ابداع نکردن که مثل نقل و نبات بریزیم توی کدمون😅
باید نیاز بشه تا استفاده کنیم و هر کدوم جایگاه خودشون رو دارن و استفاده ی بی مورد بدتر complexity پروژه رو بیشتر میکنه.
نکنید آقا نکنید 😅😅
@purecoder_ir
Forwarded from Fluttery's Journey
ویجت تری و المنت تری و رندر تری نمادینی که توی فصل 4 دوره میسازیم و از راس درخت تا پایین دونه دونه المنت ها رو میسازیم و پایین میایم و لایف سایکلشون رو بررسی میکنیم.
این یه دیاگرام نمادین برای درک بهتر و کم کردن پیچیدگی هست.
توی فصل های بعدی یه مثال واقعی از یه ویجت تری واقعی هم میزنیم.
@Fluttery_journey
این یه دیاگرام نمادین برای درک بهتر و کم کردن پیچیدگی هست.
توی فصل های بعدی یه مثال واقعی از یه ویجت تری واقعی هم میزنیم.
@Fluttery_journey
۲۰ و چند سال پیش که هنوز جاوا و سی شارپ Generic Type نداشتن، چقد برنامه نویس ها بدبخت بودن 😂😂😂