在完成代码重构之后,我总是会获得一种莫名的成就感。其实,不仅是大规模的代码重构能给我带来这种感觉,一些小的修改也能让我感到很高兴。以下3个简单的重构技巧就能帮你改善代码的可读性。
代码的整体格式最能影响代码的可读性,让你迅速找到需要的代码。正确的缩进、分行和模式能帮助开发者省去大量的无用代码。你可以看看下面两种格式的比较。先看第一个格式:
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
});
}
第二种格式使用了正确的缩进、分行和模式,提高了代码的可读性。
书籍有章节、标题和正文,这种格式让我们可以快速找到需要的内容。代码其实也一样,好的格式可以提高可读性。
类、方法和变量的命名,应该可以帮助开发者更好的了解代码作用。对象的范围越短,其名字也可以更短一些。
在编写项目的第一稿时,我们总是喜欢使用一些信息量不足的名称,但是这样的命名方式在后期并不是最好的选择。
请看下面的代码:
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);
}
}
使用有实际意义的名称,能让其他人以及你自己更好的理解代码的作用。
在写代码的时候,一些人很容易为了追求速度使用连锁命令,或是使用单行句法。很多时候,我在回看之前写的代码的时候,我就会发现很多这样的长表达式。看看下面两段代码的区别:
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逻辑,并且将所有连锁方法也进行了拆分,结果就是让其变得更好理解。
原文来自:SDK.cn
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。
结合权威身份认证的精准人脸风险查询服务,提升人脸应用及身份认证生态的安全性。人脸风险情报库,覆盖范围广、准确性高,数据权威可靠。
全国城市和站点空气质量查询,污染物浓度及空气质量分指数、空气质量指数、首要污染物及空气质量级别、健康指引及建议采取的措施等。
输入手机号和拦截等级,查看是否是风险号码