编写可读代码的艺术 (12)

第十二章 把想法变成代码

用“自然语言”向他人解释一个事情时,会容易的多。这需要我们将复杂的想法精炼成一个最重要的概念。这不仅有助于他人理解,也可以让我们把自己的想法变得更加清晰。

编码过程也应使用同样的技巧,毕竟代码是解释我们程序的最根本方法。

清楚地描述逻辑

下面是一段PHP代码,它检查是否授权用户看到这个页面,如果没有,马上返回一个页面来告诉用户他没有授权:

$is_admin = is_admin_request();
if($document)
{
if(!$is_admin && ($document['username'] != $_SESSION['username']))
{
return not_authorized();
}
else
{
if(!$is_admin)
{
return not_authorized();
}
}
}

这段代码不长,但是包含了很多的逻辑处理。这样大的逻辑树很不容易理解。应该如何去简化呢?首先使用“自然语言”来描述这个逻辑:

授权方式有两种:
a、管理员
b、用于当前页面(如果当前有页面的话)
否则,为未授权。
按照这种逻辑修改下上面的代码:

if(is_admin_request())
{
	//authorized
}
else if ($document && ($document['username'] != $_SESSION['username']))
{
	//authorized
}
else
{
	return not_authorized();
}

这个版本有点怪,因为它有两种情形是空语句体。不过相比第一个版本,逻辑更简单一些,更易读。

有很多情况下,我们可以通过使用自然语言来描述问题,描述的过程中,我们也许会发现其中隐藏的小问题,或是提炼出比较简单准确的逻辑。


第十三章 少写代码

最好读的代码就是没有代码。代码的每一行都是要测试和维护的。尽量保证代码精炼。

1、质疑和拆分你的需求

并不是所有的程序都要求运行得快,100%准确,并能处理所有的输入。在编码之前,应该仔细想想你的需求,是否可以将需求削减成一个简单的问题。

比如下面这个例子:

完成一个“商店定位器”。最初预计的需求是:
对于任何给定用户的经度/纬度,找到距离该经度/纬度最近的商店。
为了100%实现这个功能,需要处理以下几种情况:

a、当位置处于国际日期分界线两侧的情况

b、接近北极或是南极的位置

c、按”每英里所跨经度“不同,处理地球表面的曲度。

要完全处理以上情况,需要我们进行大量的编码。仔细地考虑下这个需求,如果它仅在某一个区域被使用,在这个区域上,可能仅有30家商店,把范围缩小到这么小的时候,上面三种情况就不需要考虑了,只需要考虑在这个区域内,距离某个用户最近的商店。

2、保持小代码库

我们在一开始编码时,可能需求很小,代码库不会实现得很大。随着项目的增长,需求的增加,代码库会慢慢变大。这个时候,不光增加新功能会变得困难,就是维护以前的代码也会耗费不少的精力。

维护代码或是增加功能过程中,不要一味地增加代码,同时也要减少无用代码或是没用的功能;让项目保持分开的子项目的状态;让整个项目保持又小又轻的状态。

最重要的一点就是,要熟悉标准的API库,尽量使用它们,而不是自己实现,不要过度设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值