0

    else语法(else')语句,

    2025.02.17 | xly930201 | 22次围观

    作者丨Joey Colon

    译者丨核子可乐

    策划丨小智

    if…else 语句是许多程序员在写代码时最常用的方式之一。你甚至可以看到许多程序员的代码中嵌套着无数 else 语句。可这样,真的好吗?

    一篇关于卫语句的实用介绍。

    在刚开始接触编程时,我多希望能有人在我摸索着开发第一个网站的过程中,给我分享一点中肯的人生经验……

    那会儿我犯下的第一个大错误,就是在编写条件时过度使用 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 个月吗?”

    就当下来讲,这些代码也许能够很好地解决问题。但是未来呢?在编写代码时不考虑后续需求,显然是种愚蠢的行为。

    考虑到这一点,我果断放弃了那些已经修复过无数次的代码,从零开始编写功能。是的,这样才能彻底解决掉技术债务。

    适当运用卫语句,大家将能够为自己乃至团队的开发成果奠定坚实的基础,从而在未来需要时随时满足种种新增需求。

    原文链接:

    https://medium.com/better-programming/why-you-need-to-stop-using-else-statements-5b1fd09dea9e

    美团外卖日单量超过 3000W,拥有近百万骑手数量,是全球最大的即时配送网络。与大多数互联网企业线上业务为主的模式不同,配送系统需要在现实世界中的真实环境和真实场景中“运行”,最大的挑战是需要对骑手所在的环境和场景做到实时感知、准确理解和最优决策,这也是近几年行业经常说的“数字化”和“智能化”技术。

    结合机器学习、时空间大数据、AIoT 相关技术,他们在“物理世界数字化和智能化”这方面做了很多探索和尝试,本次 AICon 北京 2019 上我们邀请到了美团点评算法通道主席 & 美团配送 AI 方向负责人何仁清老师,带来相关内容分享,大家可以扫描下方二维码或者点击“阅读原文”查看详情。

    点个在看少个 bug👇

    版权声明

    本文仅代表作者观点,不代表xx立场。
    本文系作者授权xxx发表,未经许可,不得转载。

    发表评论
    标签列表