陈旧语法密度之四——用直接删除switch case的方法消除switch case

本文通过实例分析,展示了如何通过直接删除switch case来优化代码,提高代码可读性和简洁性。讨论了2001年C++及2017年Java代码中的案例,指出即使是if-else结构也可能存在简化空间。文章提出了专业人士可能忽视的代码质量问题,并强调了发现和改进垃圾代码的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用直接删除switch case的方法消除switch case

以下的代码的代码看似极具娱乐性,然而却都是真实案例。

第一个案例来自于2001年左右的一个C++产品,给人印象如此之深,以致于十多年来记忆几乎分毫不差:

public int returnN(int n) {
    switch (n) {
        case 1: return 1;
        case 2: return 1;
        case 3: return 1;
        case 4: return 1;
        case 5: return 1;
        case 6: return 1;
        default: return n;
    }
}

下面是一个看似有点差别的例子,但实际上是一回事。此案例发现于2017年的一个Java代码中:

public int functionN(int n) {
    int result = 0;
    switch (n) {
        case 1: 
            result = function(1);
            break;
        case 2: 
            result = function(2);
            break;
        case 3: 
            result = function(3);
            break;
        case 4: 
            result = function(4);
            break;
        case 5: 
            result = function(5);
            break;
        case 6: 
            result = function(6);
            break;
        default: result = function(n);
    }
    return result;
}

下面的例子同样来自2017年的一个Java代码。虽然是用if-else if-else实现的,却有“异曲同工之妙”:

public List<String> totalList(List<String> listLeft, List<String> listRight) {
    List<String> listAll = new ArrayList<>();

    if (!listLeft.isEmpty() && !listRight.isEmpty()) {
        listAll.addAll(listLeft);
        listAll.addAll(listRight);
    } else if (!listLeft.isEmpty() && listRight.isEmpty()) {
        listAll.addAll(listLeft);
    } else {
        listAll.addAll(listRight);
    }

    return listAll;
}

提示:上述代码中的if-else结构实际只需要两行代码,而且这两行代码本来就已经写在里边了。

这个案例是企业团队自己提供给我的,因为我当时“夸下海口”说任何else都是可以被删除的(实际上尽管不断受到各种挑战,迄今为止仍然没有else存活的特例)。当我看了足足一分钟尝试确认里边的逻辑的时候(之所以花费这么多时间,一则代码差别细微令人眼花缭乱,二则当时觉得既然用这么多代码而非两行代码,一定有其妙用),团队甚至自豪地说“我们的业务是很复杂的,不是那么容易看懂的……”

为何专业人士开发的代码,围观的整个团队都感觉在正常不过了,却会在几秒钟内被外行看出破绽?

人们常说:“美无处不在,只是缺少发现美的眼睛”。实际上反过来说也很有道理:

垃圾代码无处不在,只是缺少发现垃圾代码的眼睛。

若以憎恶的眼光审视所有switch case, if-else if-else,甚至是单个if-else,会发现每一处都存在或大或小的问题。即使在那些无关痛痒的地方,删除之前至少不会比删除之后的代码好。比如下面这个几乎每个产品中都有不止一处的例子:

if (value == true) {
    return true;
} else {
    return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值