来源:翻译自:Nicklas Millard的文章《Better Software Without If-Else》注:本文并不肯定或者否定哪一种写法,仅仅为大家提供一些其他的编码思路或者一些值得借鉴的点子,希望大家能在公众号的每一篇文章中都能有所收获,同时欢迎探讨!设计更好的软件,替换If-Else的5种方法。入门到高级示例让我直接说这句话:If-Else通常是一个糟糕的选择。它导致设计复杂,代码可读性差,并且可能导致重构困难。但是,If-Else已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。有些人的口头禅是:If-Else是一把锤子,一切都是钉子。无法区分何时使用更合适的方法是区分大三学生和大三学生的原因之一。我将向您展示一些技巧和模式,这些技巧和模式将终结这种可怕的做法。每个示例的难度都会增加。
如果您要根据提供的某些输入为变量分配新值,请停止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也已被三元代替,因为不再需要在结尾处默认返回"未知"。