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

چرا باید یک کد تمیز بنویسیم؟
نوشتن یک کد تمیز علیرغم سختیهایی که دارد برای پیشرفت بعدی کد و استفادههای آتی بسیار اهمیت دارد. مواردی که اهمیت تمیز بودن کد را دوچندان میکنند در ادامه آورده شدهاند:
-
کارهای تیمی و گروهی
در کارهای گروهی که هر بخش از کد را یکی از افراد انجام میدهند لازم است که همه افراد بهراحتی بتوانند متوجه عملکرد کدها شوند. از طرف دیگر اگر کدهای شما تمیز باشند، کمکگرفتن از همکاران برای رفع باگها بهراحتی انجام میشود. چون بدون حضور شما نیز هرکسی قادر به فهمیدن منطق کد خواهد بود. بهعبارتدیگر کد شما خود عملکردش را بهراحتی توضیح میدهد.
-
توسعه پروژههای متنباز
امروزه پروژههای متنباز در بین برنامهنویسان جایگاه ویژهای دارند. در این نوع پروژهها تمام برنامهنویسان قادر خواهند بود تا به کد شما دسترسی داشته باشند و همچنین کد شما را توسعه دهند. البته که وجود کدهای تمیز در این پروژهها مشارکت دیگر برنامهنویسان را جهت توسعه کد افزایش خواهند داد.
-
هنگام ریفکتور (refactoring) کردن کدها
ریفکتور کردن به روشهایی اطلاق میشود که در ساختار کد تغییراتی ایجاد میکنند. این تغییرات میتواند شامل تغییر نام یا کلاسبندی کردن توابع باشند اما بههیچعنوان در اجرا یا کارکرد کد تغییری ایجاد نمیکند؛ بنابراین با وجود داشتن کدهای تمیز امکان ایجاد این تغییرات یا بهروزرسانیهای کد کار سختی نخواهد بود. بهعبارتدیگر شما میتوانید کدهایی که مدتها قبل نوشتید را بهراحتی بخوانید و تغییرات لازم را درون آن ایجاد کنید. بنا بر تمام آنچه گفته شد خیلی مهم است که یاد بگیریم کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟

چگونه کدهای تمیزی بنویسیم؟
در این بخش نکات مهم که برای نوشتن یک کد تمیز لازم است رعایت شوند، توضیح داده شدهاند.
-
نامگذاری متناسب با کاربرد متغیر یا توابع
برای برنامهنویسی بسته بهسادگی یا پیچیدگی کد، متغیرها، توابع و کلاسهای مختلفی تعریف میشوند. درصورتیکه این اسامی درست نامگذاری شوند بهراحتی قابل تشخیص و تفکیک هستند. برعکس، اگر نامگذاریها بهصورت اختصاری یا بهصورت بیمعنی انجام شوند، حتی خواند کد توسط خود برنامهنویس کار سختی خواهد بود.
بنابراین زمانی که شما از نامهایی در دستهبندی غیرمشخص و غیر توصیفی برای متغیرها، کلاسها و توابع استفاده میکنید، در واقع منطق برنامه را در دیدگاه هر برنامهنویسی که اقدام به خواندن کد میکند، مبهمتر میکنید. این برنامهنویس حتی ممکن است خود شما باشید. برای مثال نام متغیری dxy است. این نام هیچ مفهومی را به ذهن نمیرساند و تنها چینش حروف بیمعنی در کنار هم است. در عوض distancexy عبارت مناسبتری است و بهسادگی کاربرد متغیر را با نام خود نشان میدهد.
در مورد نامگذاری توابع و کلاسها هم باید همین مسئله را رعایت کرد. یعنی بهجای آنکه نام کلاسی را که تانژانت یک زاویه را محاسبه میکند، بیربط بنویسیم یا بهاختصار CalcTan() نامگذاری کنیم باید به طور کامل کارکرد تابع یا کلاس را با نام آن توضیح دهیم؛ بنابراین برای نامگذاری چنین تابعی CalculateTangant() نام مناسبی است.

