چطوری کدهای تمیزتری بنویسیم؟!

یادگیری یک زبان برنامه نویسی کار خیلی سختی نیست فقط با کمی تمرین و پشتکار این امکان وجود داره که در عرض مدت کوتاهی اصول برنامه نویسی رو یاد گرفت اما بدون شک تبدیل شدن به یک برنامه نویس خوب به این راحتی ها امکان پذیر نیست حتی نوشتن برنامه ایی که روی سیستم ما به درستی کار می کنه با نوشتن برنامه ایی که بشه اون رو به عنوان محصول به کاربرها عرضه کرد یک بحث کاملا متفاوت عه.

نوشتن کدهای تمیز و رعایت یکی سری از اصول ها باعث میشه تا در آینده کدهای توسعه پذیرتری داشته باشیم و اگر قراره فردی بعد از ما روی قسمت هایی از پروژه کار کنه به راحتی بتونه با کد پروژه ارتباط برقرار کنه.

نوشتن برنامه ایی که ماشین متوجه بشه کار سختی نیست، هنر ما نوشتن برنامه ایی هستش که انسان اون رو متوجه بشه.

(Martin Fowler)

فکر می کنم بیش از این نیازی به توضیح این مساله نباشه که چرا باید کدهامون رو تمیز و خوانا بنویسیم و بیان دلایل اش کاملا بدیهی و واضحه. در این مطلب سعی می کنم تا نکته هایی که به من کمک کرده تا کدهای خوانا تری بنویسم رو با شما به اشتراک بزارم.

1- از نام های مناسب استفاده کنید.

استفاده از اسامی و نام های مناسب برای کلاس ها، متغیرها و متدها می تونه در آینده به خود شما کمک کنه تا خیلی سریع تر و راحت تر منطق اون متد یا کلاس رو درک کنید و یا اینکه متوجه بشید از این متغیر به چه دلیلی استفاده کردید. در غیر این صورت باید زمان بیشتری رو صرف کنید تا با مهندسی معکوس و خوندن اون تیکه کد متوجه بشید که این قسمت دقیقا با چه هدفی نوشته شده.

مثلا اگر قراره تابعی داشته باشیم برای محاسبه فاصله بین دو نقطه دو تا انتخاب می تونیم داشته باشیم اول dxy دوم distance_between_x_and_y خب خیلی واضحه در صورتی که شما از حالت اول استفاده کنید و برای مثال چند ماه دیگه لازم داشته باشید تا تغییری رو در این قسمت از کدتون اعمال کنید باید به این فکر کنید که خب dxy مخفف چی بود؟ این تابع چی کار میکرد؟ در حالی که اگر از حالت دوم استفاده کرده باشیم فقط با خوندن نام تابع می تونیم متوجه لاجیک به کار رفته در اون تابع بشیم.

2- برای کلاس ها و متدها یک و فقط یک هدف مشخص تعیین کنید.

برنامه نویسی یعنی تبدیل یک تسک بزرگ غیرقابل انجام به چندین تسک کوچک قابل انجام

معمولا در پروژه ها ما با تابع هایی طولانی مواجه میشیم که برای انجام دادن وظیفه اشون باید چندین کار رو انجام بدن مثلا اپدیت کردن امتیازات کاربر براساس خریدهایی که داشته و کامنت هایی که گذاشته در حالت عادی نوشتن همچین تابعی به این شکل عه:

  1. تعداد کامنت های یوزر x را از جدول کامنت ها بخوان
  2. تعداد پرداخت های یوزر x را از جدول پرداخت ها بخوان
  3. برای هر کامنت 3 امتیاز و برای هر پرداخت 5 امتیاز محاسبه کن
  4. امتیازات کاربر را در جدول اطلاعات کاربرها آپدیت کن

