ویرگول
ورودثبت نام
امیرمحمد ابوالحسنی
امیرمحمد ابوالحسنیبرنامه نویس فرانت‌اند
امیرمحمد ابوالحسنی
امیرمحمد ابوالحسنی
خواندن ۴ دقیقه·۸ ماه پیش

کدنویسی تمیز: نکات کلیدی از دوره‌ی Maximilian Schwarzmüller - بخش اول

در این مقاله قصد دارم نکاتی را که از مشاهده‌ی دوره‌ی «کد تمیز» به تدریس Maximilian Schwarzmüller آموخته‌ام، با نگارشی شخصی و ساده با شما به اشتراک بگذارم. بی‌مقدمه سراغ اصل ماجرا برویم: کد تمیز چیست و چرا اهمیت دارد؟

کد تمیز چیست؟

کد تمیز، قابل فهم و خواناست؛ در حالی که کد شلوغ و نامرتب (یا به‌اصطلاح کثیف) چنین نیست. شاید بتوان گفت این تعریف، مهم‌ترین پیام این مقاله است. تمام نکات و توصیه‌هایی که در ادامه می‌آیند، در راستای دستیابی به همین هدف ارائه شده‌اند: افزایش خوانایی و درک‌پذیری کد.

هدف از نوشتن کد تمیز

هدف از نوشتن کد تمیز، صرفاً عملکرد فنی نیست؛ بلکه ایجاد کدی مختصر، معنادار و قابل درک است. کدی که نه‌تنها زمان کمتری برای فهمیدن می‌طلبد، بلکه برای توسعه‌دهندگان خواندن و کار کردن با آن لذت‌بخش است.

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

رابطه‌ی دوطرفه‌ی کد تمیز و اصول کدنویسی

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

کد تمیز ⇔ پایبندی به اصول، الگوهای کدنویسی و بهترین روش‌ها

اهمیت موضوع

هیچ کدی کامل و نهایی نیست؛ همیشه می‌توان آن را بهبود بخشید. ریفکتورینگ یا بازنویسی کد، بخش طبیعی چرخه‌ی توسعه‌ی نرم‌افزار است و در بلندمدت باعث افزایش بهره‌وری و کاهش هزینه‌های نگهداری می‌شود.

اگر بین "کد سریع" و "کد تمیز" مردد هستید، به یاد داشته باشید که هرچند نوشتن کد تمیز در ابتدا زمان‌برتر است، اما در بلندمدت، پروژه را پایدارتر، قابل‌نگهداری‌تر و توسعه‌پذیرتر می‌کند.

اهمیت نام‌گذاری

نام‌گذاری مناسب یکی از مهم‌ترین عوامل در افزایش خوانایی و درک سریع‌تر کد است. نام مناسب کمک می‌کند تا نیازی به مرور خط به خط کد برای درک عملکرد یا نوع داده‌ها نباشد.

  • متغیرها، ثابت‌ها و پراپرتی‌ها باید طوری نام‌گذاری شوند که هم نوع داده‌ی ذخیره‌شده و هم نقش آن‌ها را مشخص کنند. مثلاً برای متغیر بولی، از فرم سوالی مثل isValid استفاده کنید.
  • برای متغیرهای عددی یا متنی، از نام‌هایی استفاده کنید که مقدار مورد نظر را توصیف کنند، مثل userAge یا emailAddress.
  • توابع و متدها باید نشان دهند چه عملی انجام می‌دهند. بهتر است نام‌ آن‌ها با یک فعل یا عبارت توصیفی همراه باشد؛ مثل sendData() یا getUserInfo(). توابع بولی بهتر است به صورت سوالی باشند، مانند hasPermission().
  • کلاس‌ها باید به‌روشنی موضوع و وظیفه‌ی خود را بازتاب دهند؛ مثلاً کلاس User یا Admin.

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

چند مثال از نام‌گذاری صحیح

  • اگر متغیری شامل اطلاعات کاربر (نام، ایمیل، سن) باشد، استفاده از نام‌هایی مثل u یا data بسیار گنگ است. به‌جای آن، نام‌هایی مانند user یا customer انتخاب‌های بهتری هستند.
  • برای تابعی که اطلاعات کاربر را ذخیره می‌کند، نام‌هایی مثل process() یا handle() گنگ هستند. نام‌هایی مثل saveUser() یا user.store() دقیقاً هدف عملکرد را مشخص می‌کنند.
  • کلاس‌هایی با نام‌هایی مثل Uentity یا ObjA باعث گیجی می‌شوند. اما نام‌هایی مثل User یا Admin به‌خوبی نقش کلاس را نشان می‌دهند.

کامنت‌گذاری در کد

کامنت‌ها باید فقط در موارد ضروری استفاده شوند. بسیاری از کامنت‌ها نه‌تنها مفید نیستند، بلکه ممکن است خوانایی کد را کاهش دهند.

باید طوری نوشته شود که تا حد امکان نیازی به توضیح نداشته باشد. به عنوان مثال:

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

با این حال، مواردی وجود دارد که کامنت‌های خوب و مفید هستند، از جمله:

  • کامنت‌های قانونی یا مربوط به مجوز در ابتدای فایل‌ها
  • کامنت‌های توضیحی برای منطق‌های پیچیده (مثل RegExهای خاص)
  • هشدارهای سازگاری برای مرورگر یا پلتفرم خاص
  • کامنت‌های TODO برای یادآوری کارهای آینده (البته نباید جایگزین کامل کردن کدها شود.)
  • مستندسازی برای معرفی نحوه‌ی استفاده از کتابخانه یا سرویس

فرمت و قالب‌بندی

قالب‌بندی شاید از نظر فنی تأثیری بر اجرای کد نداشته باشد، اما نقش کلیدی در افزایش خوانایی و درک سریع‌تر کد ایفا می‌کند. کدی که به‌درستی فرمت شده باشد، مانند یک مقاله‌ی منظم و قابل دنبال‌کردن است.

فرمت عمودی

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

فرمت افقی

  • از خطوط طولانی و نیاز به اسکرول افقی پرهیز کنید.
  • از تورفتگی (Indentation) یکنواخت استفاده کنید— اگر زبان برنامه‌نویسی آن را اجباری نکند.
  • خطوط پیچیده را به چند خط بشکنید.
  • استفاده از متغیرهای کمکی برای کاهش پیچیدگی هر خط توصیه می‌شود.

در زبان‌های مختلف، سبک‌های قالب‌بندی متفاوتی وجود دارد. راهنماهایی مانند JavaScript Style Guide می‌توانند کمک‌کننده باشند. بسیاری از ویرایشگرهای مدرن (IDE) نیز قابلیت فرمت خودکار (auto-formatting) را دارند.

سخن پایانی

آنچه در این مقاله خواندید، بخش اول از نکاتی بود که از دوره‌ی Clean Code یاد گرفته‌ام. اگر این موضوع برایتان جذاب بوده، حتماً بخش دوم را برای دریافت دیدگاه‌ها و مثال‌های عملی بیشتر بررسی کنید!

کد تمیزclean code
۶
۱
امیرمحمد ابوالحسنی
امیرمحمد ابوالحسنی
برنامه نویس فرانت‌اند
شاید از این پست‌ها خوشتان بیاید