اصلاح کدهای برنامه (2)

چاپ

از تعدد پارامتر بپرهیزید

به جای اینکه از تعداد زیادی پارامتر استفاده کنید، از یک کلاس استفاده کنید.

//avoid
public void Checkout(string shippingName, string shippingCity, 
       string shippingSate, string shippingZip, string billingName, 
       string billingCity, string billingSate, string billingZip)
{

}  
 

به جای استفاده از این همه پارامتر می توان از کلاس استفاده کرد.

از عبارتهای پیچیده بپرهیزید

if(product.Price>500 && !product.IsDeleted && 
            !product.IsFeatured && product.IsExported)
{
   // do something
}

عبارتهای پیچیده دارای معانی در پس زمینه خود هستند که توسط چندین عبارت مخفی شده اند. می توانیم عبارت پیچیده را در یک شی با استفاده از ویژگی هایش محصور کنیم. در این صورت کد خوانا تر می شود.

تعداد return ها را کاهش دهید

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

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

//avoid
if(product.Price>15)
{
   return false;
}
else if(product.IsDeleted)
{
   return false;
}
else if(!product.IsFeatured)
{
   return false;
}
else if()
{
   //.....
}
return true;
 
//DO
var isValid = true;
if(product.Price>15)
{
   isValid= false;
}
else if(product.IsDeleted)
{
   isValid= false;
}
else if(!product.IsFeatured)
{
   isValid= false;
}
return isValid;

فرض کنید 4 نقطه خروجی در 20 الی 30 خط کدی که نوشته اید وجود دارد. وجود این چهار نقطه خروج، درک و دیدن اینکه داخل متد چه اتفاقی می افتد و چه چیزی و در چه زمانی اجرا خواهد شد را بسیار دشوار می سازد.




مرجع:" Code Complete" by Steve McConnell

متغیرها در کنار محل استفاده قرار گیرند. 

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

Assertion  یا حکم  

Assertion کدی است که در طول توسعه از آن استفاده می شود — معمولا یک روتین یا یک ماکرو — که اجازه می دهد که خودش را در حین اجرا چک کند. True بدین معنا است که همه چیز همانگونه که انتظار می رفت در حال اجرا است. False بدین معنا است که خطایی غیر منتظره در کد رخ داده است. Assertion معمولا دو آرگومان می گیرد: یک عبارت بولین که فرضی را توصیف می کند که مقدار آن باید true شود و یک پیغام که اگر حاصل فرض false شد نمایش داده می شود.

Assertion  به ویژه در سیستم های بزرگ و پیچیده و در سیستم های دنیای واقعی مفید فایده است.

مثال: اگر یک سیستم فرض کند که حداکثر صدهزار رکورد کاربر وجود دارد، سیستم ممکن است شامل یک assertion باشد که تعداد رکوردها کمتر یا مساوی صدهزار باشد. بنابراین assertion در این محدوده ساکت خواهد بود. اگر با رکوردهای بیشتری مواجه شد، با صدای رسا فریاد می زند ("assert") که خطایی در سیستم وجود دارد.

بررسی نقاط انتهایی حلقه

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

نتیجه گیری   

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

کد بزنید برای لذت بردن