<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های حسین افتخاری</title><link>https://virgool.ir/feed/@h.eftekhar.m</link><description>مینویسم که فراموش نکنم!</description><language>fa</language><pubDate>2026-11-11 09:14:24</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>حسین افتخاری</title><link>https://virgool.ir/@h.eftekhar.m</link></image><item><title>در باب factory constructor و static method در dart</title><link>https://virgool.ir/flutter-community/در-باب-factory-constructor-و-static-method-در-dart-rmkimbekdbph</link><description>به عنوان کسی که مدتی رو با dart و flutter کار کردم برام جای سوال بود فلسفه factory constructor چیه وقتی میشه همون کاری که factory انجام میده رو با static method هم انجام داد.با اندکی جستجو مواردی رو پیدا کردم که factory constructor میتونه مفیدتر واقع بشه. در ابتدا با یه مثال شروع می کنیم که چرا این دو به هم شبیه هستن.ابتدا یه کد ساده با استفاده از factory https://gist.github.com/heftekharm/890f71c7de14b303b5990268990538ec حالا همین کد با استفاده از static method https://gist.github.com/heftekharm/ad915cc353440354a2bf5256e9271dcb همانطور که می بینید نحوه صدا زدن fomJson از کلاس Circle کاملا یکسانه.اولین مورد اینه که factory می تونه بدون نام باشه اما static method خیرکد زیر رو ببینید.  https://gist.github.com/heftekharm/1f9438136fdb48a73a695d1615431de9 همینطور که می بینید factory constructor همانند یک constructor عادی صدا زده شده اما نکته اینجاست می توانیم رفتار اون رو در مقایسه با یک constructor عادی تغییر بدیم که مثلا در این مثال به جای اینکه Circle Object جدید ساخته بشه ابتدا در Map جستجو میشه که آیا پیش از این ، Circle با این size ساخته شده یا خیر ، در صورت وجود ، circle قبلا ساخته شده رو بر میگردونه ، در غیر این صورت یک Circle جدید رو میسازه ، داخل Map ذخیره میکنه و سپس اون رو بر میگردونه. دومین مورد وقتیه که پای Generic Parameters ها میاد وسطدر ساخت شی از کلاس های ساده  static method و factory تقریبا مزیتی نسبت به همدیگه ندارن اما اگه پای generic ها یه کلاس باز بشه مقداری قضیه فرق می کنه.این مثال رو ببینید. https://gist.github.com/heftekharm/fcd1f28e0f7b7f8e0cbaf79f8f5f645b اگه دقت کنید استفاده از factory اندکی از اضافات کد رو کمتر کرده . اگر در کلاس ، generic های بیشتر و تو در تو داشته باشیم این کاهش اضافات محسوس تر خواهد بود.سومین مورد اینه که factory یک میانبر ویژه برای ارجاع به سایر constructor ها دارهفرض کنید دو کلاس داریم که از کلاس abstract Shape گسترش یافته اند و از آنجا که میخواهیم استفاده مستقیم از آن ها رو به library که در آن تعریف شده اند محدود کنیم ، در نام گذاری آن از پیشوند _ استفاده می کنیم.class _Circle extends Shape {&#xA;  final int innerRadius;&#xA;  _Circle(int outerRadius, [this.innerRadius = 0]) : super(outerRadius);&#xA;  @override&#xA;  double area() =&gt; 3.14 * size * size;&#xA;}class _Square extends Shape {&#xA;  _Square(int size) : super(size);&#xA;  @override&#xA;  double area() =&gt; size * size * 1.0;&#xA;}اما میخواهیم کاربر از طریق کلاس والد بتواند به این کلاس ها دسترسی داشته باشد.اولین روش استفاده از static method هاست. به این صورت که: https://gist.github.com/heftekharm/9ee58af514e7d0a2b08bec96b0336c4c همونطور که  می بینید پارامتر ها باید دقیقا از متدها به constructor منتقل بشه. شاید برای یک یا دو پارامتر چندان مشکل ساز نباشه اما اگه تعداد پارامترها زیاد شود قطعا خسته کننده خواهد بود. اما حالا همین رو با استفاده factory انجام میدیم. https://gist.github.com/heftekharm/0d0734ef507ce347e7cae9d9346d0e4d همانطور که می بینید redirect syntax ویژه برای factory ها کار آسانتر کرده. در flutter جاهای زیادی از این قابلیت استفاده شده مثلا TextButton.icon.منبع:https://dash-overflow.net/articles/factory</description><category>حسین افتخاری</category><author>حسین افتخاری</author><pubDate>Thu, 02 Dec 2021 22:02:44 +0330</pubDate></item><item><title>اندر لذت مشارکت ( البته در پروژه های open source)</title><link>https://virgool.ir/coderlife/اندر-لذت-مشارکت-البته-در-پروژه-های-open-source-ukujltoidwds</link><description>فکر می کنم یکی از علایق همه برنامه نویس ها ابن باشه که در پروژه های متن باز شرکت کنن و در توسعه این پروژه ها سهیم باشن. طبعا این علاقه با من هم بود اما خب تاکنون فرصتی فراهم نشده بود. مدتی پیش  کار روی پروژه ای رو آغاز کردم. یک اپلیکیشن موبایل که با flutter اون رو توسعه میدادم. در ابتدا این اپلیکیشن فاقد  backend بود برای همین مجبور شدم برای آزمایش اپلیکیشن خودم یک backend ساده و تعدادی api رو با استفاده از فریم ورک express براش بنویسم. همه چی بر وفق مراد بود تا اینکه کار توسعه یک backend بهتر  توسط یک backend developer شروع شد اما این بار با پایتون و فریم ورک django  . اگرچه اپلیکیشن با backend آزمایشی که خودم نوشته بود به خوبی کار می کرد اما با جایگزینی backend مورد عجیبی در اپلیکیشن رخ داد. فرم های با زبان فارسی که به سرور post می شدن و سپس به اپلیکیشن برگشت داده  می شدن به صورت خرچنگ قورباغه نمایش داده می شدن. از این جهت برای من عجیب بود که همین اپلیکیشن با backend آزمایشی خودم به درستی کار می کرد و مشکلی نداشت. با مقداری کند و کاو در کدها متوجه شدم مشکلی  در ماژول http کتابخونه getx وجود داره که من از اون داشتم استفاده می کردم. مشکل این بود که وقتی در response header به طور مشخص charset وجود نداشت ، کتابخونه به صورت پیش فرض از latin1 charset استفاده میکرد. اگر این مقدار به UTF8 charset که charset متداول تری است  تغییر پیدا می کرد مشکل حل میشد. البته خب واضحه که میشد مشکل رو با اضافه کردن charset به content type در response ها هم حل کرد.به هر حال ما پروژه رو fork کردیم و تغییر دادیم (همون یک کلمه رو فقط!) و با مقداری توضحات  pull request اش رو هم ثبت کردیم. توسعه دهنده اصلی هم بعد از چند ساعت متوجه شد و تشکر کرد و گفت من یه تست بگیرم که آیا با زبان هایی مثل اسپانیایی و پرتغالی به مشکل نخوره. بعد از چند روز هم ایمیلش اومد که pull request شما merge شده. و من دیگر از شادی در پوست خود نمیگنجیدم! ما یه زمانی در رویای راه اندازی شرکتی به بزرگی مایکروسافت بودیم که  اگه یه تراول ۵۰۰ تایی از دستمون افتاد زمین نیاز نباشه خم بشیم و برداریمش چون دو ثانیه بعد به همین اندازه پول به حسابمون اضافه شده بود (اون موقع ها می گفتن بیل گیتس هر ثانیه ۲۵۰ هزارتومن درآمد داره). الان با یه merge شدن pull request در آسمان ها سیر میکنیم. به راستی که بشر چیز عجیبیست.</description><category>حسین افتخاری</category><author>حسین افتخاری</author><pubDate>Sat, 05 Jun 2021 01:27:02 +0430</pubDate></item><item><title>میشه (a==1 &amp;&amp; a==2 &amp;&amp; a==3) که true بشه آیا؟</title><link>https://virgool.ir/JavaScript8/میشه-a1-a2-a3-که-true-بشه-آیا-b0xerd8lejer</link><description> اولین بار که این سوال رو دیدم خیلی برام تعجب برانگیز بود.مگه میشه که یک متغیر همزمان هم 1 باشه هم 2 هم3؟مگه میشه ؟ مگه داریم؟ از اونجایی که آدم باهوشی نیستم فوری راه حل رو نگاه کردم. راه حل ساده است.کافیه متدهای toString یا valueOf  رو بازنویسی کنیم به این صورت.const a = {&#xA;  i: 1,&#xA;  toString: function () { &#xA;    return a.i++;&#xA;  }&#xA;}&#xA;if(a == 1 &amp;&amp; a == 2 &amp;&amp; a == 3) {&#xA;  console.log(&#39;Hello World!&#39;);&#xA;}به همین سادگی. میتونید امتحان کنید.</description><category>حسین افتخاری</category><author>حسین افتخاری</author><pubDate>Mon, 28 May 2018 02:04:09 +0430</pubDate></item></channel></rss>