بهترین نکات مربوط به کدنویسی تمیز (clean code)
۱۹ مهر ۱۴۰۲
clean code یا کدنویسی تمیز به مجموعهای از شیوههای برنامهنویسی گفته میشود که رعایت آنها باعث افزایش خوانایی، پایداری و سادگی کد میشود.
امروزه، کدنویسی تمیز به یک ضرورت تبدیل شده است چرا که به توسعهدهنگان کمک میکند تا کد را خیلی بهتر از قبل، درک کنند و در صورت نیاز، آن را، سادهتر، تغییر بدهند. کدنویسی تمیز در همین حین، زمان بیشتری برای ما میخرد و ریسک تقابل با ارور و خطا را برای ما کاهش میدهد. در ادامه برخی از روشهای کدنویسی تمیز ذکر شدهاند:
1) برای متغیرهای خود، نامهای با مسما به کار ببرید.
بهتر است اسم متغیرها، معنیدار باشد و توضیحاتی در مورد دادهای که در بر دارد، به کاربر بدهد. همین نکته به ظاهر ساده، باعث میشود تا خوانایی کد افزایش یابد. مثال زیر را در نظر بگیرید:
// Bad Example
int x = 5;
// Good Example
int numberOfStudents = 5;
2) کامنتهای کمتری را به کار ببرید.
کامنتها باید در جایی قرار بگیرند که نیاز به توضیحات در آنجا حس میشود. همچنین کامنتها باید واضح باشند و عملکرد اصلی برنامه را با دقت توضیح دهند. استفاده زیاد از کامنتها ممکن است که کد را بهم بریزد و خوانایی آن را کاهش دهد:
// Bad Example
// This function adds two numbers together and returns the result
public int add(int num1, int num2)
{
// add the numbers together
int result = num1 + num2;
// return the result
return result;
}
// Good Example
public int Add(int firstNumber, int secondNumber)
{
int result = firstNumber + secondNumber;
return result;
}
3) از قالببندی ثابت استفاده کنید.
استفاده از یک قالببندی ثابت تاثیر قابل توجهی در افزایش خوانایی کد دارد. از جمله قالببندی ثابت میشود به رعایت تورفتگیها، براکتها و فاصلهگذاریها اشاره کرد. مثال زیر را در نظر بگیرید:
// Bad Example
public void PrintName(string name)
{
Console.WriteLine("Name: " + name);
}
// Good Example
public void PrintName(string name)
{
Console.WriteLine($"Name: {name}");
}
4) توابع و متدهای خود را کوچک و متمرکز بنویسید.
بهتر است که توابع فقط مسئولیت یک کار را داشته باشند و بر روی یک مورد خاص تمرکز داشته باشند. این امر باعث میشود که ما بتوانیم تغییرات را سادهتر در برنامه خود اعمال کنیم:
// Bad Example
public void DoEverything(int x, int y, int z)
{
// do something
// do something else
// and more
}
// Good Example
public int Add(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}
public int Multiply(int firstNumber, int secondNumber)
{
return firstNumber * secondNumber;
}
5) برای توابع و کلاسهای خود، نامهای بامعنی پیدا کنید.
همانطور که نامگذاری متغیرها در خوانایی کد بسیار مهم است، نامگذاری توابع، متدها و کلاسها بر اساس نحوه کارایی آنها نیز بسیار مهم است:
// Bad Example
public void DoSomething(int x, int y, int z)
{
// do something
}
// Good Example
public void CalculateTotalCost(decimal price, int quantity)
{
// calculate total cost
}
6) از ارثبری و پلیمورفیسم استفاده کنید.
دو اصل ارثبری (Inheritance) و چندریختی (Polymorphism) در شیگرایی باعث میشوند تا کد خیلی منعطفتر شود و تغییر آن آسانتر باشد:
// Bad Example
public class Animal
{
public void Walk()
{
// walk
}
}
public class Dog
{
public void Walk()
{
// walk
}
public void Bark()
{
// bark
}
}
// Good Example
public abstract class Animal
{
public abstract void Walk();
}
public class Dog : Animal
{
public override void Walk()
{
// walk
}
public void Bark()
{
// bark
}
}
7) استثناءها و خطاها را مدیریت کنید.
مدیریت استثناءها (exception handling) باعث میشود خطاهایی که کاربران برنامه ممکن است با آن مواجه شوند، به صورت قابل توجهی مدیریت شود. این کار از رفتار غیرمنتظره کد جلوگیری میکند:
// Bad Example
public void Divide(int num1, int num2)
{
int result = num1 / num2;
}
// Good Example
public void Divide(int num1, int num2)
{
try
{
int result = num1 / num2;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero");
// log the error
}
}
8) از دوبارهنویسی پرهیز کنید.
تکرار کد باعث میشود که برنامه ظاهر درهم و نامناسبی را داشته باشد و همین موضوع ممکن است خوانایی و پایداری آن را کاهش دهد، برای جلوگیری از تکرار کد در برنامه میتوانید از توابع، متدها، کلاسها و حتی اصل ارثبری استفاده کنید:
// Bad Example
public void GenerateInvoice(string customerName, List<Product> products)
{
Console.WriteLine("Invoice for " + customerName);
Console.WriteLine("Product\t\tPrice");
decimal total = 0;
foreach (Product product in products)
{
Console.WriteLine(product.Name + "\t\t" + product.Price);
total += product.Price;
}
Console.WriteLine("Total\t\t" + total);
}
// Good Example
public class Invoice
{
public string CustomerName { get; set; }
public List<Product> Products { get; set; }
public decimal GetTotal()
{
decimal total = 0;
foreach (Product product in Products)
{
total += product.Price;
}
return total;
}
}
public class InvoiceGenerator
{
public void GenerateInvoice(Invoice invoice)
{
Console.WriteLine("Invoice for " + invoice.CustomerName);
Console.WriteLine("Product\t\tPrice");
foreach (Product product in invoice.Products)
{
Console.WriteLine(product.Name + "\t\t" + product.Price);
}
Console.WriteLine("Total\t\t" + invoice.GetTotal());
}
منبع: medium.com