پرشین تم مقالات اصول کدنویسی تمیز

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

image profile پرشین تم - 23 خرداد 1403 - 19:59 دانلود مقاله

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

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

 

Clean Code یا کد تمیز چیست؟

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

 

چرا Clean Code مهم است؟

  1. خوانایی: خواندن کد تمیز آسان است، به این معنی که هر کسی - از جمله خود شما در آینده - می تواند آن را به سرعت درک کند. این امر زمان لازم برای درک عملکرد کد را کاهش می دهد و منجر به توسعه سریعتر و اشکال زدایی راحت تر می شود.
  2. قابلیت نگهداری: کد بیشتر از آنچه نوشته شده خوانده می شود. هنگامی که کد تمیز می نویسید، به مرور زمان نگهداری و گسترش برنامه آسان تر می شود. این در چرخه عمر توسعه نرم افزار، جایی که پروژه ها اغلب تکامل می یابند و رشد می کنند، بسیار مهم است.
  3. همکاری: کد تمیز همکاری را تشویق می کند. وقتی کد شما تمیز و منظم باشد، سایر اعضای تیم می توانند به طور موثر روی آن کار کنند. این کار تقسیم وظایف و کار بر روی بخش های مختلف پایگاه کد را به طور همزمان آسان تر می کند.
  4. کاهش باگ: کد تمیز احتمال معرفی باگ ها را کاهش می دهد. کدهایی که درک آن دشوار است، بیشتر در معرض خطا در هنگام اصلاحات یا بهبود هستند.
  5. کارایی: کد تمیز کد کارآمد است. معمولاً سریعتر اجرا می شود و از منابع کمتری استفاده می کند زیرا از عملیات غیر ضروری و پیچیدگی جلوگیری می کند.

اکنون که متوجه شدیم چرا کد تمیز مهم است، اجازه دهید برخی از بهترین شیوه ها و اصول را بررسی کنیم تا به شما در نوشتن کد پاک کمک کنند.

 

بهترین روش ها و اصول برای نوشتن کد تمیز

1- نام های معنی دار متغیرها و توابع

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

# Bad variable name
x = 5

# Good variable name
total_score = 5

 

2- توابع و روش ها را کوتاه نگه دارید

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

// Long and complex function
function processUserData(user) {
    // Many lines of code...
}

// Refactored into smaller functions
function validateUserInput(userInput) {
    // Validation logic...
}

function saveUserToDatabase(user) {
    // Database operation...
}

 

3- توضیحات و مستندات

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

# Bad comment
x = x + 1  # Increment x

# Good comment
# Calculate the total score by incrementing x
total_score = x + 1

 

4- قالب بندی و تورفتگی سازگار

به سبک کدنویسی و تورفتگی ثابت پایبند باشید. این امر باعث می شود که پایگاه کد تمیز و منظم به نظر برسد. اکثر زبان های برنامه نویسی دارای استانداردهای کدنویسی پذیرفته شده توسط جامعه خود هستند (به عنوان مثال، PEP 8 برای پایتون، eslint برای جاوا اسکریپت) که باید از آنها پیروی کنید. سازگاری همچنین قراردادهای نامگذاری، فاصله گذاری و ساختار کد را شامل می شود.

// Inconsistent formatting
if(condition){
    doSomething();
  } else {
      doSomethingElse();
}

// Consistent formatting
if (condition) {
    doSomething();
} else {
    doSomethingElse();
}
 
5- اصل DRY (خودت را تکرار نکن).
از تکرار کد خودداری کنید. حفظ کد تکراری سخت تر است و خطر ناهماهنگی را افزایش می دهد. استخراج عملکردهای رایج به توابع، متدها یا کلاس‌ها برای ارتقای قابلیت استفاده مجدد کد. هنگامی که نیاز به ایجاد تغییر دارید، فقط باید آن را در یک مکان انجام دهید.
فرض کنید روی یک برنامه جاوا اسکریپت کار می کنید که قیمت کل اقلام در سبد خرید را محاسبه می کند. در ابتدا، شما دو عملکرد جداگانه برای محاسبه قیمت هر نوع کالا دارید: یکی برای محاسبه قیمت یک کتاب و دیگری برای محاسبه قیمت یک لپ تاپ. این کد اولیه است:
function calculateBookPrice(quantity, price) {
    return quantity * price;
}

function calculateLaptopPrice(quantity, price) {
    return quantity * price;
}

 

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

 

function calculateItemPrice(quantity, price) {
    return quantity * price;
}

const bookQuantity = 3;
const bookPrice = 25;

const laptopQuantity = 2;
const laptopPrice = 800;

const bookTotalPrice = calculateItemPrice(bookQuantity, bookPrice);
const laptopTotalPrice = calculateItemPrice(laptopQuantity, laptopPrice);

 

در این کد refactored، ما یک تابع accountItemPrice داریم که قیمت کل را برای هر نوع کالا بر اساس مقدار و قیمت ارائه شده به عنوان آرگومان محاسبه می‌کند. این به اصل DRY پایبند است زیرا منطق محاسبه دیگر تکراری نیست.

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

 

6- از فضای خالی معنی دار استفاده کنید

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

 

// Poor use of whitespace
const sum=function(a,b){return a+b;}

// Improved use of whitespace
const sum = function (a, b) {
    return a + b;
}
 
