مهدی نعمتی

مهدی نعمتی

سینگلتون در فلاتر به زبان ساده

همه تو برنامه نویسی از مفاهیم د یزاین پترن استفاده میکنن، چه به صورت آگاهانه چه غیر آگاهانه مثلا ازث بری و چند ریختی و ... ولی از بین همه این دیزاین پترن ها singleton به نظر بیشتر از بقیه مورد استفاده قرار میگیره، چون اکثر برنامه نویس ها نیاز به متغیر های سراسری رو حتما موقع کد زدن حس کردن. یه توضییح کلی بخوایم در مورد سینگلتون بدیم اینجوریه که یه متغیری نیازه که همیشه تو کل برنامه در دسترس باشه یا اصلا به جای متغیر نیاز که یه کلاس تو همه قسمت ها در دسترس باشه، اینجاست که دیزاین پترن سینگلتون خودش رو نشون میده. یه کلاس میسازیم به اسم test به این شکل : مرحله بعدی این که بیایم کلاس رو فراخونی کنیم و بهش مقداری رو بدیم، یه اسکرین جدید میسازیم و این کلاس رو فراخونی میکنیم و بهش مقدار مورد نظرمون رو میدیم خروجی کار ما به این شکل میشه: Car singleton has been creaed, this method call only once original car wheels : 4 edited car wheels : 8 حالا میایم یه صفحه (اسکرین) جدید میسازیم و دوباره کلاس سینگلتون رو فراخونی مکنیم که خروجی اسکرین دوم به این شکله: این یه مثال ساده و کاربردی از کلیت دیزاین پترن سینگلتون بود، ولی تو فلاتر میشه خیلی بهتر و با قدرت بیشتری از این قابلیت ها استفاده کرد که برای این کاار استیت منیجمت های مثل پرووایدر یا بلاک و ... هستند که واقعا کار برنامه نویسی و مدیریت دیتا رو ساده تر میکنن.

مهدی نعمتی

مهدی نعمتی

معرفی ویجت row در فلاتر

یکی از ویجت های پر استفاده در فلاتر ویجت row هست که باعث میشه چندتا ویجت رو به صورت افقی و کنار هم تو صفحه داشته باشیم. این ویجت تا جایی که صفحه دستگاه اجازه بده، میزاره که داخلش ویجت قرار بگیره. بعضی از مواقع پیش میاد که تعداد ویجت های داخل row از عرض صفحه هم بیشتر بشه که با ارور زرد رنگی مواجه میشیم که میگه جا نیست که همه المان ها تو صفحه جا بشن، یا اینکه ما نیاز داریم یه لیست افقی تو صفحه داشته باشیم که کاربرامون بتونن چیزی رو اسکرول کنن، تو این حالت ما میتونیم ویجت row رو داخل یه ویجت SingleChildScrollView قرار بدیم تا امکان اسکرول کردن لیست رو وقتی از عرض صفحه بیشتر شد داشته باشیم. تصویر زیر نشون میده که عرض ویجت از عرض تعریف شده بیشتر شده و خطای کم بودن فضا به صورت رنگ زرد تو سمت چپ داره نشون میده. تعیین نوع چینش ویجت های درون Row : سه تا پروپرتی خیلی مهم تو ویجت row داریم که تو ادامه کار بهشون توضیح میدیم پراپرتی MainAxisAlignment : این پراپرتی جهت افقی فرزندان(ویجت های داخل row) را مشخص میکنه به این شکل میشه مشخص کرد فرزندان ویجت Row تو اول ، وسط ، انتها یا با فاصله از هم تو صفحه قرار بگیرند. پراپرتی CrossAxisAlignment : این پراپرتی هم برای تعیین جهت قرارگیری بچه های داخل ویجت row به صورت عمودی تو صفحه به عهده داره و این امکان رو میده که تعیین کنیم که این بچه ها در اول، وسط یا انتهای ویجت قرار بگیرند. پراپرتی MainAxisSize : این پراپرتی مشخص میکنه که ویجت row تا چه اندازه تو صفحه کشیده بشه، یعنی اگه اندازه آیتم های تو صفحه حتی کمتر از عرض صفحه هم بود، اندازه ویجت row به اندازه عرض صفحه بشه.

مهدی نعمتی

مهدی نعمتی

معرفی ویجت Column در فلاتر

