<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Ali Mardani</title><link>https://virgool.ir/feed/@alimardani1994</link><description></description><language>fa</language><pubDate>2026-11-11 14:58:09</pubDate><image><url>https://files.virgool.ir/upload/users/6723/avatar/PHhPSd.jpg</url><title>Ali Mardani</title><link>https://virgool.ir/@alimardani1994</link></image><item><title>تشخیص صحت کد ملی و شناسه ملی</title><link>https://virgool.ir/@alimardani1994/تشخیص-صحت-کد-ملی-و-شناسه-ملی-krtje2s3tljy</link><description>تو خیلی پروژه ها نیاز به تشخیص صحت بعضی پارامتر ها مثل کد ملی یا شناسه ملی نیاز هست. برای همین من بر آن شدم ( :)))) ) که یک بار این الگوریتم رو پیاده کنم و به اشتراک بذارم. امیدوارم تو بهتر کردنش بتونین کمکم کنید.https://gist.github.com/alimardani1994/7e6eb5ff0f04495cd4f1c969fd928c51</description><category>Ali Mardani</category><author>Ali Mardani</author><pubDate>Wed, 05 Sep 2018 12:49:08 +0430</pubDate></item><item><title>توسعه دهندگان هم کاربر هستند. بخش ۱</title><link>https://virgool.ir/@alimardani1994/توسعه-دهندگان-هم-کاربر-هستند-بخش-۱-jdnm3z55xgpr</link><description>در پست قبلی به اهمیت کارکرد درست رابط کاربری و API اشاره کردیم. در اینجا به ۵ رهنمود در طراحی یک رابط کاربری و API اشاره میکنیم : قابل رویت بودن وضعیت سیستمانطباق بین سیستم و دنیای واقعیکنترل و آزادی عمل کاربرانرعایت استانداردها و اصول کاربریجلوگیری از بروز خطا۱- قابل رویت بودن وضعیت سیستم سیستم بایستی به کاربران بوسیله بازخورد درست در زمان مناسب بایستی وضعیت سیستم را اطلاع دهد.رابط کاربری :‌ زمانی که کاربر عملی را آغاز میکند که مدت زمان زیادی طول میکشد، بایستی آنها را در مورد پیشرفت کار مطلع کنیم.برای اینکه نشان دهیم عکس بارگیری میشود، میتوانیم یک progressbar و یک اعلان(notification) همراه درصد پیشرفت به کاربر نمایش دهیم. کاربر بایستی بداند که بابت چه چیزی منتظر است.?API: API بایستی راههای استعلام وضعیت کنونی یک عملیات را فراهم کند. برای مثال کلاس AnimatedVectorDrawable برای اینکه اطمینان حاصل شود که انیمیشن در حال اجرا هست یا نه این راه را فراهم کرده است : Boolean isAnimationRunning = avd.isRunning();۲- انطباق بین سیستم و دنیای واقعیاپلیکیشن بایستی به زبان کاربر صحبت کند. بدین معنی که مفاهیم و کلماتی که به کار میبرد بایستی برای کاربر آشنا باشد، نه کلماتی خود سیستم استفاده میکند.?API: زمانی که در یک API به دنبال یک کلاس میگردیم، بایستی نام آن کلاس به گونه ای باشد که کاربر به راحتی به آن دست یابد، چون کاربر ممکن است پیش زمینه ای درباره این API و دیگر APIهای در این زمینه نداشته باشد. برای مثال زمانی که توسعه دهنده از picasso یا glide استفاده میکند، به دنبال متدی که ‘load’ یا ‘download’ نام داشته باشد، میگردد.۳- کنترل و آزادی عمل کاربرامکان بازگشت از عمل انجام شده کاربران به آنها بدهید.رابط کاربری : برای کارهایی که گاها باعث ابهام در ذهن کاربر میشوند و کاربر ممکن است ناخواسته آن را انجام داده باشد، همانند پاک کردن یا آرشیو کردن یک ایمیل، پیامی به او نشان دهید که میتواند این عملیات را بازگرداند.?API ها نیز بایستی به توسعه دهنده اجازه متوقف کردن یا ریست کردن عملیات را بدهند و به راحتی API را به حالت نرمال خود بازگرداند.API: برای مثال، Retrofit با متد cancel، این اطمینان را حاصل میکند که درخواست ارسالی به سرور در شرایطی که دسترسی به شبکه نیست و یا هنوز درخواست اجرا نشده است، درخواست را متوقف کند. همچنین اگر با NotificationManager کار کنید، میبینید که این API  برای شما هر دو متد create و cancel را فراهم کرده است.۴- رعایت استانداردها و اصول کاربریکاربر اپلیکیشن شما نباید با مواردی مواجه شود که یک معنی یا مفهوم را میرسانند.رابط کاربری: کاربرانی که با برنامه شما کار میکنند، قبلا با برنامه های دیگر نیز تعامل داشته اند و از برنامه شما نیز انتظار دارند همان رفتارها را در شرایط مشابه نشان دهد. فاصله گرفتن از این استانداردها ، کاربر را به سمت اشتباه و بروز دادن خطا سوق میدهد.همواره بر طبق اصول پلتفرم و المان های رابط کاربری آن پیش روید، در این صورت کاربران به سرعت آنها را شناسایی میکنند و با آن تعامل میکنند. همچنین در برنامه خود نیز در شرایط مشابه از کلمات و آیکون های یکسان استفاده کنید. برای مثال زمانی که کاربر میتواند المان های متفاوتی را در اپلیکیشن شما ویرایش کند، از یک آیکون ویرایش استفاده کنید.? API: تمام قسمت های یک API بایستی بر طبق اصول طراحی شوند.از نام گذاری اصولی برای متدهای خود استفاده کنیددر مثال زیر ما interface داریم که دو راه برای قراردادن observer برای دو نوع متفاوت مشخص کرده است:public interface MyInterface {void registerContentObserver(ContentObserver observer);void addDataSetObserver(DataSetObserver observer);}کاربران این interface از خود میپرسند که فرق بین این دو متد در چیست؟ در بهترین حالت آنها مجبور میشوند با دقت مستندات این API یا نحوه پیاده سازی آن را بخوانند تا متوجه شوند که این دو متد کاملا شبیه هم رفتار میکنند.private List&lt;ContentObserver&gt; contentObservers;private List&lt;DataSetObserver&gt; dataSetObservers;public void registerContentObserver(ContentObserver observer) {contentObservers.add(observer);}public void addDataSetObserver(DataSetObserver observer){dataSetObservers.add(observer);}از اسامی مشابه برای متد هایی که یک کار را انجام میدهند، استفاده کنید. همچنین میتوانید از متضاد ها برای نام گذاری متد ها استفاده کنید‌ : get/set - add/remove - subscribe/unsubscribe - show/dismissدر ترتیب پارامترهای متد ها دقت کنیدزمانی که متدی را overload میکنید، اطمینان حاصل کنید که همان ترتیبی را رعایت میکنید که در سایر متد ها نیز هست. در غیر این صورت کاربران API زمان زیادی را باید صرف پیدا کردن تفاوت بین متد های overload شده، کنند.void setNotificationUri( ContentResolver cr,Uri notifyUri);void setNotificationUri( Uri notifyUri,ContentResolver cr,int userHandle);از متدها و توابع با توالی پارامترهای از نوع مشابه اجتناب کنیداگر چه android studio کار کردن با توابع دارای توالی پارامترهای یک نوع را ساده کرده است، اشتباههای ترتیبی بروزشان بسیار ساده و پیدا کردنشان بسیار سخت است.?به عنوان راه حل میتوانید از builder pattern برای بوجود نیامدن همچین مشکلاتی استفاده کنید.متدها نبایستی بیش از ۴ پارامتر ورودی داشته باشند.هرچه تعداد پارامترهای یک متد بیشتر باشد، پیچیدگی آن نیز بیشتر است، زیرا کاربر بایستی ارتباط آن با متد و ارتباط آن با دیگر پارامتر ها را درک کند. بدین منظور که هر یک پارامتری که بیشتر میشود، پیچیدگی متد به صورت نمایی افزایش می یابد. زمانی که متدی بیش از ۴ پارامتر دارد، میتوانید بعضی از آنها را داخل کلاسی دیگر جای دهید یا از builder ها استفاده کنید.مقدار بازگشتی متد بر روی پیچیدگی آن تاثیر میگذارد.زمانی که متد، مقداری را بازمیگرداند، توسعه دهنده نیاز دارد بداند، آن مقدار نشان دهنده ی چیست، چگونه آن را ذخیره کند و …. زمانی که مقداری بازگشتی استفاده نشود، تاثیری بر پیچیدگی متد نخواهد داشت.برای مثال زمانی که یک رکورد به پایگاه داده میخواهیم اضافه کنید، Room میتواند هم Long و هم void برگرداند. زمانی که کاربر API میخواهد مقداری بازگردد، ابتدا بایستی بداند این مقدار به چه منظور است و چگونه آن را ذخیره کند. زمانی که نیازی به مقدار بازگشتی نباشد، میتوان از متد void استفاده کرد.@InsertLong insertData(Data data);@Insertvoid insertData(Data data);۵- جلوگیری از بروز خطاطراحی بایست به نحوی باشد که از بروز مشکل یا خطا در ابتدای کار جلوگیری کند.رابط کاربری: معمولا کاربران از کاری که دارند انجام میدهند حواسشان پرت میشود و این وظیفه شما است که از بوجود آمدن مشکل و خطا بر اثر بی حواسی کاربران با پیشنهاد دادن راههایی که به آنها کمک کند در راه درست بمانند و لغزش کمتری پیش آید، جلوگیری کند. برای مثال شما میتوانید قبل از عملیاتی که باعث از بین بردن اطلاعات یا عملیات گذشته می شود، از آنها تاییدیه بخواهید یا به آنها گزینه های از پیش تعریف شده پیشنهاد دهید.برای مثال google photos از اینکه شما آلبومی را به اشتباه نکنید با یک dialog تاییدیه از عمل شما اطمینان حاصل میکند. همچنین اپلیکیشن inbox به شما این قابلیت را میدهد که چک کردن ایمیلی را تنها با یک کلیک به تعویق بیاندازید.?API بایستی کاربر را به سمت درست استفاده کردن از آن سوق دهد. از مقادیر پیش فرض هرجا که ممکن است استفاده کنید.کار کردن با APIها بایستی بسیار راحت باشد و احتمال اشتباه و استفاده غلط در آنها بسیار کم باشد. میتوانید برای کمک کردن به کاربران خود، از مقادیر پیش فرض استفاده کنید. برای مثال زمانی که یک پایگاه داده Room میسازید، یکی از مقادیر پیش فرض، این اطمینان را می دهد که داده های شما همواره حفظ میشوند، حتی اگر نسخه پایگاه داده شما بالا رود. این به کاربر قابلیت استفاده بهتر از برنامه ای را که از Room استفاده میکند را میدهد.همچنین Room متدی فراهم کرده است که میتواند این رفتار را تغییر دهد: fallbackToDestructiveMigration که پایگاه داده را به کلی از بین میبرد و با هر نسخه ای که عوض میشود از نو آن را میسازد. البته اگر Migration در نظر نگرفته شده باشد.</description><category>Ali Mardani</category><author>Ali Mardani</author><pubDate>Thu, 05 Apr 2018 12:38:09 +0430</pubDate></item><item><title>توسعه دهندگان هم کاربر هستند - مقدمه</title><link>https://virgool.ir/@alimardani1994/توسعه-دهندگان-هم-کاربر-هستند-r2sk9ycvjoji</link><description>زمانی که درباره کارکرد صحبت میکنیم، تمایل داریم به رابطهای کاربری فکر کنیم، که میتونه نقشه، پیامرسان ها یا برنامه های اشتراک گذاری عکس باشه. ما میخواهیم که رابط کاربریمان پارامترهای کیفی متفاوتی داشته باشد، برای مثال دوست داریم اپلیکیشن نقشه پارامتر های زیر را داشته باشد:حسی، کاربر بتواند با نگاه کردن به برنامه ، به سادگی درک کند که چگونه مسیر بین نقطه a و b را پیدا کند.کارآمد، کاربر بعد از فهمیدن نحوه عملکرد، بتواند سریعا مسیر مورد نظر را پیدا کندصحیح، کاربر بدون هیچ بن بست یا اشتباهی در مسیر، بتواند مسیر بین دو نقطه را طی کند.عملکرد مناسب، کاربر بتواند به راحتی نقشه را بزرگ و کوچک کند و در آن به جست و جو بپردازددسترسی به عملکرد مناسب، کاربر به راحتی بتواند به قابلیت های بزرگ و کوچک کردن و جستجو در نقشه، فقط با حرکت انگشتانش بر روی نقشه دست یابدزمانی که این انتظارها را برای کاربران برنامه مان قائل هستیم، بایستی همین انتظارات را برای رابط های برنامه کاربردی یا به طور اختصار (api) که از آنها استفاده میکنیم، داشته باشیم. اگر رابط کاربری UI رابط بین کاربران و عمکرد اپلیکیشن است، پس API هم رابط بین توسعه دهنده و بدنه کدی است که آن عملکرد(برای مثال نقشه) را پیاده میکند. API ها نیز مانند رابط کاربری باید کارکرد درست و نحوه استفاده راحتی داشته باشند.کتابخانه ها، فریم وورک ها، sdk ها و API ها همه جا هستند و به راحتی قابل دسترس هستند. مادامی که شما کد خود را به ماژول های متفاوت تقسیم میکنید، در واقع یک API بوجود می آید، که در آینده شما و دیگر توسعه دهندگان قرار است با آن کار کنید.عملکرد یک چیز را میتوان اینگونه اندازه گیری کرد: عکس مدت زمانی که طول میکشد یاد بگیرید چگونه از آن استفاده کنید. هم توسعه دهندگان تازه وارد و هم حرفه ای زمان زیادی را صرف یادگیری نحوه استفاده از API ها میکنند. عملکرد ضعیف یک API میتواند توسعه دهنده را به استفاده نادرست و ایجاد باگ و حتی مشکلات امنیتی سوق دهد. این مسائل نه تنها توسعه دهندگان برنامه، بلکه کاربران را اپلیکیشن را نیز تحت تاثیر قرار میدهد. پس اهمیت درست کردن یک API کارآمد اینجا مشخص میشود.در پست های آتی در مورد مواردی که یک محصول(حتی API) را کارآمد میکند، بیشتر صحبت میکنیم.برگرفته از سایت : Medium.com</description><category>Ali Mardani</category><author>Ali Mardani</author><pubDate>Thu, 05 Apr 2018 12:35:26 +0430</pubDate></item></channel></rss>