-
هر تابع یا کلاس کار مخصوص به خود را انجام دهد
برای اینکه بدانیم کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟ باید کد نسبتاً کوتاه و قابل فهمی داشته باشیم. شاید تابهحال کدی دیده باشید که چند صد خط است و خواندن آن از بعد از کار معدن سختترین کار دنیا باشد!
این تابع قطعا قابل تفکیک به توابع جداگانه با خطوط کمتر است. البته گاهی برنامهنویسان برای ساده شدن کار درون این کدهای چند صد خطی توضیحاتی را اضافه میکنند اما این تنها یک کمک کوچک برای خواندن کد است. بهترین کار این است که متناسب با کارکرد هرکدام از خطوط کد، یک تابع جداگانه تعریف شود که کار و هدف مخصوص به خود را انجام میدهد. در اصل هرچه یک کد سادهتر باشد، یعنی کد تمیزتر و حرفهایتری است.
برای مثال اگر شما یک تابع داشته باشید که هدف اصلی آن محاسبه معدل دانشآموزان یک کلاس است، این تابع باید به توابع سادهتری تقسیم شود. مثلا یک تابع برای دریافت معدل از پایگاهداده و یک تابع نیز برای محاسبات لازم تعریف میشود. تابع دیگری هم برای نمایش یا ذخیره معدل دانشآموزان در پایگاهداده لازم است. بهاینترتیب یک تابع به چند تابع ساده تقسیم میشود.
-
حذف کدهای اضافی
استفاده از کدهای اضافه نوعی رفتار در برخی برنامهنویسان است که برایشان مانند عادت شده است. منظور از کدهای اضافی کدهایی هستند شاید در ابتدا بخشی از کد بودهاند اما به دلایلی کد بهتری به ذهنتان میرسد و آنها را کامنت میکنید. علت اینکه برخی از برنامهنویسان، بهجای اینکه این کدها را پاک کنند، کامنت میکنند این است که تصور میکنند در ادامه کار به این کد نیاز خواهند داشت. البته معمولا زمانی که کد جدید توسعه پیدا میکند معمولا دیگر کد قبلی کارایی ندارد.
این کدهای غیرضروری که میتوان کدهای پشتیبان نامید، در نرمافزارهای کنترل سورس اهمیت چندانی ندارند. علت این مسئله منسوخ شدن کدهای اضافی در نرمافزارهای کنترل سورس به طور پیشفرض است؛ بنابراین اگر از خود میپرسید کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟ بهتر است از این نرمافزارهای کنترل سورس مانند گیت (Git) یا Mercurial استفاده کنید. این نرمافزارها کمک بسیار زیادی به تمیزتر شدن کدها میکنند.
-
کد خوانا یا کد هوشمند
درست است که ما میگوییم باید کدهای اضافی حذف شوند اما بههیچعنوان منظور از این کار کوتاه کردن کدها با پیادهسازی کدهای پیچیدهتر نیست. اینکه یک کد چند خطی تبدیل به یک کد یک خطی شود باعث مرتبتر شدن کد نمیشود، بلکه این کد باعث درک سختتر کد میشود. شاید اینگونه یک برنامهنویس بتواند مهارت خود را به رخ دیگران بکشد اما ممکن است پیچیده شدن کد، روند رفع باگ را سخت کند.
این یک واقعیت است که نوشتن کدهای کوتاه بهجای کدهای چندخطی نشانگر هوش و قدرت برنامهنویس است اما یادتان باشد یک کد همیشه باید در بهینهترین حالت ممکن باشد. شاید روزی خودتان هم نتوانید کد هوشمندانه خود را درک کنید و هیچ چیزی بدتر از این نیست!
-
همیشه یک سبک کدنویسی داشته باشید
سبکهای برنامهنویسی مختلفی وجود دارند و هدف ما این نیست بین این سبکها یکی را انتخاب کنیم. نکته مهم در سبک برنامهنویسی رعایت سبک در تمام طول کد است. نباید اینگونه باشد که در نوشتن یک کد از سبکهای مختلفی در هر بخش استفاده کرده باشید.
برای توضیحات بیشتر اگر شما تصمیم گرفتهاید قبل از فراخوانی متود از اسپیس استفاده کنید، نباید در جای دیگری از کد بهجای اسپیس از تب (tab) استفاده شود. بهعبارتدیگر هر کاری که مایلید، انجام دهید. فقط دقت کنید این کار در همهجا کد یکنواخت باشد.
در این قسمت با معرفی دو روش نامگذاری یاد میگیریم که کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟ برای مثال اگر از روش نامگذاری شتری (در این نوع نامگذاری اسمها بهصورت کلمات چسبیده به هم هستند و فقط حرف اول هر کلمه بزرگ نوشته میشود تا از دیگر کلمات تفکیک شود) استفاده میکنید، در تمام کد همین روش را ادامه دهید. همچنین اگر از روش نامگذاری با زیرخط (underscore_naming) برای اسامی متغیرها یا کلاسها استفاده میکنید، نباید آن را با روش نامگذاری شتری مخلوط کنید.
بعضی از زبانهای برنامهنویسی مانند سی شارپ و پایتون، سبک کدنویسی مخصوص به خود را دارند که میتوانید طبق دستورالعمل آنها رفتار کنید. البته دقت داشته باشید که قبل از شروع به برنامهنویسی یک نقشه راه برای خود ترسیم کنید.