7- رسیدگی به خطا
با ظرافت به خطاها رسیدگی کنید در کد خود از بلوک‌های مربوط به تلاش یا مکانیسم‌های رسیدگی به خطا استفاده کنید. این کار از خرابی های غیرمنتظره جلوگیری می کند و اطلاعات ارزشمندی را برای اشکال زدایی ارائه می دهد. خطاها را سرکوب نکنید یا آنها را بدون پاسخ مناسب ثبت نکنید.
 
// Inadequate error handling
try {
    result = divide(x, y);
} catch (error) {
    console.error("An error occurred");
}

// Proper error handling
try {
    result = divide(x, y);
} catch (error) {
    if (error instanceof ZeroDivisionError) {
        console.error("Division by zero error:", error.message);
    } else if (error instanceof ValueError) {
        console.error("Invalid input:", error.message);
    } else {
        console.error("An unexpected error occurred:", error.message);
    }
}

 

8- تست کردن

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

 

// Example using JavaScript and the Jest testing framework
test('addition works correctly', () => {
    expect(add(2, 3)).toBe(5);
    expect(add(-1, 1)).toBe(0);
    expect(add(0, 0)).toBe(0);
});

 

9- بازسازی

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

فرض کنید تابعی دارید که قیمت کل اقلام در سبد خرید را با درصد تخفیف ثابت محاسبه می کند:

 

function calculateTotalPrice(cartItems) {
    let totalPrice = 0;
    for (const item of cartItems) {
        totalPrice += item.price;
    }
    return totalPrice - (totalPrice * 0.1); // Apply a 10% discount
}

 

در ابتدا، این تابع قیمت کل را محاسبه می کند و یک تخفیف ثابت 10٪ اعمال می کند. با این حال، با پیشرفت پروژه، متوجه می شوید که باید از تخفیف های متغیر پشتیبانی کنید. برای اصلاح کد به منظور انعطاف پذیری بیشتر، می توانید یک پارامتر تخفیف را معرفی کنید:

 

function calculateTotalPrice(cartItems, discountPercentage) {
    if (discountPercentage < 0 || discountPercentage > 100) {
        throw new Error("Discount percentage must be between 0 and 100.");
    }

    let totalPrice = 0;
    for (const item of cartItems) {
        totalPrice += item.price;
    }

    const discountAmount = (totalPrice * discountPercentage) / 100;
    return totalPrice - discountAmount;
}

 

در این کد بازسازی شده:

 

  • ما یک پارامتر discountPercentage به تابع accountTotalPrice اضافه کرده ایم که به شما امکان می دهد درصد تخفیف را هنگام فراخوانی تابع مشخص کنید.
  • ما اعتبارسنجی را روی پارامتر discountPercentage انجام می‌دهیم تا مطمئن شویم که در محدوده معتبر (0 تا 100%) قرار می‌گیرد. اگر در محدوده نباشد، خطا می دهیم.
  • محاسبه تخفیف اکنون بر اساس درصد تخفیف ارائه شده است، که عملکرد را انعطاف‌پذیرتر و سازگارتر با نیازهای متغیر می‌کند.

 

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

 

10- کنترل نسخه

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

 

 

منبع:dev.to

با خرید اشتراک می توانید تا چندین برابر مبلغ خرید اشتراک خود قالب های HTML ، سورس کدهای آماده و یا مقالات دانلود کنید
شما می توانید تنها فقط با مبلغ 3,000,000 میلیون تومان وب سایت سفارسی برای خود داشته باشید
محبوب ترین مقالات
تفاوت بین CSS و SCSS چیست؟ تفاوت بین CSS و SCSS چیست؟
category برنامه نویسی 07 اسفند 1402
تفاوت بین RDBMS و DBMS تفاوت بین RDBMS و DBMS
category برنامه نویسی 02 فروردین 1403
کاوش در معماری GPT-3 کاوش در معماری GPT-3
category هوش مصنوعی 12 اسفند 1402
کلمات کلیدی در SQL کلمات کلیدی در SQL
category برنامه نویسی 01 خرداد 1403
تفاوت بین CSS، SASS و SCSS چیست؟ تفاوت بین CSS، SASS و SCSS چیست؟
category برنامه نویسی 13 اسفند 1402
انواع Join در SQL انواع Join در SQL
category برنامه نویسی 02 فروردین 1403
ChatGPT چیست؟ ChatGPT چیست؟
category هوش مصنوعی 12 اسفند 1402
آخرین مقالات
🎨 نظریه یا تئوری طراحی چیست؟ 🎨 نظریه یا تئوری طراحی چیست؟ نظریه طراحی چارچوب فکری است که نحوه درک، خلق و ارزیابی طراحی را هدایت می‌کند. این نظریه، فلسفه، زیبایی‌شناسی، عملکرد و...
category کامپیوتر 05 مرداد 1404
سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو سفر من به داستان‌سرایی بصری - طراحی رابط کاربری و طراحی لوگو چگونه سفر خود را به سمت طراحی لوگو، گرافیک و رابط کاربری/تجربه کاربری آغاز کنید. برای موفقیت در طراحی لوگو، طراحی گراف...
category کامپیوتر 02 مرداد 1404
🧠 درک هوش مصنوعی- از مبانی تا مرزها 🧠 درک هوش مصنوعی- از مبانی تا مرزها هوش مصنوعی تقریباً هر صنعتی را تغییر شکل می‌دهد، در این مقاله با یک مرور کلی آکادمیک سطح بالا شروع کنیم و آن را به بخش...
category هوش مصنوعی 27 تیر 1404