ویجت column یکی از پر استفاده ترین ویجت ها تو فلاتر هست که برای چینش ویجت های دیگه به صورت عمودی استفاده میشه این ویجت تا جایی که صفحه نمایش دستگاه اجازه بده این امکان رو میده که عناصر مختلف رو داخلش قرار بدین و اگه نیاز باشه ویجت های بیشتری رو هم تو این ویجت قرار بدیم باید اسکرول رو هم به این ویجت اضافه کنیم. برای اینکه اماکن اسکرول کردن رو یه ویجتی بدیم SingleChildScrollView استفاده میکینم که اگه محتوای داخل column از ظرفیتش بیشتر بشه بقیه المانهای ما به صورت اسکرول قابل نمایش باشه. زمانی که المان های داخل column بیشتر از ظرفیت باشه و اسکرول هم نداشته باشه با چنین خطایی رو به رو میشیم داخل این ویجت سه ابزار خیلی مهم قرار داره که باهاش میشه کارای کنترلی رو انجام داد پراپرتی MainAxisAlignment : این پراپرتی وضعیت عمودی children (آیتم های داخل) را در این ویجت مشخص میکند به این شکل که میشه تعیین کرد آیتم ها در بالای صفحه، وسط، پایین صفحه یا با فاصله برابر از یکدیگر تو صفحه چیده بشن. پراپرتی CrossAxisAlignment : این پراپرتی هم برای تعیین جهت قرارگیری children به صورت افقی تو صفحه هست و تعیین میکنه که آیتم ها در اول، وسط یا انتهای قرار بگیرند . پراپرتی MainAxisSize : این پراپرتی مشخص میکنه که ویجت column تا چه اندازه تو صفحه کشیده بشه، یعنی اگه اندازه آیتم های تو صفحه حتی کمتر از سایز صفحه هم بود، اندازه ویجت column به اندازه سایز صفحه بشه.

مهدی نعمتی

مهدی نعمتی

بررسی Immutable بودن String در سی شارپ

تو برنامه نویسی از نوع داده ای String برای ذخیره دیتای متنی استفاده میشه و تو سی شارپ برای ذخیره یک متن از آرایه ای از کاراکتر ها استفاده میشه که کاراکتر ها پشت هم تو آرایه ذخیره میشن و تبدیل به متن مورد نظر ما میشن. منظور از یک Immutable اینه که فضایی که برای نگه داری اطلاعات تو حافظه به اون متغیر اختصاص داده شده ثابته و تغییر نمی کند. تو سی شارپ نوع string یک نوع immutable هست. وقتی که بخوایم یک نوع immutable رو تغییر بدیم باید مقدار قبلی رو از حافظه پاک کنیم و توی حافظه یک فضای جدید برای این مقدار ایجاد کنیم. دلیل این کار هم اینه که بالا گفتیم، استرینگ یک نوع آرایه هست و طول آرایه نمیتونه متغیر باشه و ثابته و وقیت بخوایم مقدار استرینگ رو تغییر بدیم ناچاریم که طول آرایه رو هم تغییر بدیم. البته این حذف و اضافه شدن تو حافظه رو ما هیچوقت نمیبینم چون در واقع، هنگامیکه مقدار یک استرینگ تغییر می کنه، CLR یک بلوک جدید از خانه های حافظه را به اون اختصاص میده. منظور از CLR هم همون Common Language Runtime هست که به زبان ساده همون هسته مرکزی دات نت هست که اجرای برنامه های دات نت به عهده اونه. بالاخره هر چیزی یه خوبی و یه بدی داره میریم سراغ مزایا و معابش مزایای Immutable بودن String: از مهمترین مزیت های تغییر ناپذیر بودن یا Immutable اینه که Thread-safe هستن و در برنامه های چند نخی ایجاد باگ نمی کنن، یعنی وقتی تو سیستم های multi-threaded کار میکنیم دیگه مشکل deadlock و همزمانی رو نداریم چون تغییرات باعث ایجاد یک آبجکت جدید تو حافظه میشن. معایب Immutable بودن String: هر تغییر باعث ایجاد یک آبجکت جدید تو حافظه میشه که از نظر پرفرمنسی مشکل داره، چون هر سری یه زمانی برای ایجاد اون صرف میشه. یه مشکل دیگه هم اینه که مصرف رم بالا میره چون هر سری یه جدید ساخته میشه، ولی دات نت سیستم Garbage Collection داره که تا حد زیادی این مشکل رو درست میکنه. تو مقاله های بعدی یه سری توضیحاتی میدیم که ایم مشکلات حل بشن.

مهدی نعمتی

مهدی نعمتی

استفاده از StringBuilder برای الحاق رشته