-
معماری مناسب هدفتان را انتخاب کنید
معماری نقش مهمی در پاسخ به سوال اساسی ما یعنی کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟ دارد. معماریهای مختلفی برای انجام پروژههای شما وجود دارند که بعضی آنها بهروزتر و با قابلیت بالایی هستند. دقت کنید بهترین معماری لزوما مناسبترین معماری برای شما نیست. مثلا معماری مدل ویو کنترلر (view) معماری بسیار محبوب و کارآمدی است و کار نگهداری و توسعه کد را بسیار آسان میکند.
معماری الگوی نهاد - مؤلفه - سیستم (ECS)نیز برای برنامهنویسی بازیها متداول است. شما باید متناسب با درکی که از انجام پروژه خود دارید، مناسبترین معماری را انتخاب کنید تا نظم بیشتری در کد شما ایجاد شود.
-
استفاده از اصطلاحهای مخصوص به هر زبان
ظاهرا همه زبانهای برنامهنویسی مشابه هم هستند اما واقعیت این است که تفاوتهای ظریفی بین آنها وجود دارند. سعی کنید برای استفاده از هر زبان به این تفاوتها دقت کنید و متناسب با زبان برنامهنویسی خود از الگوهای صحیح استفاده کنید. هنگام استفاده از هرکدام از زبانهای برنامهنویسی این سوال را از خود بپرسید کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟
-
کد افراد حرفهای در برنامهنویسی را بخوانید
برای اینکه در کدنویسی استاد شوید باید کد استادان برنامهنویسی را با دقت بخوانید و نکات آن را بیاموزید. البته دسترسی به کد استادان بزرگ در حوزه برنامهنویسی توسط شرکتهای بزرگ مثل مایکروسافت ممکن نیست. اما وجود نرمافزارهای متنباز مانند گیتهاب فرصت خوبی را به برنامهنویسان میدهد تا بتوانند مشهورترین سورسهای مربوط به زبان برنامهنویسی خود را بیابند و از آن بیاموزند.
علت اصلی وجود چنین پروژههایی بهصورت متنباز این است که بقیه بتوانند از نکات این پروژهها یاد بگیرند و تبدیل به برنامهنویسهای موفقتری شوند.
این کدها چون برای دسترسی عموم آزاد هستند به سادهترین و مرتبترین حالت ممکن نوشته شدهاند تا هم باعث فهم آسان مبتدیان شود و هم امکان کمکگرفتن و توسعه کد توسط برنامهنویسان حرفهای را فراهم کند.

-
درج توضیحات مناسب در متن
نوشتن توضیحات درون کد یکی از آسانترین و ابتداییترین روشهای نوشتن یک کد تمیز است. افراد مبتدی معمولا برای نوشتن یک کد تمیز از همین مرحله شروع میکنند. البته باید توجه داشت درج توضیحات بیش از حد به جز طولانی کردن و خستهکنندهتر کردن کد خاصیت دیگری ندارند. توضیحات باید به جا و مفید باشند. توضیح مواردی که در خود کد مشخص است، زیادهگویی محسوب میشود.
البته توضیحات هشداردهنده بسیار مهم هستند. برای مثال وقتی کامنت گذاشته میشود که حذف این بخش باعث غیرفعال شدن خطوط 2 یا 3 میشود، بسیار اهمیت دارد.
بازسازی یا ریفکتورینگ، مهمترین روش
بازسازی یکی از مهمترین نکات برای جواب سوال کد تمیز چیست؟ چگونه تمیز کد بنویسیم؟ است. بازسازی به معنای ایجاد تغییرات در کد است. البته این تغییرات باید بهگونهای باشند که عملکرد کد را بهبود ببخشند اما در کارکرد آن خلل یا تغییری وارد نیاورند.
نوشتن یک کد کار آسانی است اما اینکه این کد کاملا خوانا و مشخص نوشته شده باشد، اهمیت بالایی دارد. بازسازی، کاری زمانبر و گاهی سخت است اما نتایج آن در بهبود خوانایی و نگهداری کد و همچنین تعامل با برنامهنویسان دیگر در راستای توسعه کد خود را نشان میدهد.

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





