提高可讀性,3 個讓代碼更簡潔的小技巧

MichalYMU 7年前發布 | 11K 次閱讀 代碼重構

在完成代碼重構之后,我總是會獲得一種莫名的成就感。其實,不僅是大規模的代碼重構能給我帶來這種感覺,一些小的修改也能讓我感到很高興。以下3個簡單的重構技巧就能幫你改善代碼的可讀性。

1. 清理格式

代碼的整體格式最能影響代碼的可讀性,讓你迅速找到需要的代碼。正確的縮進、分行和模式能幫助開發者省去大量的無用代碼。你可以看看下面兩種格式的比較。先看第一個格式:

 Inventory inventory = new Inventory();

for (int i = 0; i < cars.Count; i++){

    inventory.Cars.Add(cars[i]);



    var owner = owners.Where(x => x.VIN == cars[i].VIN).OrderByDescending(x => x.PurchaseDate).FirstOrDefault();

inventory.PreviousOwners.Add(new Owner { VIN = cars[i].VIN,

                                        Name = owner.Name});

}

再和下面這種格式比較一下:

Inventory inventory = new Inventory();

for (int i = 0; i < cars.Count; i++)

{

    inventory.Cars.Add(cars[i]);



    var owner = owners.Where(x => x.VIN == cars[i].VIN)

                        .OrderByDescending(x => x.PurchaseDate)

                        .FirstOrDefault();

    inventory.PreviousOwners.Add(new Owner

                                     {

                                        VIN = cars[i].VIN,

                                        Name = owner.Name

                                     });

}

第二種格式使用了正確的縮進、分行和模式,提高了代碼的可讀性。

書籍有章節、標題和正文,這種格式讓我們可以快速找到需要的內容。代碼其實也一樣,好的格式可以提高可讀性。

2.對類、方法和變量進行重命名

類、方法和變量的命名,應該可以幫助開發者更好的了解代碼作用。對象的范圍越短,其名字也可以更短一些。

在編寫項目的第一稿時,我們總是喜歡使用一些信息量不足的名稱,但是這樣的命名方式在后期并不是最好的選擇。

請看下面的代碼:

 public IEnumerable<string> GetData(int year)

{

    var result = CallApi("/Cars", year);

    IEnumerable<string> output = new IEnumerable<string>();

    foreach(var c in result)

    {

        output.Add(c.Make);

    }

}

對比:

 public IEnumerable<string> RetrieveCarMakes(int year)

{

    var inventory = CallApi("/Cars", year);

    IEnumerable<string> carMakes = new IEnumerable<string>();



    foreach(var car in inventory)

    {

        carMakes.Add(car.Make);

    }

}

使用有實際意義的名稱,能讓其他人以及你自己更好的理解代碼的作用。

3. 拆分較長的表達式

在寫代碼的時候,一些人很容易為了追求速度使用連鎖命令,或是使用單行句法。很多時候,我在回看之前寫的代碼的時候,我就會發現很多這樣的長表達式。看看下面兩段代碼的區別:

 bool hasHighSaleProbability = (daysOnLot < 60) ? true : (color == "Red" ? true : false);

var highSaleProbabilityVehicles = Inventory.Where(x => x.DaysOnLot < 60 or x.Color == "Red").Select(x => new { Make = x.Make, Model = x.Model, Year = x.Year }).Distinct().Select(x => new RecentInventoryView { YearDropdown = new SelectListItem { Text = x.Year, Value = x.Year }, MakeModelDropdown = new SelectListItem { Text = x.Make + " " + x.Model, Value = x.Make + " " + x.Model } });

拆分后:

bool hasHighSaleProbability = false;

if (daysOnLot < 60 || color == "Red")

{

    hasHighSaleProbability = true;

}

var distinctMakesModelsYears = Inventory

   .Where(x => x.DaysOnLot < 60 or x.Color == "Red")

   .Select(x => new

   {

    Make = x.Make,

    Model = x.Model,

    Year = x.Year

   })

   .Distinct()

   .ToList();

var recentInventoryView = distinctMakesModelsYears

    .Select(x => new RecentInventoryView

    {

     YearDropdown = new SelectListItem

     {

      Text = x.Year,

      Value = x.Year

     },

     MakeModelDropdown = new SelectListItem

     {

      Text = x.Make + " " + x.Model,

      Value = x.Make + " " + x.Model

     }

    });

雖然第一段代碼更短,行數也更少,但是其可讀性非常差。而第二段代碼由于拆分了if邏輯,并且將所有連鎖方法也進行了拆分,結果就是讓其變得更好理解。

 

 

來自:https://www.oschina.net/news/82928/3-insanely-make-to-clean-up-your-code

 

 本文由用戶 MichalYMU 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!