همونطور که می بینیم این متد برای اجرا شدن نیاز به اطلاعات مختلفی داره که از طریق 2 تا جدول جداگانه بدست میان و باید در یک جدول سومی ذخیره بشن خب بهتره که این کار رو تقسیم کنیم بین 3 تا متد مختلف یکی برای محاسبه امتیازهای کاربر براساس کامنت هایی که میزاره، یکی برای محاسبه امتیازات خریدهای کاربر و یکی هم برای اپدیت امتیازات کاربر که داخل هردوی متدهای قبلی صدا زده میشه.

3- کدهای غیر ضروری رو پاک کنید.

یکی از عادت های بدی که خود من هم خیلی باهاش درگیر هستم اینه که وقتی دارم یه بخشی از کد رو ریفکتور می کنم محض اطمینان قسمت های قبلی رو کامنت می کنم تا مثلا یه بکاپ از کدهای نوشته شده داشته باشم اما این موضوع در طولانی مدت باعث میشه که شما با حجم عظیمی از کدهای کامنت شده مواجه بشید. در خیلی از موارد هم اون کدهای قدیمی حتی اگه لازم باشه ریستور بشن هم به دلیل تغییرهایی که در لاجیک و قسمت های دیگه پروژه انجام شده کار نخواهند کرد.

4- خوانا بودن کدها بر نشون دادن توانایی های خفن شما ارجحیت داره!

خیلی از مواقع مواجه می شیم با موقعیت هایی که این امکان وجود داره تا چندین خط کد رو توی یک یا دو خط بنویسیم و گاهی واقعا اینکار باعث تمیز تر شدن کدها میشه اما در اغلب اوقات باعث کم شدن خوانایی کدهامون میشه. به اصطلاح ما نباید clever code رو با clean code اشتباه بگیریم.

خلاصه کردن و کم کردن چندین خط توی یک خط به ما حس خفن بودن میده اما به همون نسبت اگر مدتی بعد بخوایم اون قسمت رو دوباره بخونیم و تغییری روش انجام بدیم حتی برای خودمون هم سخته که متوجه منطق به کار رفته درش بشیم.

پس همیشه سعی کنید تا کدهاتون رو برای خواندن و متوجه شدن توسط فرد بعدی که قراره روی این قسمت کار کنه بهینه کنید که این فرد در اکثر موارد خودتون هستید.

5- استایل کدنویسی ثابتی رو دنبال کنید.

یکی از مشکلاتی که باعث میشه تا کد تمیزی نداشته باشیم اینه که برای نوشتن هر قسمت از استاندارد متفاوتی استفاده کنیم. سعی کنید تا وقتی که یه استانداردی رو برای کدهاتون انتخاب می کنید در تمام قسمت های برنامه این استاندارد رو رعایت کنید مثلا اگر قراره تا نام ثابت ها با حروف بزرگ نوشته بشه همه جا اون ها رو بزرگ بنویسید یا مثلا اگر توافق می کنید که از نام گذاری CamelCase استفاده کنید دیگه سراغ underscore naming نرید.

6- معماری درست رو انتخاب کنید.

پارادایم ها و معماری های خیلی خیلیی زیادی وجود دارند که هرکدوم مزایا و معایب خودشون رو دارند اگر بخوایم وقت بزاریم تا با همه اون ها آشنا شیم احتمالا به کارهای مهمتری نمی رسیم. شما لازم نیست تا همه انواع معماری هارو بشناسید تا بهترین اون هارو انتخاب کنید. فقط کافیه تا اونی رو انتخاب کنید که نیازهای شمارو پوشش میده.

مثلا معماری MVC در توسعه وب خیلی محبوب عه و از معماری ECS در طراحی و توسعه گیم ها بیشتر استفاده میشه.

7- Idomهای زبان برنامه نویسی اتون رو یاد بگیرید.

