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

کد نویسی تمیز چیست؟ 

Clean Code اصطلاح مهندسی نرم افزار است که از کتاب نامگذاری شده توسط رابرت سیسیل مارتین سرچشمه گرفته است. clean code یا کدنویسی تمیز یکی از مهمترین اصول برنامه نویسی است و اشاره به این دارد که اسناد، مفاهیم، قواعد و رویه ها بطور شهودی قابل فهم هستند و هر کسی می تواند آنها را با کمترین تحلیلی درک کند.

چرا باید کدنویسی تمیز انجام شود؟

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

ویژگی های کدنویسی تمیز چیست؟

  1. کد تمیز براحتی توسط دیر قابل خواندن است.
  2. یک کد تمیز کدی است که کسی برای ساده و منظم نگه داشتن آن وقت نگذارد.
  3. تمام تست ها را اجرا می کند.
  4. موارد تکراری در آن به حداقل می رسد یا اصلا تکرار نمی شود.
  5. تعداد موجودیت هایی مانند کلاس ها، متدها، توابع و موارد مشابه به حداقل می رسد.
  6. کد تمیز به راحتی قابل تغییر است. با طراحی و معماری مناسب، گسترش کد شما بدون زمان و هزینه زیاد انجام می شود.

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

کدنویسی تمیز چگونه ابداع شد؟

ایده‌ی کدنویسی تمیز، توسط آقای رابرت سی مارتین (Robert C. Martin) که اصطلاحا عمو باب هم به ایشون گفته میشه، به وجود اومد. ایشون یه برنامه‌نویس با سابقه‌ای هستند و طی سال‌ها بررسی در کدهای مختلف، به این نتیجه میرسند که نوشتن کدهای قابل فهم و خوانا یه مساله و موضوع مهمی در حوزه‌ی توسعه نرم‌افزار هستش، از این رو تصمیم به انتشار دانسته‌های خودشون می‌گیرین و کتا‌ب‌های مختلفی در حوزه‌ی توسعه نرم‌افزار تألیف می‌کنند که یکی از محبوب‌ترین این کتاب‌ها، کتاب Clean Code هستش، که در اون به اصول کدنویسی تمیز پرداخته شده.

چرا باید از اصول کدنویسی تمیز پیروی کنیم؟

برای کامپیوتر فرقی نمی‌کند که کد شما تمیز است یا نه! برای کامپیوتر فقط یه سری قواعد منطقی و دستوری مثل سینتکس مهم است که رعایت شوند و کاری به این چیزها ندارد.

ممکن است کدی که شما نوشتید برای خودتان قابل فهم باشد. اما آیا به این هم فکر کردید که برای بقیه هم قابل فهم است یا خیر؟ این موضوع در پروژه‌های تیمی به شدت اهمیت پیدا می‌کند و اگر خوانایی کد شما پایین باشد مممکن است دردسرساز باشد و روند توسعه پروژه کند شود.

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

“هر کسی می تواند کدی بنویسد که یک کامپیوتر بتواند آن را بفهمد. برنامه نویسان خوب کدهایی را می نویسند که انسان ها می توانند آن را بفهمند.” – مارتین فاولر

آشنایی با اصول کدنویسی تمیز

نحوه نامگذاری متغیرها 

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

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


نحوه ایجاد نام های معنی دار

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

“یک نام گذاری خوب باید به شما بگوید که چرا وجود دارد، چه کار می کند، و چگونه استفاده می شود. اگر نامی نیاز به کامنت داشته باشد، آن نام هدف خود را نشان نمی دهد.

نامگذاری بد:

var d; // elapsed time in days

این مدل کد بارها دیده شده و این یک تصور غلط رایج است که شما باید با کامنت خود را پنهان کنید. از حروفی مانند x، y، a یا b به عنوان نام متغیرها استفاده نکنید، مگر اینکه دلیل خوبی وجود داشته باشد (متغیرهای loop از این استثنا هستند).

نام گذاری تمیز:

var elapsedTimeInDays;

var daysSinceCreation;

var daysSinceModification;

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


از اطلاعات نادرست پرهیز کنید

مراقب کلماتی که معنی خاصی دارند باشید. به گروه بندی حساب ها به عنوان accountList اشاره نکنید مگر اینکه نوع آن در واقع یک لیست باشد. این کلمه معنای خاصی دارد و ممکن است به نتایج نادرستی منجر شود.

حتی اگر نوع یک لیست باشد، accounts نام ساده‌تر و بهتری است.

کد نویسی بد:

var accountList = [];

کد نویسی تمیز:

var accounts = []


از کلمات نویز استفاده نکنید

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

برخی از کلمات نویز عبارتند از:

  • The (prefix)
  • Info
  • Data
  • Variable
  • Object
  • Manager

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


از نام های قابل تلفظ استفاده کنید

اگر نمی‌توانید اسمی را تلفظ کنید، بهتر است آن را در کدنویسی خود نگنجانید!

کدنویسی بد:

const yyyymmdstr = moment().format(“YYYY/MM/DD”);

کدنویسی تمیز:

const currentDate = moment().format(“YYYY/MM/DD”);


