ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

How to code like a pro in 2022 and avoid If-Else

2022-08-10 13:55:13  阅读:191  来源: 互联网

标签:code like 开发人员 pro Dog else output var input


在浏览文章的时候发现了一篇叙述有关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<string, string>
{
    { "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<string>();
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<string>();
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能够使得语句更有效率,那当然还是用使用。总的来说就是尽量使得代码能够增加复用性、可维护性,使得其简洁且高效,这样帮助的不仅是自己,也会使得团队成员或其他使用者更方便快捷且高效。

 

公众号文章地址:https://mp.weixin.qq.com/s/wSRxHPqYqZkwtEwuX9nGOA

欢迎关注公众号:愚生浅末。

 

标签:code,like,开发人员,pro,Dog,else,output,var,input
来源: https://www.cnblogs.com/kohler21/p/16572108.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有