برنامه نویسی

چطور کد تمیز (Clean Code) بنویسیم؟

چطور کد تمیز (Clean Code) بنویسیم؟

نوشتن کد تمیز ، قابل فهم و قابل نگهداری مهارتی است که تسلط آن برای هر توسعه دهنده ای بسیار مهم است. در این مطلب مهمترین اصولی را که برای بهبود کیفیت کد لازم است را بررسی می کنیم. بیشتر نمونه های کد تمیز از کتاب Clean Code که نوشته آقای Robert J. Martin است گرفته شده است. این یک کتاب کلاسیک برنامه نویسی است و پیشنهاد می شود که کل متن کتاب را بخوانید و از آن استفاده کنید.

1. ساختار در کد تمیز

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

  1. مفاهیم را به صورت عمودی جدا کنید.
  2. کد مرتبط باید به صورت عمودی متراکم به نظر برسد.
  3. متغیرها را نزدیک به کاربرد آنها تعریف کنید.
  4. توابع وابسته باید نزدیک باشند.
  5. توابع مشابه باید نزدیک باشند.
  6. توابع را در جهت نزولی قرار دهید.
  7. خطوط را کوتاه نگه دارید.
  8. از تراز افقی استفاده نکنید.
  9. از فضای سفید (white space) برای ارتباط دادن موارد مرتبط و جداسازی ارتباطات ضعیف استفاده کنید.
  10. تورفتگی را نشکنید.

2. نامگذاری در کد تمیز

ممکن است بگویید واضح است و همه می دانند که نامگذاری خوب کلاس ها ، متد ها و متغیرها بسیار مهم است. یافتن نام ها و کلمات صحیح برای کد شما به اجتناب از نوشتن کامنت های اضافی در مورد توضیحات مربوط به کد کمک می کند. استفاده از موارد Camel Case را برای کدهای جاوا فراموش نکنید. نام کلاس ها باید با حرف بزرگ شروع شود.

  1. نام های توصیفی و بدون ابهام را انتخاب کنید.
  2. تمایز معنادار ایجاد کنید.
  3. از اسامی قابل تلفظ استفاده کنید.
  4. از نامهای قابل جستجو استفاده کنید.
  5. اعداد جادویی را با ثابتهای نامگذاری شده جایگزین کنید.
  6. از رمزگذاری خودداری کنید. پیشوندها را ضمیمه نکنید یا اطلاعات را تایپ نکنید.

اسامی معنی دار

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

کد بد:

var k; // k is kalilinux

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

کد خوب:

var kalilinux;

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

اگر نمی توانید نامی را تلفظ کنید، چگونه می توانید از آن در کامنت ها استفاده کنید؟

کد بد:

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 را می توان در بسیاری از نقاط کد استفاده کرد.

3. متدها

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

  1. کوچک باشد.
  2. یک کار را انجام دهد.
  3. از اسامی توصیفی استفاده کنید.
  4. آرگومان های کمتر را ترجیح دهید.
  5. عوارض جانبی نداشته باشد.
  6. از آرگومان های فلگ استفاده نکنید.

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

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

این احتمالاً مهمترین مفهوم در این مقاله است و عادت کردن به آن کمی طول می کشد. اما به محض این که بدانید، کد شما بسیار بالغ تر به نظر می رسد و به راحتی قابل شکستن، قابل فهم و قابل آزمایش است.

آرگومان های کمتر

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

کد بد:

private void addUserInformation(String name, String street, 
String houseNumber, String city, String country) {}

کد خوب:

private void addUserInformation(String name, Address userAddress) {}
عوارض جانبی نداشته باشد

عوارض جانبی پیامدهای ناخواسته کد شما هستند. آنها ممکن است پارامترهای منتقل شده را در صورت عبور از مرجع تغییر دهند یا شاید یک متغیر جهانی را تغییر دهند.

نمونه:

public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) { 
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPhrase, password);
if ("Valid Password".equals(phrase)) {
Session.initialize();
return true; 
}
}
return false; 
}
}

4. کدهای تکراری (Don’t Repeat Yourself)

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

5. هارد کدینگ

از هارد کدینگ دوری کنید، خصوصا وقتی که عجله دارید. در این حالت نگهداری کد بسیار سخت است و منجر به اشکال و اشتباه می شود. تا آنجا که ممکن است از کلاسهای ثابت، yml/.properties ،generics یا هر چیزی که تیم شما تأیید می کند استفاده کنید.

نمونه:

private int storeClosureDay = 7;
// This can be refactored to use a constant from Java private
int storeClosureDay = DayOfWeek.SUNDAY.getValue()

6. کامنت ها

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

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

نمونه کامنت خوب:.

/**
* This method is intended to add a new address for the customer.
* However do note that it only allows a single address per zip
* code. Hence, this will override any previous address with the
* same postal code. * * @param address an address to be added for an existing customer
*/
/*
* This method makes use of the custom implementation of equals
* method to avoid duplication of an address with same zip code.
*/
public addCustomerAddress(Address address) {}

سخن پایانی

نوشتن کد تمیز مهارتی نیست که بتوان آن را یک شبه به دست آورد. این یک عادت است که باید با در نظر گرفتن این اصول و استفاده از آنها در هنگام نوشتن کد، توسعه یابد. شما می توانید با خواندن کتاب Clean Code، دید خوبی یه نکات کد نویسی تمیز پیدا کنید. همچنین می تواند با تمرین پشتکار به یک کد نویس تمیز تبدیل شوید.

بیشتر بخوانید:

منبع
medium

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

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

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