Forwarded from Fluttery's Journey
🔥فصل ۱۵ دوره ی فلاتر تکمیل شد.
🟢توی این فصل در مورد Binding ها صحبت کردیم. فسمت اول فصل در مورد ساختار کلی Binding ها صحبت شد.
📖قسمت ۱: مروری بر ساختار Binding ها
🟢بعد از اون بحث مفصلی در مورد Scheduler Binding داشتیم و نکاتش رو به ریز بررسی کردیم:
📖قسمت ۲: مروری بر مفهوم فریم و نحوه ی Schedule کردن یک فریم جدید
📖قسمت ۳: جانمایی فازهای مختلفی که یک فریم فلاتری طی میکنه!!!
📖قسمت ۴: Transient, Persistent, and Post-frame callbacks
📖قسمت ۵: Scheduler Phase ها چی هستن و چیا هستن؟
📖قسمت ۶: نگاهی عمیق به Scheduler Binding - قسمت ۱
📖قسمت ۷: نگاهی عمیق به Scheduler Binding - قسمت ۲
📖قسمت ۸: نگاهی عمیق به Scheduler Binding - قسمت ۳
🟢گام بعدی به سراغ Renderer Binding رفتیم.
📖قسمت ۹: نگاهی عمیق به Renderer Binding
🟢قسمت های باقی مونده رو هم به Widgets Binding و به خصوص Widgets Binding Observer اختصاص دادیم و نگاه کوچولویی هم به ویجت های MediaQuery و MaterialApp داشتیم و یه نکته ی کوچیک رو دربارشون بررسی کردیم.
📖قسمت ۱۰: Widgets Binding Observer - قسمت ۱
📖قسمت ۱۱: Widgets Binding Observer - قسمت ۲
📖قسمت ۱۲: Widgets Binding Observer - قسمت ۳
📖قسمت ۱۳: نگاهی گذرا به Media Query Widget
📖قسمت ۱۴: یک نکته ی کوچک در مورد WidgetsApp (MaterialApp)
📖قسمت ۱۵: بررسی Widgets Binding
@purecoder_ir
🟢توی این فصل در مورد Binding ها صحبت کردیم. فسمت اول فصل در مورد ساختار کلی Binding ها صحبت شد.
📖قسمت ۱: مروری بر ساختار Binding ها
🟢بعد از اون بحث مفصلی در مورد Scheduler Binding داشتیم و نکاتش رو به ریز بررسی کردیم:
📖قسمت ۲: مروری بر مفهوم فریم و نحوه ی Schedule کردن یک فریم جدید
📖قسمت ۳: جانمایی فازهای مختلفی که یک فریم فلاتری طی میکنه!!!
📖قسمت ۴: Transient, Persistent, and Post-frame callbacks
📖قسمت ۵: Scheduler Phase ها چی هستن و چیا هستن؟
📖قسمت ۶: نگاهی عمیق به Scheduler Binding - قسمت ۱
📖قسمت ۷: نگاهی عمیق به Scheduler Binding - قسمت ۲
📖قسمت ۸: نگاهی عمیق به Scheduler Binding - قسمت ۳
🟢گام بعدی به سراغ Renderer Binding رفتیم.
📖قسمت ۹: نگاهی عمیق به Renderer Binding
🟢قسمت های باقی مونده رو هم به Widgets Binding و به خصوص Widgets Binding Observer اختصاص دادیم و نگاه کوچولویی هم به ویجت های MediaQuery و MaterialApp داشتیم و یه نکته ی کوچیک رو دربارشون بررسی کردیم.
📖قسمت ۱۰: Widgets Binding Observer - قسمت ۱
📖قسمت ۱۱: Widgets Binding Observer - قسمت ۲
📖قسمت ۱۲: Widgets Binding Observer - قسمت ۳
📖قسمت ۱۳: نگاهی گذرا به Media Query Widget
📖قسمت ۱۴: یک نکته ی کوچک در مورد WidgetsApp (MaterialApp)
📖قسمت ۱۵: بررسی Widgets Binding
@purecoder_ir
👍5❤2
🔥Flutter & Layerd Architecture
✅فلاتر از یک معماری لایه ای یا به عبارتی Layerd Architecture استفاده میکنه.
✅توی این لایه ها foundation کف کف قرار میگیره و همه ی لایه های دیگه میتونن بهش دسترسی داشته باشن و لایه های material و cupertino بالای بالا قرار میگیرن.
✅برای مثال لایه ی Widgets نسبت به rendering توی سطح بالاتری قرار میگیره و میتونه از rendering استفاده کنه ولی rendering به widgets دسترسی نداره. به همین شکل material و cupertino به widgets دسترسی دارن ولی widgets به اونا دسترسی نداره.
✅اصول معماری لایه ای توی فلاتر اینجوری چیده نشده که هر لایه فقط و فقط به لایه ی زیری خودش دسترسی داشته باشه. بلکه یکم چفت و بست ها شل تر هست و هر لایه میتونه به همه ی لایه های زیرین خودش دسترسی پیدا کنه. البته این شل بودن ایراد نیست و نیاز توسعه بوده.
⚠️پ.ن: فریمورک ها هم باید معماری داشته باشن و روی اصول جلو برن. وگرنه از هم میپاشن.
پ.ن: همه ی پوشه های توی تصویر نماینده ی یک لایه ی مجزا نیستن.
@purecoder_ir
✅فلاتر از یک معماری لایه ای یا به عبارتی Layerd Architecture استفاده میکنه.
✅توی این لایه ها foundation کف کف قرار میگیره و همه ی لایه های دیگه میتونن بهش دسترسی داشته باشن و لایه های material و cupertino بالای بالا قرار میگیرن.
✅برای مثال لایه ی Widgets نسبت به rendering توی سطح بالاتری قرار میگیره و میتونه از rendering استفاده کنه ولی rendering به widgets دسترسی نداره. به همین شکل material و cupertino به widgets دسترسی دارن ولی widgets به اونا دسترسی نداره.
✅اصول معماری لایه ای توی فلاتر اینجوری چیده نشده که هر لایه فقط و فقط به لایه ی زیری خودش دسترسی داشته باشه. بلکه یکم چفت و بست ها شل تر هست و هر لایه میتونه به همه ی لایه های زیرین خودش دسترسی پیدا کنه. البته این شل بودن ایراد نیست و نیاز توسعه بوده.
⚠️پ.ن: فریمورک ها هم باید معماری داشته باشن و روی اصول جلو برن. وگرنه از هم میپاشن.
پ.ن: همه ی پوشه های توی تصویر نماینده ی یک لایه ی مجزا نیستن.
@purecoder_ir
🔥11❤1
🌴Flutter Trees
😱توی فلاتر درخت زیاد داریم و چیزهای زیادی وجود دارن که به صورت درختی مدل شدن.
🍀اما ۴ درخت معروف فلاتر این ها هستن:
🌴Widget Tree
🌴Element Tree
🌴Render Tree
🌴Layer Tree
🔥ویجت تری رو خودمون میسازیم و به فریمورک میدیم. در ادامه element tree و render tree از دل فاز build بیرون میان و توی این فاز این ۲ درخت ساخته میشن. البته element ها مسئول ساخته و پرداخته کردن و مدیریت render tree هستن.
در نهایت layer tree هم توی فاز paint ساخته میشه و پس از paint شدن render tree یه دونه layer tree از دلش بیرون میاد که توی خودش المان های تصویر مورد نظر برای رندر شدن رو داره.
😱توی فلاتر درخت زیاد داریم و چیزهای زیادی وجود دارن که به صورت درختی مدل شدن.
🍀اما ۴ درخت معروف فلاتر این ها هستن:
🌴Widget Tree
🌴Element Tree
🌴Render Tree
🌴Layer Tree
🔥ویجت تری رو خودمون میسازیم و به فریمورک میدیم. در ادامه element tree و render tree از دل فاز build بیرون میان و توی این فاز این ۲ درخت ساخته میشن. البته element ها مسئول ساخته و پرداخته کردن و مدیریت render tree هستن.
در نهایت layer tree هم توی فاز paint ساخته میشه و پس از paint شدن render tree یه دونه layer tree از دلش بیرون میاد که توی خودش المان های تصویر مورد نظر برای رندر شدن رو داره.
@purecoder_ir
🔥8❤1👍1
Forwarded from Fluttery's Journey
توی دوره در مورد همه چیز Render Box صحبت کردیم و چیزی رو باقی نگذاشتیم:
🔥در مورد
✅Wet layout
✅Dry layout
✅Baseline
✅Dry baseline
✅Intrinsic dimensions
✅Repaint Boundary
✅Paint
صحبت کردیم و از همشون کاربردی توی توسعه چندین Render Box استفاده کردیم.
دیگه فکر نکنم جایی باشه که با این جزییات اینارو گفته باشه، حتا این عناوین اسمشون هم به سختی توی اینترنت پیدا میشه، چه برسه به توضیح و تدریسشون.
@fluttery_journey
@purecoder_ir
🔥در مورد
✅Wet layout
✅Dry layout
✅Baseline
✅Dry baseline
✅Intrinsic dimensions
✅Repaint Boundary
✅Paint
صحبت کردیم و از همشون کاربردی توی توسعه چندین Render Box استفاده کردیم.
دیگه فکر نکنم جایی باشه که با این جزییات اینارو گفته باشه، حتا این عناوین اسمشون هم به سختی توی اینترنت پیدا میشه، چه برسه به توضیح و تدریسشون.
@fluttery_journey
@purecoder_ir
❤7🔥3⚡1
Forwarded from Hamed
🚀 ترجمهی فارسی کتاب C# 12 in a Nutshell رو شروع کردم و روی GitHub منتشرش کردم:
🔗https://github.com/hheydarian/csharp-12-in-a-nutshell-persian
این کتاب یکی از کامل ترین منابع برای یادگیری و تسلط بر زبان #CSharp هست.
اگه علاقه مندید یه مرجع فارسی خوب و دقیق برای #CSharp بسازیم، خوشحال میشم همراه بشید.
میتونید فورک بگیرید، مشارکت کنید و به بهتر شدنش کمک کنید 💡
#CSharp #GitHub
#OpenSource #Net
🔗https://github.com/hheydarian/csharp-12-in-a-nutshell-persian
این کتاب یکی از کامل ترین منابع برای یادگیری و تسلط بر زبان #CSharp هست.
اگه علاقه مندید یه مرجع فارسی خوب و دقیق برای #CSharp بسازیم، خوشحال میشم همراه بشید.
میتونید فورک بگیرید، مشارکت کنید و به بهتر شدنش کمک کنید 💡
#CSharp #GitHub
#OpenSource #Net
❤8🔥1
بحث Pattern Matching که در سال های گذشته توی برخی از زبان ها باب شده، مربوط به کدوم یک از پارادایم ها میشه؟
Anonymous Quiz
14%
Procedural
32%
Functional
16%
Object Oriented
38%
نمیدونم، دیدن جواب..
❓دو قطعه کد زیر رو نگاه کن، هر دو در نهایت یه کار رو میکنن:
1⃣
حالا بگو هرکدومشون از نظر functional یا procedural بودن چه وضعیتی دارن؟
لطفن به کوییز زیر جواب بده👇
@purecoder_ir
1⃣
String getMesaageFor(int age){
var message = "";
if (age >= 18)
message = "Your Welcome";
else
message = "Get lost";
return message;
}
2⃣
String getMesaageFor(int age){
return age >= 18 ? "Your welcome" : "Get lost";
}
حالا بگو هرکدومشون از نظر functional یا procedural بودن چه وضعیتی دارن؟
لطفن به کوییز زیر جواب بده👇
@purecoder_ir
👍5
Pure Coder
❓دو قطعه کد زیر رو نگاه کن، هر دو در نهایت یه کار رو میکنن: 1⃣ String getMesaageFor(int age){ var message = ""; if (age >= 18) message = "Your Welcome"; else message = "Get lost"; return message; } 2⃣ String getMesaageFor(int…
کد اول یه statement هست و کد دوم از expression استفاده کرده:
age >= 18 ? "Your welcome" : "Get lost"
چون statement ها معمولن توی خودشون side effect دارن و expression ها نه، پس FP بر اصل
Favor Expressions over Statements.
استواره.
@purecoder_ir
age >= 18 ? "Your welcome" : "Get lost"
چون statement ها معمولن توی خودشون side effect دارن و expression ها نه، پس FP بر اصل
Favor Expressions over Statements.
استواره.
@purecoder_ir
🔥6👍1
میگن قانون بد بهتر از بی قانونیه.
کاری به درست و غلطش ندارم، ولی این گزاره در مورد تست نوشتن کار نمیکنه.
یعنی به هیچ وجه تست بد بهتر از تست ننوشتن نیست. اگه تست ننویسی بهتر از اینه که تست بد بزنی.
به قول یه استادی که میگفت: بعضیا تست نمینویسن. ولی بعضیا یه جوری مینویسن که باید التماسشون کنی که تروخدا ننویس.
واقعن هم همینه. همون کدمون رو خشک و خالی بزنیم، بهتر از اینه که یه غول بی شاخ و دم به اسم تست بذاریم کنارش.
تست بی کیفیت بدتر از کد بی کیفیت باعث نابودی پروژه میشه.
کاری به درست و غلطش ندارم، ولی این گزاره در مورد تست نوشتن کار نمیکنه.
یعنی به هیچ وجه تست بد بهتر از تست ننوشتن نیست. اگه تست ننویسی بهتر از اینه که تست بد بزنی.
به قول یه استادی که میگفت: بعضیا تست نمینویسن. ولی بعضیا یه جوری مینویسن که باید التماسشون کنی که تروخدا ننویس.
واقعن هم همینه. همون کدمون رو خشک و خالی بزنیم، بهتر از اینه که یه غول بی شاخ و دم به اسم تست بذاریم کنارش.
تست بی کیفیت بدتر از کد بی کیفیت باعث نابودی پروژه میشه.
@purecoder_ir
@purecoder_gp
🔥12👍1
🔥Liquid Glass
🆕جدیدن apple زبان طراحی جدیدی به اسم liquid glass رو معرفی کرده.
🤔بهش زبان طراحی میگن؟ نمیدونم .
📦رفتم و پکیج های فلاتر که این امکان رو اضافه میکنن رو سورس کدشون رو بررسی کردم.
برای مثال پکیج
🍇نحوه ی کارشون اینجوریه که یه Render Object اختصاصی میزنن و توش از چیزایی مثل BackdropFilterLayer و ClipLayer استفاده میکنن.
😍خیلی ساده هست و خودتون هم میتونید بزنید و توی دوره ی فلاترمون هم اموزش دادیم.
🔥ولی استفاده ی زیاد از این لایه ها در مقابل قشنگی که بهمون میدن، روی پرفرمنس تاثیر منفی میگذاره.
پس باید توی استفاده از افکت liquid glass وسواس به خرج بدیم.
🔥مگر اینکه کلن فلاتر زمین بازی رو عوض کنه و در اینده از پایه یه Engine Layer اختصاصی برای این افکت توسعه بده.
البته در هر صورت روی پرفرمنس تاثیر منفی میگذاره، حتا اگه از پایه یه Engine Layer براش طراحی بشه.
👈پس بی رویه استفاده نکنید و مخصوصن مراقب گوشی های اقتصادی و زبون بسته باشید.
@purecoder_ir
🆕جدیدن apple زبان طراحی جدیدی به اسم liquid glass رو معرفی کرده.
🤔بهش زبان طراحی میگن؟ نمیدونم .
📦رفتم و پکیج های فلاتر که این امکان رو اضافه میکنن رو سورس کدشون رو بررسی کردم.
برای مثال پکیج
Liquid_glass_render
🍇نحوه ی کارشون اینجوریه که یه Render Object اختصاصی میزنن و توش از چیزایی مثل BackdropFilterLayer و ClipLayer استفاده میکنن.
😍خیلی ساده هست و خودتون هم میتونید بزنید و توی دوره ی فلاترمون هم اموزش دادیم.
🔥ولی استفاده ی زیاد از این لایه ها در مقابل قشنگی که بهمون میدن، روی پرفرمنس تاثیر منفی میگذاره.
پس باید توی استفاده از افکت liquid glass وسواس به خرج بدیم.
🔥مگر اینکه کلن فلاتر زمین بازی رو عوض کنه و در اینده از پایه یه Engine Layer اختصاصی برای این افکت توسعه بده.
البته در هر صورت روی پرفرمنس تاثیر منفی میگذاره، حتا اگه از پایه یه Engine Layer براش طراحی بشه.
👈پس بی رویه استفاده نکنید و مخصوصن مراقب گوشی های اقتصادی و زبون بسته باشید.
@purecoder_ir
🔥12👍1
Forwarded from Mohammad Taheri
گذر یار | تجربه ی اینترنت آزاد، امن و سریع 🪩
⚙️با ربات گذریار همهچیز بهصورت کاملاً خودکار و لحظهای انجام میشه.
✔️به محض ثبت سفارش، کانفیگ شما ساخته میشه و آماده استفادهست.
✅کانفیگ تست هم داره، حتما ازش استفاده کن.
👈برای ورود به ربات از لینک زیر استفاده کن.
ورود به ربات...
@purecoder_ir
⚙️با ربات گذریار همهچیز بهصورت کاملاً خودکار و لحظهای انجام میشه.
✔️به محض ثبت سفارش، کانفیگ شما ساخته میشه و آماده استفادهست.
⭕دور زدن تمام تحریم ها:
تحریم های گردل، npm و ... .
🌍 دسترسی راحت به:
یوتیوب📱، اینستاگرام📱، توییتر📱، واتساپ📱، تلگرام 📱و تمام سایتهای فیلترشده🌍
➕ویژگیها:
🔵ساخت و تحویل کانفیگ بهصورت لحظهای
🟠سرعت بالا در بیشتر ساعات شبانهروز
🔴پشتیبانی از Android و IOS و Windows و Linux و MacOs
🟢تمدید و مدیریت اشتراک بدون نیاز به ادمین
💾 پلن ها:
✅اقتصادی: ۳۰ گیگ، ۱ ماهه، ۸۵ هزار تومان
✅پیشنهادی: ۷۰ گیگ، ۲ ماهه، ۱۸۹ هزار تومان
✅حرفه ای: ۱۳۰ گیگ، ۳ ماهه، ۳۴۹ هزار تومان
✅طلایی: ۳۰۰ گیگ، ۶ ماهه، ۷۹۹ هزار تومان
✅نامحدود: ۱ ماهه، ۲۹۹ هزار تومان
💾 امکان خرید با دعوت از دوستان:😍در صورتی که دوستات از ربات خرید کنن، تو هم اعتبار دریافت میکنی و میتونی برای خرید ازش استفاده کنی.
✅پلن اقتصادی با ۱۰ دعوت
✅پلن پیشنهادی با ۲۰ دعوت
✅پلن حرفه ای با ۳۵ دعوت
✅پلن طلایی با ۸۰ دعوت
✅پلن نامحدود با ۲۸ دعوت
✅کانفیگ تست هم داره، حتما ازش استفاده کن.
👈برای ورود به ربات از لینک زیر استفاده کن.
ورود به ربات...
@purecoder_ir
🔥6
Pure Coder pinned «گذر یار | تجربه ی اینترنت آزاد، امن و سریع 🪩 ⚙️با ربات گذریار همهچیز بهصورت کاملاً خودکار و لحظهای انجام میشه. ✔️به محض ثبت سفارش، کانفیگ شما ساخته میشه و آماده استفادهست. ⭕دور زدن تمام تحریم ها: تحریم های گردل، npm و ... . 🌍 دسترسی راحت به: یوتیوب📱،…»
😜یه جوکی که بین برنامه نویسان جهان رواج داره:
نام گذاری رو میگن سخت ترین کاره🤓🧐😳
آیا واقعن همین طوره؟
@purecoder_ir
فقط دو تا کار سخت توی دنیای نرم افزار وجود داره، اول
✅naming things
و بعد
✅cache invalidation
نام گذاری رو میگن سخت ترین کاره🤓🧐😳
آیا واقعن همین طوره؟
@purecoder_ir
👍16👎1
Mohammad Taheri
گذر یار | تجربه ی اینترنت آزاد، امن و سریع 🪩 ⚙️با ربات گذریار همهچیز بهصورت کاملاً خودکار و لحظهای انجام میشه. ✔️به محض ثبت سفارش، کانفیگ شما ساخته میشه و آماده استفادهست. ⭕دور زدن تمام تحریم ها: تحریم های گردل، npm و ... . 🌍 دسترسی راحت به: یوتیوب📱،…
این ربات توسط Pure Coder آزمایش شده و مورد تاییده.
البته شما خودتون ازش کانفیگ تست بگیرید و گردل رو باهاش امتحان کنید و اگه مشکلی داشتید به پشتیبانی ربات پیام بدید.
اگه قبلن هم کانفیگ تست گرفتین، میتونید بگین که براتون تمدید کنن..
پ.ن: اپ V2rayN نصب کنید و اپ های دیگه استفاده نکنید!
ورود به ربات...
البته شما خودتون ازش کانفیگ تست بگیرید و گردل رو باهاش امتحان کنید و اگه مشکلی داشتید به پشتیبانی ربات پیام بدید.
اگه قبلن هم کانفیگ تست گرفتین، میتونید بگین که براتون تمدید کنن..
پ.ن: اپ V2rayN نصب کنید و اپ های دیگه استفاده نکنید!
ورود به ربات...
❤8
🔥Value Type vs Reference Type
وقتی میگیم
مقدار یا value ی a توی b کپی میشه و از حالا به بعد هر دو ولیوی 4 رو دارن. یعنی یک فضا از حافظه به a اختصاص داده میشه و توش مقدار ۴ قرار میگیره و یک فضا هم به b اختصاص داده میشه و توش مقدار ۴ قرار میگیره.
حالا اگه بگیم:
مقدار b برابر با ۵ میشه و مقدار a برابر با ۴ باقی میمونه. چون حافظه ی اختصاص داده شده به این دو var کاملن از هم مستقل هستن و مستقل از هم تغییر میکنن.
به این ترتیب به این type ها value type گفته میشه.
اینجا کلید new باعث میشه که یه دونه person ساخته بشه و توی حافظه قرار بگیره، ولی رفرنسش یا به عبارتی ادرسش توی حافظه ی اختصاص داده شده به p قرار میگیره.
حالا اگه بگیم:
همون ادرس یا رفرنس توی p1 هم کپی میشه.
پس کلن یه دونه person توی حافظه داریم و دو تا var داریم که هر دو به همون اشاره میکنن. در نتیجه اگه بگیم:
مقدار age اون person ای که توی حافظه بوده تغییر میکنه و چون p و p1 هر دو به یک ابجکت رفرنس داشتن، مقادیر p.age و p1.age هر دو برابر با ۹۹ میشه.
به این type ها reference type میگن.
پست بعدی...
وقتی میگیم
int a = 4;
int b = a;
مقدار یا value ی a توی b کپی میشه و از حالا به بعد هر دو ولیوی 4 رو دارن. یعنی یک فضا از حافظه به a اختصاص داده میشه و توش مقدار ۴ قرار میگیره و یک فضا هم به b اختصاص داده میشه و توش مقدار ۴ قرار میگیره.
حالا اگه بگیم:
int a = 4;
int b = a
b = 5;
مقدار b برابر با ۵ میشه و مقدار a برابر با ۴ باقی میمونه. چون حافظه ی اختصاص داده شده به این دو var کاملن از هم مستقل هستن و مستقل از هم تغییر میکنن.
به این ترتیب به این type ها value type گفته میشه.
✅وقتی که یک value type رو با عملیات = توی یک value type دیگه میریزیم، عملیات کپی انجام میشه و مقدار مورد نظر توی حافظه ی اختصاص داده شده به. Var دوم کپی میشه و راه دو var از هم جدا میشه.حالا وقتی میگیم:
Person p = new Person();
p.age = 66;
اینجا کلید new باعث میشه که یه دونه person ساخته بشه و توی حافظه قرار بگیره، ولی رفرنسش یا به عبارتی ادرسش توی حافظه ی اختصاص داده شده به p قرار میگیره.
حالا اگه بگیم:
Person p1 = p:
همون ادرس یا رفرنس توی p1 هم کپی میشه.
پس کلن یه دونه person توی حافظه داریم و دو تا var داریم که هر دو به همون اشاره میکنن. در نتیجه اگه بگیم:
P1.age = 99;
مقدار age اون person ای که توی حافظه بوده تغییر میکنه و چون p و p1 هر دو به یک ابجکت رفرنس داشتن، مقادیر p.age و p1.age هر دو برابر با ۹۹ میشه.
به این type ها reference type میگن.
✅وقتی که یک reference type رو با عملیات = توی یک reference type دیگه میریزیم، فقط رفرنس ها کپی میشن. یعنی به هر دو var دو حافظه ی مستقل اختصاص داده میشه، ولی مقداری که توی هر دو حافظه قرار میگیره یکسان و برابر با رفرنس ابجکت مورد نظر توی حافظه هست.
پس موقع اختصاص یک value type به value type دیگه، خود value کپی میشه و موقع اختصاص یک reference type به یک reference type دیگه، این رفرنسه که کپی میشه!!!
پست بعدی...
@purecoder_ir
🔥6❤2👌1
Forwarded from Hamed
📕 Clean Code in C#
یک خبر عالی! 🥳
ترجمه فارسی کامل کتاب #Clean Code in C نوشته Jason Alls بهصورت رسمی آماده شد! این کتاب یکی از منابع فوقالعاده برای یادگیری اصول کدنویسی تمیز، Refactoring و ارتقای کیفیت نرمافزار در #C بهحساب میاد.
همراهی و نظرات انگیزشی شما کلی انرژی و دلگرمی به این پروژه میده. ممنون از حمایتتون! ❤️
https://github.com/hheydarian/clean-code-in-csharp-persian
یک خبر عالی! 🥳
ترجمه فارسی کامل کتاب #Clean Code in C نوشته Jason Alls بهصورت رسمی آماده شد! این کتاب یکی از منابع فوقالعاده برای یادگیری اصول کدنویسی تمیز، Refactoring و ارتقای کیفیت نرمافزار در #C بهحساب میاد.
همراهی و نظرات انگیزشی شما کلی انرژی و دلگرمی به این پروژه میده. ممنون از حمایتتون! ❤️
https://github.com/hheydarian/clean-code-in-csharp-persian
GitHub
GitHub - hheydarian/clean-code-in-csharp-persian: Persian translation of the book Clean Code in C# by Jason Alls
Persian translation of the book Clean Code in C# by Jason Alls - hheydarian/clean-code-in-csharp-persian
🔥8❤1🏆1
🔥Value Type vs Reference Type
پست قبلی...
❓وقتی که یه value type رو به یه فانکشن یا متد پاس میدیم چی میشه؟
اینجا یه فانکشن داریم که توی ورودی یه value type میگیره. حالا اگه:
این فانکشن رو کال کنم و myVar رو بهش پاس بدم، مقدار یا value ی myVar توی a کپی میشه و مسیر دو تا variable از هم جدا میشه. یعنی یه variable به اسم myVar دارم و یه دونه variable هم به اسم a که اسکوپ کوچیکتر داره. این var ها value شون کپی هم هست ولی روی هم دیکه تاثیر نمیگذارن. یعنی بعد از اجرای فانکشن مقدار myVar برابر با ۱۰ باقی میمونه.
❓حالا اگه یه reference type رو به یه فانکشن یا متد پاس بدیم چی؟
اگه این فانشکن رو به شکل زیر کال کنم:
✅بعد از اجرای فانکشن، مقدار Age ابجکت person برابر با ۹۹ میشه.
❓چرا؟
چون وقتی که یه reference type رو به یه فانکشن پاس میدیم، این رفرنسه که کپی میشه. پس دو تا var به اسم های person و p داریم که هر دو یک مقدار داخل خودشون دارن و اون مقدار هم رفرنس یا ادرس ابجکت Person توی حافظه ست. پس عملیاتی که که توی فانکشن روی p اعمال میشه، روی person هم تاثیر میگذاره، چون هر دو به یک ابجکت توی حافظه اشاره میکنن.
پست قبلی...
❓وقتی که یه value type رو به یه فانکشن یا متد پاس میدیم چی میشه؟
void DoSomething(int a)
{
a = 6;
}
اینجا یه فانکشن داریم که توی ورودی یه value type میگیره. حالا اگه:
int myVar = 10;
DoSomething(myVar);
این فانکشن رو کال کنم و myVar رو بهش پاس بدم، مقدار یا value ی myVar توی a کپی میشه و مسیر دو تا variable از هم جدا میشه. یعنی یه variable به اسم myVar دارم و یه دونه variable هم به اسم a که اسکوپ کوچیکتر داره. این var ها value شون کپی هم هست ولی روی هم دیکه تاثیر نمیگذارن. یعنی بعد از اجرای فانکشن مقدار myVar برابر با ۱۰ باقی میمونه.
❓حالا اگه یه reference type رو به یه فانکشن یا متد پاس بدیم چی؟
void DoSomething(Person p)
{
p.Age = 99;
}
اگه این فانشکن رو به شکل زیر کال کنم:
Person person = new Person();
person.Age = 66;
DoSomething(person);
✅بعد از اجرای فانکشن، مقدار Age ابجکت person برابر با ۹۹ میشه.
❓چرا؟
چون وقتی که یه reference type رو به یه فانکشن پاس میدیم، این رفرنسه که کپی میشه. پس دو تا var به اسم های person و p داریم که هر دو یک مقدار داخل خودشون دارن و اون مقدار هم رفرنس یا ادرس ابجکت Person توی حافظه ست. پس عملیاتی که که توی فانکشن روی p اعمال میشه، روی person هم تاثیر میگذاره، چون هر دو به یک ابجکت توی حافظه اشاره میکنن.
✅پس موقع پاس دادن یک value type به یه فانکشن یا متد، خود value توی پارامتر ورودی فانکشن کپی میشه و موقع پاس دادن یه reference type به یه متد هم این رفرنسه که توی اون پارامتر کپی میشه.
@purecoder_ir
🔥6
شما اگه توی کل عمرت فقط و فقط قرمه سبزی خورده باشی و بگی من عاشق قرمه سبزیم، میشه به این عشق و علاقه تردید کرد. تا وقتی که چندتا غذای دیگه رو امتحان نکنی و همچنان بر علاقه ی خودت استوار نباشی. نمیشه به علاقت اعتبار داد.
خب این یه مثال الکی بود. ولی توی ماجرای شغل میشه بهش نگاه کرد. بعضی از ماها یه حرفه رو انتخاب میکنیم و تا اخر با همون ادامه میدیم و به صورت خود گول زنکی فک میکنیم که خیلی عاشقیم.
از کجا معلوم؟
تا وقتی فقط یه حرفه رو امتحان کردیم چه اطمینانی به خالص بودن علاقه ی ما هست؟
یکی از مولفه هایی که میشه باهاش علاقه رو سنجید، خلاقیته. دروغ زشتی که بعضی از ماها به خودمون میگیم اینه که من اصلن ادم خلاقی نیستم🥲🥲
همه ی انسان ها خلاقن. همه. مهم اینه توی چه جایگاهی قرار بگیرن. طبیعتن من نوعی توی نقش نقی معمولی یا در جایگاه سرمربی منچستر یونایند هیچ خلاقیتی ندارم. ولی به این معنا نیست که کلن ادم خلاقی نیستم. اگه در جایگاه درست قرار بگیرم، میتونم خلاقیت خودم رو بروز بدم.
پس دیگه این دروغ رو به خودت نگو که من خلاق نیستم. اگه خلاق نیستی باید جات رو تغییر بدی.
خب این یه مثال الکی بود. ولی توی ماجرای شغل میشه بهش نگاه کرد. بعضی از ماها یه حرفه رو انتخاب میکنیم و تا اخر با همون ادامه میدیم و به صورت خود گول زنکی فک میکنیم که خیلی عاشقیم.
از کجا معلوم؟
تا وقتی فقط یه حرفه رو امتحان کردیم چه اطمینانی به خالص بودن علاقه ی ما هست؟
یکی از مولفه هایی که میشه باهاش علاقه رو سنجید، خلاقیته. دروغ زشتی که بعضی از ماها به خودمون میگیم اینه که من اصلن ادم خلاقی نیستم🥲🥲
همه ی انسان ها خلاقن. همه. مهم اینه توی چه جایگاهی قرار بگیرن. طبیعتن من نوعی توی نقش نقی معمولی یا در جایگاه سرمربی منچستر یونایند هیچ خلاقیتی ندارم. ولی به این معنا نیست که کلن ادم خلاقی نیستم. اگه در جایگاه درست قرار بگیرم، میتونم خلاقیت خودم رو بروز بدم.
پس دیگه این دروغ رو به خودت نگو که من خلاق نیستم. اگه خلاق نیستی باید جات رو تغییر بدی.
👍9