那会儿我犯下的第一个大缺点,便是在编写条件时过度利用 else 关键字。不但是我,后来我创造很多开拓者朋友都有这个问题,以是我打算在本日的文章里好好聊聊这件事。
免责声明:本文纯粹是我自己的主不雅观感想熏染。
在某些情形下,我们可能没办法在代码里利用这类方法。有时候,利用 else 关键字确实是最好的办理方案。这些我都承认,本文只是想给大家供应一点关于构建逻辑的新思路。

卫语句
根据维基百科的先容,卫语句是对完全性条件条件检讨。用于避免在实行期间发生缺点。
望之不似人言,下面我就用普通话翻译翻译。我们首先得先对条件条件(在代码开头)进行完全性检讨,这样才能避免主逻辑流程当中涌现缺点。
在空想的流程中(当验证精确时),我们希望程序的主逻辑在验证之后才开始运行。
现在让我们假设自己在运营一个网站,个中包含一个高等购买区域,仅限付费客户在每天夜里 12 点之后访问。
<?phpif ($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 关键字,我们也很难跟上这样的条件思路。
这还只是条件逻辑的一个大略示例。在实际场景当中,大家肯定碰着过对逻辑极为繁芜的类进行导航的状况。在我看来,这样的编码办法缺少可持续性,我们该当采纳更好的办法。
利用卫语句,我们可以遵照以下框架:
<?phpif (condition1()) { return ...;}if (condition2()) { return ...;}// Input is valid.doSomething();
利用这套框架,我们可以 重构 以前的代码,详细如下所示:
<?phpif ($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 个月吗?”
就当下来讲,这些代码大概能够很好地办理问题。但是未来呢?在编写代码时不考虑后续需求,显然是种屈曲的行为。
考虑到这一点,我果断放弃了那些已经修复过无数次的代码,从零开始编写功能。是的,这样才能彻底办理掉技能债务。
适当利用卫语句,大家将能够为自己乃至团队的开拓成果奠定坚实的根本,从而在未来须要时随时知足各类新增需求。
欢迎大家关注我的头条号,私信“python\"大众,学习资料包免费分享给须要的朋友,另有python学习互换群,可以互换学习拓展人脉。