卫语句 减少if else的层数

2023-05-16

概述

卫语句是一种写代码的经验
为了减少if else的层数
为了提高可读性,进而利于维护

案例

现在做一个需求,判断一个人是否满足招聘要求,招聘要求:30岁以下的中国男性 体重100kg以下 升高160cm以上 无犯罪历史

  • 最不好的写法
    不好是因为代码中嵌套了很多层
 boolean check(int age, String country, String gender,
                   double weight, double height, boolean isCriminal) {
        if (age <= 30) {
            if ("中国".equals(country)) {
                if ("男".equals(gender)) {
                    if (weight <= 100) {
                        if (height >= 160) {
                            if (!isCriminal) {
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }

改进写法1

  boolean check1(int age, String country, String gender,
                   double weight, double height, boolean isCriminal) {
        if (age <= 30 && "中国".equals(country) && "男".equals(gender)
                && weight <= 100 && height >= 160 && !isCriminal) {
            return true;
        }
        return false;
    }

改进写法2

    boolean check2(int age, String country, String gender,
                   double weight, double height, boolean isCriminal) {
        if (age > 30) {
            return false;
        }
        if (!"男".equals(gender)) {
            return false;
        }
        if (weight > 100) {
            return false;
        }
        if (height < 160) {
            return false;
        }
        if (isCriminal) {
            return false;
        }
        if (!"中国".equals(country)) {
            return false;
        }
        return true;
    }

改进写法1(check1)和改进写法2(check2)的代码块层数都是单层,哪个更好?
check1比check2的代码行数少,但“卫语句”建议check2,原因见“卫语句的特点”(其实check1也很好)

卫语句的特点

check2就是卫语句的写法

  • 一个分支只判断一种情况(代码易读)
  • 每个分支判断不满足条件的情况,并结束方法(如果分支判断满足条件的情况,则会产生多层嵌套,如check)
  • 发生概率大分支往前放(例如check2中if (!"中国".equals(country)) {return false;}因为应聘者中外国人很少,所以国籍判断放最后,为了减少发生概率小的判断语句的执行次数)

总结

  • 当if else嵌套参差过深(如上面的check方法)才考虑用卫语句
  • 不要刻意用卫语句(上面的check1方法也很好)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卫语句 减少if else的层数 的相关文章

随机推荐

  • 服务器ibmc无法加载js文件,weUI应用之JS常用信息提示弹层的封装

    weUI应用 xff0c 自己用JS封装了几个常用的信息提示的弹层 测试页面的代码在后面有贴出 几个弹层如下图 HTML页面代码 xff1a weUI test 测试 function 提示弹层 xff0c 取消关闭 xff0c 确定做相应
  • 学习ASP.NET Core Razor 编程系列八——并发处理

    学习ASP NET Core Razor 编程系列目录 学习ASP NET Core Razor 编程系列一 学习ASP NET Core Razor 编程系列二 添加一个实体 学习ASP NET Core Razor 编程系列三 创建数据
  • putty和ssh远程登陆报错的解决方法

    putty和ssh远程登陆报错的解决方法 问题 xff1a 使用putty登录linux报错 xff1a server unexpectedly closed network connection 在另一台Linux服务器使用ssh登录 x
  • 数据归一化和两种常用的归一化方法

    数据标准化 xff08 归一化 xff09 处理是数据挖掘的一项基础工作 xff0c 不同评价指标往往具有不同的量纲和量纲单位 xff0c 这样的情况会影响到数据分析的结果 xff0c 为了消除指标之间的量纲影响 xff0c 需要进行数据标
  • 使用 Beautiful Soup 解析网页内容

    安装Beautiful Soup Beautiful Soup是一个Python的HTML解析框架 xff0c 我们可以利用它方便的处理HTML和XML文档 Beautiful Soup有3和4两个版本 xff0c 目前3已经停止开发 所以
  • XIV(4)--Flash caching

    1 xff0c Flash Cache简介 Flash cache 本身是Facebook的一个开源项目 xff0c xff08 准确的说是一个Linux的模块 xff09 xff0c 可以动态加载 Flashcache通过在文件系统 xf
  • 在Google Earth中显示中国城市和机场(动态生成KML的Demo)

    受到上次写的 在Google Earth上显示等高线 镜像1 镜像2 的启发 xff0c 写了个动态实现在Google Earth中显示中国城市和机场 xff0c 效果见最下面的图 也可以打开Google Earth后 xff0c 在临时目
  • ros 开源物体检测_ROS下物体检测和识别功能(ROS下find_object_2d)

    效果 xff1a 安装步骤 xff1a ROS Kinetic sudo apt get install ros kinetic find object 2d cd catkin ws git clone https github com
  • 安装 Ubuntu 20.04 分辨率显示不全解决方案。

    确实这个 安装20 04 版本的ubuntu 存在分辨率的缺陷 xff0c 旧版本不会出现这个现象 既然问题出现了那肯定有方案去解决的 xff0c 不需要在浪费时间去下载镜像了 解决方案 xff1a 1 win 43 鼠标左键 2 xran
  • 嵌入式工程师必读100本专业书籍

    很高兴这么多朋友阅读本篇嵌入式干货书籍汇总 xff0c 编者通过大数据调查 xff0c 经调查汇总如下 xff0c 希望对想要从事嵌入式行业或者已经是行业人士的朋友有所帮助 xff01 在调查过程中得到华清远见 星创客精英训练营的大力支持
  • 程序员工作中的一些建议

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 尽早地添加日志记录和错误处理 在开发新系统时 xff0c 我做的第一件事就是添加日志和错误处理 xff0c 因为这两者从一开始就非常有用 如果系统不能照常工作 xff0
  • VINS(七)estimator_node 数据对齐 imu预积分 vision

    首先通过vins estimator mode监听几个Topic xff08 频率2000Hz xff09 xff0c 将imu数据 xff0c feature数据 xff0c raw image数据 xff08 用于回环检测 xff09
  • C++多态性的总结

    抽空总结下对一直以来对C 43 43 多态性的一点个人理解 1 什么叫早绑定和晚绑定 早绑定指在对象声明的时候就和它的类型建立了关联 晚绑定是指代码在运行时再检查对象是否提供了我们所需要的方法和属性 静态关联 早绑定 和动态关联 晚绑定 2
  • 解决不能正常访问workerman的问题

    问题描述 xff1a 在阿里云ECS上部署了workerman的应用 xff08 ECS是专有网络 xff09 xff0c 在ECS安全组里已经允许workerman需要的全部端口 xff0c 但是外网一直不能正常打开 xff08 注 xf
  • 谈谈技术面试

    只要是招一个技术人员 xff0c 不管是初级的程序员还是高级软件工程师 xff0c 技术上的考核都必不可少 很荣幸作为面试官参与过公司的一些技术面试 xff0c 从中也体会到了一些东西 首先 xff0c 我觉得技术面试是需要讲究技巧的 xf
  • H3C交换机配置详解

    一 用户配置 lt H3C gt system view H3C super password H3C 设置用户分级密码 H3C undo super password 删除用户分级密码 H3C localuser bigheap 1234
  • PCL—综述—三维图像处理

    点云模型与三维信息 三维图像是一种特殊的信息表达形式 xff0c 其特征是表达的空间中三个维度的数据 和二维图像相比 xff0c 三维图像借助第三个维度的信息 xff0c 可以实现天然的物体 背景解耦 除此之外 xff0c 对于视觉测量来说
  • yolo 多摄像头_45元的WIFI摄像头应用之YOLO人体识别联动智能家居

    如果大家对智能家居比较感兴趣的话 xff0c 一定知道阻碍智能家居自动化发展的一个大问题就是 xff0c 房间里有没有人 xff0c 如果有人 xff0c 那人究竟在做些什么 xff0c 系统又该如何调整环境的照明 xff0c 温度甚至安防
  • Up Board介绍及上手体验

    Up Board是Intel联合华硕制作的一块性能强悍的卡片电脑 外观如下 xff1a 性能参数如下 xff1a CPU为Intel 凌动z8350系列处理器 xff0c 最高频率可达1 92Ghz xff0c 内核GPU是400核心显卡
  • 卫语句 减少if else的层数

    概述 卫语句是一种写代码的经验 为了减少if else的层数 为了提高可读性 xff0c 进而利于维护 案例 现在做一个需求 xff0c 判断一个人是否满足招聘要求 xff0c 招聘要求 xff1a 30岁以下的中国男性 体重100kg以下