怎样在2022年像专业人士一样摒弃if-else来编写代码?

在浏览文章的时候发现了一篇叙述有关if-else语句的文章,这篇文章作者是Thai Tran,他原文是用英语写的,然后看着文章浅显易懂,便尝试翻译成汉语。如有不妥还望指出。

原文链接:https://thaitran.hashnode.dev/how-to-code-like-a-pro-in-2022-and-avoid-if-else#comments-list

如果学习一门编程语言,我们都会知道if...else...、for循环等基本语法。

作为一个初学者,我们可以按照书本上一板一眼地学习和使用。

但是,如果要成为高阶程序员,就需要不断考虑怎么更加高效地应用编程语言。

使用if...else...是我们在大学里学到的编程基础知识之一,刚开始接触编程经常会用到。但是,许多高级开发人员都认为if...else...存在很多问题,而且我们在开发中也要尽量避免过度依赖if...else...。

这篇文章就介绍初级、中级、高级程序员如何应对程序中一些类似的问题。

怎样在2022年像专业人士一样摒弃if-else来编写代码?

使用if-else语句是我们在大学学习编程的基础之一,它有助于我们开始第一个任务。有趣的是,许多高级开发人员却很厌恶if-else语句。只要情况允许,就应该避免在代码中使用if-else。

我们来看一些例子

初级开发人员如何编写代码:

var input = "Dog";var output = "";if (input == "Dog"){    output = "Bow Wow";}else if (input == "Cat"){    output = "Meow Meow";}else if (input == "Chicken"){    output = "Cluck Cluck";}else if (input == "Pig"){    output = "Oink Oink";}

这个例子中,开发人员需要根据输入的动物输出不同动物的声音。这个问题可以使用If-Else语句轻松地重复逻辑。

中级开发人员将如何编写此代码:

var input = "Dog";var output = "";switch (input){    case "Dog":        output = "Bow Wow";        break;    case "Cat":        output = "Meow Meow";        break;    case "Chicken":        output = "Cluck Cluck";        break;    case "Pig":        output = "Oink Oink";        break;}

通过使用switch语句来代替if-else语句并获得相同的结果,但这仍然不是最佳解决方案。


高级开发人员如何编写代码:

var input = "Dog";var map = new Dictionary{    { "Dog", "Bow Wow" },    { "Cat", "Meow Meow" },    { "Chicken", "Cluck Cluck" },    { "Pig", "Oink Oink" }};map.TryGetValue(input, out var output);

在这个例子中,将动物的名称和动物声音作为键值对存储在字典中,并调用TryGetValue()方法获得输出,这样的代码更具可读性。

但事情可能会变得更复杂

例如,我们需要使用比较方法而不是精确匹配,然后采取相应的操作。如果输入包含关键字Dog,则使用它来过滤狗的品种。如果输入包含关键字Cat,则使用它来过滤猫的品种。

初级开发人员可以使用If-Else语句解决此问题:

var input = "Dachshund Dog";var dogBreeds = new[] { "Dachshund" };var catBreeds = new[] { "British Shorthair" };var result = Enumerable.Empty();if (input.Contains("Dog")){    result = dogBreeds.Where(b => input.Contains(b));}else if (input.Contains("Cat")){    result = catBreeds.Where(b => input.Contains(b)); }

由于他需要更多的条件,他将继续在代码中添加If-else语句。代码将变得不可使用且更难阅读。当此代码移交给高级开发人员时,将按以下方式重写:

var input = "Dachshund Dog";var dogBreeds = new[] { "Dachshund" };var catBreeds = new[] { "British Shorthair" };var result = Enumerable.Empty();var eval = delegate (string key, string[] array){    if (!input.Contains(key))        return false;    result = array.Where(b => input.Contains(b));    return true;};var conditions = new[] {    () => eval("Dog", dogBreeds),    () => eval("Cat", catBreeds)};conditions.Any(c=> c());

通过将动作移动到delegate(这是一个关键字,查阅很多文章发现并没有特别合适的汉语翻译),可以在不同的条件下重用相同的方法。将delegate存储在数组中,并使用LINQ Any()调用这些函数将得到相同的结果。最好的部分是,一旦其中一个函数返回真实条件,比较操作就会退出,这将节省性能。

如果你是一名初级开发人员,你应该学习并使用这些专业技巧。接下来你将成为一名高级开发人员。

要记得:

如果维护你的代码的人仍然需要不断地调整代码,那他将变成一个知道你住在哪里的暴力精神病患者。

这句话原文是:

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

我的理解是:如果一个人维护你的代码需要不断地重写编码,那这个维护者将变成一个带有暴力的精神病患者,并且他有可能会向你施加暴力。

也就是说尽量写出一些效率高的,重用性强的,简洁且精炼的代码,为后续的维护者减轻压力。

这篇文章说的并不是完全拒绝if-else语句,而是说要尽量避免if-else语句带来的冗杂和难维护性。如果借助if-else能够使得语句更有效率,那当然还是用使用。总的来说就是尽量使得代码能够增加复用性、可维护性,使得其简洁且高效,这样帮助的不仅是自己,也会使得团队成员或其他使用者更方便快捷且高效。

公众号本文地址:How to code like a pro in 2022 and avoid If-Else

人士   专业   if
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章