در واقع میشه گفت الگوریتم ها و اصول اولیه تمام زبان های برنامه نویسی یکسان عه اما هر زبان ایی در syntax و ابزارهایی که ارائه می کنه با زبان های دیگه متفاوت هستش و به همین دلیل یادگرفتن امکانات ویژه ایی که هر زبان به ما میده برای تسلط هرچه بیشتر بر روی اون زبان اهمیت پیدا می کنه مثلا قابلیت ایی مثل List Comprehension در زبان برنامه نویسی Python به ما کمک می کنه تا تقریبا 3 خط کد رو به 1 خط کاهش بدیم بدون اینکه خوانایی کد رو کاهش بدیم.

8- کدهای دیگران رو مطالعه کنید.

یکی از بهترین راه ها برای یادگیری هر موضوعی دیدن نمونه هاست برنامه نویسی هم از این قاعده مستثنی نیست. نوشتن کدتمیز و خوب هم میتونه با دیدن نمونه های خوب در ما شکل بگیره. حتی گاهی پیش اومده که من با خوندن کدهای دیگران متوجه ایده های بسیار قشنگی شدم که در مسائل دیگه ایی بهم کمک کرده

پس تا می تونید کدهای افراد مختلف و پروژه های متفاوت رو مطالعه کنید. یکی از بهترین منابع همه برای این موضوع گیت هاب عه.

9- کامنت های خوب بنویسید.

تقریبا از وقتی که برنامه نویسی رو شروع کردم یادم نمیاد که دوره ایی دیده باشم و مدرس اون دوره تشویق به کامنت گذاشتن برای بخش های مختلف کد نکرده باشه اما نکته ایی که معمولا بهش توجه نمیشه اینه که نباید دچار سندرم کامنت بیش از حد بشیم.

قانون مهم:

کامنت خوب کامنت ایی عه که “چرایی” نوشته شدن اون بخش از کد رو توضیح بده نه اینکه “چگونگی” کار کردن اون تیکه کد رو توضیح بده. کد خوب کدی عه که خودش گویای کاری که انجام میده باشه و کامنت خوب توضیح میده که این کد چرا و با چه هدفی نوشته شده.

مثلا قراره بابت هر 5 تاش کامنت کاربر بهش 1 امتیاز بدیم در نتیجه بعد از پیدا کردن تعداد کامنت ها اون رو تقسیم بر 5 می کنیم خب نوشتن این تیکه کد خیلی راحت عه اما اگر کسی از این قانون خبر نداشته باشه و کد ما رو بخونه یا نمی فهمه چرا ما اینجا تقسیم بر 5 کردیم یا متوسل میشه به حدسیات خودش پس بهتره که بالای این خط کد یه خط کامنت بزاریم و مثلا بنویسیم که هر 5 کامنت یه امتیاز داره.

همچنین کامنت ها برای توضیح دادن warning ها هم گزینه مناسبی هستن مثلا پاک کردن این خط باعث بروز مشکل X میشه.

10- کدهاتون رو ریفکتور کنید!

ما به عنوان برنامه نویس دائما درحال یادگیری نکات و کار با تکنولوژی های جدید هستیم حالا اگر بعد از یه مدتی مثلا 6 ماه یا یک سال بعد به کدهای خودتون نگاه کنید اکثرا با یه حالت پوکر فیس دنبال کسی می گردید که این به اصطلاح spaghetti کدهارو نوشته!

پس بهتره هر از چندگاهی برگردید سراغ کدهای قبلی اتون و توی وقت های اضافه اتون کدهاتون رو ریفکتور کنید.

هرجا متوجه شدید کد ایی که روش کار می کنید داره پیچیده میشه یا نیاز به فکر کردن بیش از اون چیزی که لازمه برای متوجه شدنش داره از خودتون بپرسید آیا راه ساده تری هم برای انجام دادنش وجود داره؟ اگر جوابتون به این سوال بله بود به فکر ریفکتور کردن اون قسمت از کد باشید.

منبع
ترجمه و تلخیص ایی از makeuseofus
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا