2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

别再用 Else 语句写代码了?

  • 2019-09-17
  • 本文字数:1573 字

    阅读完需:约 5 分钟

别再用Else语句写代码了?

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


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


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


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


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


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

原文链接

Stop Using Else in Your Programs


2019-09-17 14:067685

评论 3 条评论

发布
用户头像
赞,再推荐耗子叔一篇类似的文章:
https://coolshell.cn/articles/17757.html
2019-09-18 07:59
回复
用户头像
Guard 这个单词翻译成 卫 ?是否有些……?
2019-09-17 21:49
回复
用户头像
这会带来另一个问题,多个返回语句让其他人更加难以理解数据的流转过程。用模式匹配(pattern matching)或者把这个负载的类的判断逻辑抽象成多个小的函数的方式来做可能会更好。
2019-09-17 14:38
回复
没有更多了
发现更多内容

微云二手车运营版系统:多端覆盖的二手车平台解决方案

微擎应用市场

【项目经理必读】为何项目管理越来越难?破局关键在这里!

Tecjt_锦图科技

项目管理 团队协作 项目经理 进度管理 软件研发管理

全栈信创+AI大模型:百分点科技BD-OS重塑数据治理基座

百分点科技技术团队

Paperpal携手国际出版机构发起【AI时代科研现状与未来大调研】,助力制定科研AI新规范

财见

执行力:拉开团队与团队差距的关键,优秀项目经理都这么做

Tecjt_锦图科技

项目管理 团队协作 执行力 项目进度管理

(三)数仓人必看!ODS 到 DWS 各层设计规范全解析,含同步/存储/质量核心要点

白鲸开源

大数据 开源 数仓 大模型 命名规范

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

北京中暄互动广告传媒有限公司

GOSIM 开源出海工作坊:给开源创业者的忠告

白鲸开源

开源 DataOps 开源商业化 白鲸开源 WhaleStudio

一文掌握 Apache SeaTunnel 构建系统与分发基础架构

白鲸开源

大数据 开源 数据同步 数据集成 Apache SeaTunnel

用 SeaTunnel 同步 MySQL 到 Doris:全量增量 + SQL 过滤

白鲸开源

MySQL Doris 数据同步 数据集成 Apache SeaTunnel

RFID智能工具柜选型指南:软件功能和硬件配置哪个更重要?

斯科信息

RFID智能工具柜

淘宝天猫商品评论API:轻松挑选优质商品的利器

tbapi

淘宝API 淘宝商品评论数据 淘宝商品评论API 天猫商品评论数据采集 天猫商品评论API

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

火山引擎开发者社区

MCP

如何利用海外 NetNut 网络代理与 AICoding 实战获取 iPhone 17 新品用户评论数据?

猫头虎

AI Agents

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 无代码 版本更新

企业级数据采集解决方案:Dify + MCP Server + LLM打造零代码YouTube创作者主页分析智能体

不叫猫先生

智能体 LLM dify MCP

十行代码 带你极速接入鸿蒙6新特性 - 应用内打分评价

万少

HarmonyOS

省级旅投集团数据中台架构实战:多租户隔离与主题域建模实践

袋鼠云数栈

大数据 数据中台 数据治理 中台架构 袋鼠云

活动报名预约表单小程序:高效线下交友与活动管理利器

微擎应用市场

你画我猜小程序 PRO:社交游戏新选择,助力运营变现

微擎应用市场

AI 时代火山引擎对象存储:为数据松绑,让算力起飞

北京中暄互动广告传媒有限公司

重量体积查询 API | 电商快递费用核算不再有争议

快递鸟

AI 时代火山引擎对象存储:为数据松绑,让算力起飞

火山引擎开发者社区

AI 火山引擎

项目成功的关键是谁?卓越项目经理的三大核心能力与高效工具

Tecjt_锦图科技

MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统

极客天地

DXC在2025年度ServiceNow研究中获评领导者

财见

智能体是什么,与AI有什么区别?一文弄懂智能体的方方面面

职场工具箱

人工智能 智能体 agent AIGC 智能体平台

低代码“打印文件”实操指南:从模板预览到PDF导出全流程解析

引迈信息

具身智能从此「边听边说」,智源研究院开源原生全双工语音大模型RoboBrain-Audio

智源研究院

人工智能

喜报!和鲸科技获张江国家自主创新示范区专项发展资金支持

ModelWhale

人工智能 大数据 科研 和鲸

别再用Else语句写代码了?_语言 & 开发_Joey Colon_InfoQ精选文章