یک: به جای بازگرداندن شماره خطا، از استثناءها استفاده کنید. نمونه زیر را ببینید:
public int ReturnErrorCodes(int n1) { if(n1==0) return -1; if(n1<0) return -2; if(n1>_max) return -3; return n1; }
public int ReturnErrorCodes(int n1) { if(n1==0) throw new ZeroException(); if(n1<0) throw new MinException(); if(n1>_max) throw new MaxException(); return n1; }
امروزه دیگر برگرداندن شمارههای خطا منسوخ شده و جای آن از کلاسهای استثناء استفاده میکنند و دریافت آن را از طریق Catch کنترل میکنند. از مزایای آن میتوان به این اشاره کرد که کد اصلی، عاری از دستورات شرطی برای چک کردن میشود و کد، حالت مختصرتری به خود میگیرد. در یک نگاه کد نشان میدهد که چه اتفاقی میافتد و چه خطاهایی داریم. استثناءها بر خلاف شماره کدها، یک نوع ساده و ابتدایی نیستند. بلکه کلاس هستند و میتوانند به ما قابلیت توسعه یک کلاس خطا را بدهند. متدی یا چیزی را اضافه کنیم تا قابلیتهای آن بالاتر برود.
دو. یک شیء کامل را بازگردانید. نمونه کد زیر را ببینید:
Public Void Draw() { var x=_pointDetector.X; var y=_pointerDetector.Y; _rectangle.Draw(x,y); }
public Void Draw() { var point = _pointDetector.Point; _rectangle.Draw(point); }
سه. شروط یکسان را تابع نویسی کنید. گاهی از اوقات مانند کد زیر پیش میآید که خروجی چندین شرط شما، خروجی یکسانی دارند. جهت این کار میتوانید تمام این شرطها را به یک تابع یا متد دیگر منتقل کنید:
public void Conditions(){ if(a==0) return 0; if(b==0) return 0; if(c==0) return 0; if(d==0) return 0; }
public void Conditions() { if(allConditions()) return 0; }
چهار. چند خط کد شرطی را در یک شرط ننویسید و آنها را به متغیرهای جداگانه انتساب دهید. نمونه زیر را ببینید:
public void renderBanner() { if ((platform.toUpperCase().indexOf("MAC") > -1) && (browser.toUpperCase().indexOf("IE") > -1) && wasInitialized() && resize > 0 ) { // do something } }
public void renderBanner() { bool isMacOs = platform.toUpperCase().indexOf("MAC") > -1; bool isIE = browser.toUpperCase().indexOf("IE") > -1; bool wasResized = resize > 0; if (isMacOs && isIE && wasInitialized() && wasResized) { // do something } }
پنج. معرفی اکستنشن محلی: گاهی اوقات از کلاسهایی استفاده میکنید که شامل متد یا خاصیتی که احتیاج دارید نیستند و دسترسی به سورس آن کلاس هم امکان پذیر نیست یا هزینه سنگینی دارد. در این صورت میتوانید از یک زیر کلاس یا Wrapper Class استفاده کنید.
به عنوان مثال متد NextDay جایگاه آن در DateTime است. برای افزودن این خاصیت دو راه دارید که یک زیر کلاس از DateTime ایجاد کنید و متدی را به آن اضافه کنید یا اینکه کلاس DateTime را در یک کلاس دیگر بپیچانید (محصور کنید).
public class Globalization:DateTime { public int NextDay() { } }
public class Globalization { public DateTime DT{get;set;} public int NextDay() { } }
پی نوشت: اینکه کلاس dateTime قابل ارث بری است یا خیر اهمیتی ندارد. تنها به عنوان مثال ذکر شده است.
مزیت این روش این است که شما در طول برنامه از یک کلاس یکسان استفاده میکنید و با همین یک کلاس به همه موارد دسترسی دارید و باعث وجود کد یکتایی میشوید و به جای اینکه مرتبا از کلاسهای مختلف استفاده کنید، از یک نام مشخص استفاده میکنید و خوانایی کد را در کل برنامه بالا میبرید.