注:本文并不肯定或者否定哪一种写法,仅仅为大家提供一些其他的编码思路或者一些值得借鉴的点子,希望大家能在公众号的每一篇文章中都能有所收获,同时欢迎探讨!
设计更好的软件,替换If-Else的5种方法。入门到高级示例
让我直接说这句话:If-Else通常是一个糟糕的选择。
它导致设计复杂,代码可读性差,并且可能导致重构困难。
但是,If-Else已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。
有些人的口头禅是:If-Else是一把锤子,一切都是钉子。
无法区分何时使用更合适的方法是区分大三学生和大三学生的原因之一。
我将向您展示一些技巧和模式,这些技巧和模式将终结这种可怕的做法。
每个示例的难度都会增加。
1 完全不必要的Else块
这也许是那些初级开发人员最负罪的之一。下面的示例很好地说明了当您被认为If-Else很棒时会发生什么。
> Simple if-else
只需删除else`块即可简化此过程。
> Removed else
看起来更专业吧?
您会经常发现,实际上根本不需要其他块。像在这种情况下一样,您想要在满足特定条件的情况下执行某些操作并立即返回。
2 价值分配
如果您要根据提供的某些输入为变量分配新值,请停止If-Else废话-一种更具可读性的方法。
> Value assignment with if-else
尽管很简单,但它却很糟糕。首先,If-Else很容易在这里被开关取代。但是,我们可以通过完全删除else来进一步简化此代码。
> If statements with fast return
如果不使用else,则我们将剩下干净的可读代码。请注意,我也将样式更改为快速返回而不是单返回语句-如果已经找到正确的值,继续测试一个值根本没有意义。
3 前提条件检查
通常,我发现,如果方法提供了无效的值,则继续执行是没有意义的。
假设我们从以前就有了DefineGender方法,要求提供的输入值必须始终为0或1。
> Method without value checks
在没有价值验证的情况下执行该方法没有任何意义。因此,在允许方法继续执行之前,我们需要检查一些先决条件。
应用保护子句防御性编码技术,您将检查方法的输入值,然后继续执行方法。
> Check preconditions with guard clauses
至此,我们确保仅在值落在预期范围内时才执行主逻辑。
现在,IF也已被三元代替,因为不再需要在结尾处默认返回"未知"。
4 将If-Else转换为字典—完全避免If-Else
假设您需要执行一些操作,这些操作将根据某些条件进行选择,我们知道以后必须添加更多操作。
也许有人倾向于使用久经考验的If-Else。如果添加新操作,则只需简单地添加其他内容即可。很简单 但是,就维护而言,这种方法不是一个好的设计。
知道我们以后需要添加新的操作后,我们可以将If-Else重构为字典。
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
难道这样就够了吗?不,远远不够!
提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。
备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记
我为什么要写这篇文章呢,其实我觉得学习是不能停下脚步的,在网络上和大家一起分享,一起讨论,不单单可以遇到更多一样的人,还可以扩大自己的眼界,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。
今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!
,学习到更多的技术,我还会在csdn、博客、掘金等网站上分享技术,这也是一种学习的方法。
今天就分享到这里了,谢谢大家的关注,以后会分享更多的干货给大家!
[外链图片转存中…(img-hIYzC5Py-1710431455608)]
[外链图片转存中…(img-2XHeBsbI-1710431455609)]
[外链图片转存中…(img-7sBSKxU8-1710431455609)]