خب ما اومدیم تو این لینک بررسی کردیم که مقدار شته ای تو سی شارپ رفتار Immutability داره که یه دور دیگه هم بخوایم خلاصه وار توضیح بدیم اینجوری بود که، وقتی ما یه مقدار جدید به متغیر از نوع رشته یا همون string میدیم، تو پشت صحنه میاد یه فضای جدید تو حافظه انتخاب میشه و مقدار تو اون ذخیره میشه و مقدار قبلی حذف میشه (با استفاده از garbage collection )، این روش خوبی ها و بدی هایی هم داشت که مهمترین خوبیش این بود که تو برنامه های چند نخی باگی به وجود نمیاره چون با هر تغییر یه آبجکت جدیدی برای ما وجود داره و بدی این موضوع ههم این بود که همین حذف از رم و اضافه کردن به یه جای جدید تو رم سربار زیادی برای سیستم میتونه داشته باشه. ولی خب همیشه دات نت یه راه حل جایگزین یا روش دیگه ای هم برای اکثر کارا داره، که اگه با یه روشی حال نکردی بری سراغ روش دیگه ای. وقتی بخوایم یه یه رشته ای (متن) یه مقداری رو اضافه کنیم، میتونیم از قابلیت ​ StringBuilder استفاده کنیم. ​ استفاده از StringBuilder برای اتصال یا رشته ها : وقتی که ما از قابلیت StringBuilder استفاده میکنیم، دیگه تو پشت صحنه نمیاد برای هر تغییری تو رشته یه فضای جدید به متغیر بده و تغییرات رو تو فضای فعلی از حافظه انجام میده. یه مثال ببینیم از نحوه استفاده از این قابلیت تو ایم مثال یه متنی رو 40 هزار بار به یه رشته اضافه مکنیم و زمان انجام رو هم محاسبه میکنیم. میبینیم که 40 هزار بار تغییر تو یه رشته حدود 2 میلی ثانیه طول کشیده، همین آزمایش رو تو حالت عادی با رشته انجام دادیم حدود 5 ثانیه طول کشید! یه مقایسه انجام بدیم میبینیم که مقایسه سرعت این دو روش برای تغییرات وسیع روی رشته غیر قابل مقایسه هست.

مهشید زروکی

مهشید زروکی

3 گام برای داشتن رزومه ای که شانس شما را 10 برابر میکند

گام اول: رزومه شما باید در ساده ترین حالت بصری و خوانا باشد یعنی المان های گرافیکی و وکتور و رنگ های اضافه ممنوع! وقتی صحبت از سادگی میشه یعنی کاملا ساده و بدون المان گرافیکی . خب دلیلش چیه؟ به این فکر کنید که شرکت بزرگی درخواست کار در زمینه فیلد خاص شغلی میده و تعداد بسیار زیادی از افراد درخواست میدن برای این پوزیشن شغلی. مشکلی که به وجود میاد ؟! مسئول این بخش تعداد زیادی رزومه رو باید بررسی کنه که واقعا هم زمان زیادی میبره و تعداد بالای درخواست ممکنه هم خسته کننده باشه و هم یک سری رزومه ها چون خوانا نیستند بررسی دقیقی انجام نشه ، پس در نهایت کسی که ضرر میکنه و رزومه اش دیده نمیشه ممکنه یکی از شما باشید. گام دوم: باید اطلاعاتی از شرکت مقصد داشته باشید ( شرکت داخلی یا بین اللمللی) شرکتی که براش رزومه ارسال میکنید خیلی مهمه که بدونید در کجا استقرار داره دو نکته مهم که شاید بتونه کمکتون کنه 1.2 اگه شرکت در ایران باشه بهتره برای ارسال رزومه از رزومه فارسی استفاده کنید در درجه اول اما اگر شرکت شروع پیشنهادش و شرایطش با زبان انگلیسی بیان شده رزومه انگلیسی هم ارسال کنید چند نمونه رزومه کاربردی به زبان فارسی رو بریم باهم ببینیم : وب سایت برای ثبت رزومه و CV : https://cvbuilder.me/ https://atbox.io/ https://jobvision.ir/landing/cv-maker https://karboom.io/cv-builder 2.2 اگه شرکت مورد نظرتون بین المللی باشه و هدفتون اینه شانس دیده شدن رزومتون چند برابر باشه این پست مارو بخونید که از صفر تا صد کار راهنماییتون میکنه. 3 گام مهم برای استخدام در شرکت های بین المللی ​ گام سوم: نحوه ساخت رزومه - گام به گام 1. قالب و طرح رزومه مناسب را انتخاب کنید 2. اطلاعات شخصی و اطلاعات تماس خودتون رو وارد کنید 3. از یک خلاصه یا هدف رزومه برای توصیف کوتاهی از خودتون استفاده کنید 4. تجربیات و دستاوردهای کاری خودتون رو در هر بخشی که فعالیت داشتید عنوان کنید 5. مهارت های خودتون رو تو زمینه های مختلف بیان کنید ( تحصیلات ودوره های آموزشی و ...) 6. شامل بخش های رزومه اضافی - زبان ها، سرگرمی ها و غیره و کاملا اختیاری مثل همیشه حمایت فراموش نشه چون حمایت شما میتونه تو روند مطالبی که قرار میدیم تاثیر بذاره ;) به امید دیدار...