别再用Else语句写代码了!
作者 | Joey Colon
译者 | 核子可乐
编辑 | 陈思
AI 前线导读:if…else 语句是许多程序员在写代码时最常用的方式之一。你甚至可以看到许多程序员的代码中嵌套着无数 else 语句。可这样,真的好吗?这里有一篇关于卫语句的实用介绍。
更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)
在刚开始接触编程时,我多希望能有人在我摸索着开发第一个网站的过程中,给我分享一点中肯的人生经验……
那会儿我犯下的第一个大错误,就是在编写条件时过度使用 else 关键字。不只是我,后来我发现很多开发者朋友都有这个问题,所以我打算在今天的文章里好好聊聊这件事。
免责声明:本文纯粹是我自己的主观感受。
在某些情况下,我们可能没办法在代码里使用这类方法。有时候,使用 else 关键字确实是最好的解决方案。这些我都承认,本文只是想给大家提供一点关于构建逻辑的新思路。
卫语句
根据维基百科的介绍,卫语句是对完整性前提条件检查。用于避免在执行期间发生错误。
望之不似人言,下面我就用普通话翻译翻译。我们首先得先对前提条件(在代码开头)进行完整性检查,这样才能避免主逻辑流程当中出现错误。
在理想的流程中(当验证正确时),我们希望程序的主逻辑在验证之后才开始运行。
现在让我们假设自己在运营一个网站,其中包含一个高级购买区域,仅限付费客户在每天夜里 12 点之后访问。
?php
if ($user != null) {
if (time() = strtotime('12 pm')) {
if ($user-hasAccess(UserType.PREMIUM)) {
if ($store-hasItemsInStock()) {
// the content a premium user user should be able to see when the store is in stock
// after 12pm.
} else {
return 'We are completely sold out.';
}
} else {
return 'You do not have premium access to our website.';
}
} else {
return 'This section is not opened before 12PM';
}
} else {
return 'You are not signed in.';
}
在实际应用中,我们可能会返回某种形式的异常。
虽然这是一种条件流方案,但即使其中只包含少量 else 关键字,我们也很难跟上这样的条件思路。
这还只是条件逻辑的一个简单示例。在实际场景当中,大家肯定遇到过对逻辑极为复杂的类进行导航的状况。在我看来,这样的编码方式缺乏可持续性,我们应该采取更好的办法。
使用卫语句,我们可以遵循以下框架:
?php
if (condition1()) {
return ...;
}
if (condition2()) {
return ...;
}
// Input is valid.
doSomething();
利用这套框架,我们可以 重构 以前的代码,具体如下所示:
?php
if ($user == null) {
return 'You are not signed in.';
}
if (time() strtotime('12 pm')) {
return 'This section is not opened before 12PM';
}
if (!$user-hasAccess(UserType.PREMIUM)) {
return 'You do not have premium access to our website';
}
if (!$store-hasItemsInStock()) {
return 'We are completely sold out.';
}
// the content a premium user user should be able to see when the store is in stock
// after 12pm.
在卫语句中,我们通常将布尔表达式反转为我们想要 assert 的内容。如果我们希望用户在登录之后才能查看此页面,那么首先就得检查他们是否已经登录。
这种方法实现了相同的精确逻辑流程,但在我看来,这体现出了更为清晰的条件逻辑处理方法。
总 结
在编程时,我们应该始终牢记这样一个问题:“这些代码能够稳定执行至少 6 个月吗?”
就当下来讲,这些代码也许能够很好地解决问题。但是未来呢?在编写代码时不考虑后续需求,显然是种愚蠢的行为。
考虑到这一点,我果断放弃了那些已经修复过无数次的代码,从零开始编写功能。是的,这样才能彻底解决掉技术债务。
适当运用卫语句,大家将能够为自己乃至团队的开发成果奠定坚实的基础,从而在未来需要时随时满足种种新增需求。
原文链接:
https://medium.com/better-programming/why-you-need-to-stop-using-else-statements-5b1fd09dea9e
活动推荐 AICon 全球人工智能与机器学习技术大会将于 11 月在北京举行,这里不仅有硅谷、BAT、独角兽们的 AI 技术案例解析,还有颜水成、贾扬清、崔宝秋等大咖现场经验分享。部分议题抢先看:
微软小冰:人格化对话机器人的构建及在语音场景当中的实践
阿里巴巴:智能家装设计中的 3D 算法应用实践
蚂蚁金服:AI 赋能普惠金融的探索与实践
腾讯:腾讯云知识图谱技术与应用实践之路
美团:刻画物理世界的 AI 技术和应用
滴滴:滴滴搜索系统的深度学习演进之路
360:360 金融的 AI 实践之旅
今日荐文点击下方图片即可阅读
中台建设踩坑史,别说这些问题你不会遇到
你也「在看」吗???
阅读原文
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。 项目经理在线