از نام های قابل جستجو استفاده کنید

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

نام گذاری بد:

if (student.classes.length < 7) {

// Do something

}

نام گذاری تمیز: 

if (student.classes.length < MAX_CLASSES_PER_STUDENT) {

// Do something

}

این گزینه بهتر است زیرا MAX_CLASSES_PER_STUDENT را می توان در بسیاری از مکان ها در کد استفاده کرد. اگر بخواهیم در آینده آن را به ۶ تغییر دهیم، فقط می توانیم ثابت را تغییر دهیم.

مثال بد در ذهن خواننده علامت سوال ایجاد می کند، مثلا اهمیت ۷ چیست؟

همچنین باید از قراردادهای نامگذاری و اعلان ثابت زبان خود مانند private static final در جاوا یا const در جاوا اسکریپت استفاده کنید.

توجه کنید: 

برای هر قانون مفهومی یک کلمه را دنبال کنید. از fetchretrieve, and get  برای یک عملیات در کلاس های مختلف استفاده نکنید. یکی از آنها را انتخاب کنید و از آن در سراسر پروژه استفاده کنید تا افرادی که codebase یا API مشتریان شما را حفظ می کنند بتوانند به راحتی روش های مورد نظر خود را پیدا کنند.

همچنین بخوانید: برنامه Open Source چیست؟


نحوه نوشتن توابع برای داشتن کدنویسی تمیز

توابع را کوچک نگه دارید

توابع باید خیلی کوچک باشند. آنها حداکثر بهتر است ۲۰ خط داشته باشند. هر چه یک عملکرد طولانی تر شود، احتمال اینکه چندین کار را انجام دهد و عوارض جانبی داشته باشد، بیشتر می شود.

مطمئن شوید که توابع فقط یک کار را انجام می دهند

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

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

همچنین بخوانید: کراس پلتفرم چیست؟ 

کپسوله کردن شرایط در توابع

ریفکتورینگ شرط و قرار دادن آن در یک تابع نامگذاری شده، راه خوبی برای خوانایی بیشتر شرط های شما است.

آرگومان کمتر استفاده کنید

توابع باید دو یا کمتر آرگومان داشته باشند، هر چه کمتر بهتر. در صورت امکان از سه یا بیشتر اجتناب کنید.

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

از آرگومان های Flag استفاده نکنید

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

به عنوان مثال، فرض کنید یک تابع وجود دارد که مسئول رزرو بلیط یک کنسرت است و ۲ نوع کاربر وجود دارد: Premium و Regular. شما می توانید کدی مانند این داشته باشید:

public Booking book (Customer aCustomer, boolean isPremium) {
if(isPremium)
// logic for premium book
else
// logic for regular booking

}

آرگومان های Falg طبیعتاً با اصل single responsibility در تضاد هستند. وقتی آنها را می بینید، باید در نظر بگیرید که تابع را به دو قسمت تقسیم کنید.

همچنین بخوانید: گرفتن پروژه برنامه نویسی اندروید، وب و غیره چگونه است؟

از کدگذاری تکراری جلوگیری کنید

کدگذاریِ تکراری (Code repetition) ممکن است ریشه همه خرابی ها در نرم افزار باشد. کد تکراری (Duplicate code) به این معنی است که وقتی منطق تغییر می کند و مستعد خطا است، باید مواردی را در چندین مکان تغییر دهید. از ویژگی های ریفکتورینگ IDE خود استفاده کنید و هر زمان که با یک بخش کد تکراری مواجه شدید، روشی مناسب را استخراج کنید.

از گذاشتن کد در کامنت ها خودداری کنید

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

همچنین بخوانید: معرفی سایت های فریلسری برنامه نویسی ایرانی و خارجی

قوانین زبان خود را بدانید

شما باید قوانین زبان خود را از نظر فاصله، نظرات و نامگذاری موارد بدانید. راهنماهایی برای بسیاری از زبان ها در قوانین برنامه نویسی وجود دارد.

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

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

 

دوره پیشنهادی برای یادگیری برنامه نویسی اندروید:

 

این دوره نیاز به پیش نیاز ندارد. تمامی مفاهیم از صفر تا صد یعنی از سطح مبتدی تا پیشرفته به شما آموزش داده می شود.

 

نتیجه گیری از آموزش کدنویسی تمیز یا Clean Code

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

commentشما بگید!

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

shareاشتراک گذاری این مطلب

آخرین مقالات

آخرین آموزش ها

توجه

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

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

4 دیدگاه
بازخورد درون خطی
مشاهده همه نظرات
بهار نوروزی
12 روز گذشته

نکته های خوبی درباره کدنویسی تمیز بود

زیبا مقدم (پشتیبانی)
مدیر
پاسخ دادن به  بهار نوروزی
10 روز گذشته

مرسی از شما

رضا اسعدی
22 روز گذشته

کد نویسی تمیز خیلی روی نتیجه کار بصورت غیرمستقیم تاثیر داره

زیبا مقدم (پشتیبانی)
مدیر
پاسخ دادن به  رضا اسعدی
22 روز گذشته

درسته

فهرست