博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提高可读性,3 个让代码更简洁的小技巧
阅读量:6575 次
发布时间:2019-06-24

本文共 3069 字,大约阅读时间需要 10 分钟。

在完成代码重构之后,我总是会获得一种莫名的成就感。其实,不仅是大规模的代码重构能给我带来这种感觉,一些小的修改也能让我感到很高兴。以下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
GetData(int year){ var result = CallApi("/Cars", year); IEnumerable
output = new IEnumerable
(); foreach(var c in result) { output.Add(c.Make); }}对比: public IEnumerable
RetrieveCarMakes(int year){ var inventory = CallApi("/Cars", year); IEnumerable
carMakes = new IEnumerable
(); 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逻辑,并且将所有连锁方法也进行了拆分,结果就是让其变得更好理解。

本文来自开源中国社区 [

转载地址:http://uhmjo.baihongyu.com/

你可能感兴趣的文章
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
浅谈java垃圾回收机制
查看>>
shell脚本学习之for循环
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>
C/C++中extern关键字详解
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>
jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
查看>>
0029-求最小的数
查看>>
【MVC+EasyUI实例】对数据网格的增删改查(上)
查看>>
第三章:如何建模服务
查看>>
EF CodeFirst下数据库更新
查看>>
Project Euler 345: Matrix Sum
查看>>
mysql允许远程登录
查看>>
js判断undefined类型
查看>>
问题账户需求分析
查看>>