在浏览文章的时候发现了一篇叙述有关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

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

How to code like a pro in 2022 and avoid If-Else的更多相关文章

  1. Code Runner for VS Code,下载量突破 4000 万!支持超过50种语言

    大家好! 我是韩老师.还记得 6 年前的夏天,我在巨硬写着世界上最好的语言,有时也需要带着游标卡尺写着另一门语言.然而,我对这两门语言都不熟悉,如果能在 VS Code 中方便快捷地运行各种语言,那岂 ...

  2. C# Distinct方法的使用笔记

    引自:http://blog.csdn.net/shaopengfei/article/details/36426763 从C# 3.0开始提供了Distinct方法,这对于集合的使用有了更为丰富的方 ...

  3. 反汇编(Disassembler) iPhone

    什么是反汇编? 反汇编就是把可执行的二进制文件转为汇编代码,进而可以研究该程序.IDA Pro Adv v5.2 版本起已直接支援 iPhone ARM 代码的静态反汇编分析.IDA Pro Adv ...

  4. 免费的Visual Studio的插件

    在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...

  5. Lab 9-3

    Analyze the malware found in the file Lab09-03.exe using OllyDbg and IDA Pro. This malware loads thr ...

  6. Lab 7-2

    Analyze the malware found in the file Lab07-02.exe. Questions and Short Answers How does this progra ...

  7. JavaScript常用设计模式

    单例模式:确保类只能被实例化一次. var obj = {} 2.函数返回值 var func = function () {return {}} var obj = func(); 3.构造函数初始 ...

  8. C++ Core Guidelines

    C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very ...

  9. 学习ASP.NET Core Blazor编程系列五——列表页面

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

随机推荐

  1. CSS基础学习(二)

    11.CSS背景 ①设置背景颜色(颜色值通常可以用十六进制(如#000000)或者颜色名称(如red)来表示) 属性:background-color 例: body { background-col ...

  2. js 定时器 Timer

    1 /* Timer 定时器 2 3 parameter: 4 func: Function; //定时器运行时的回调; 默认 null 5 speed: Number; //延迟多少毫秒执行一次 f ...

  3. 移动云使用 JuiceFS 支持 Apache HBase 增效降本的探索

    作者简介: 陈海峰,移动云数据库 Apache HBase 开发人员,对 Apache HBase.RBF.Apache Spark 有浓厚兴趣. 背景 Apache HBase 是 Apache H ...

  4. 【原创】项目四Tr0ll-1

    实战流程 1.nmap枚举 nmap -sP 192.168.186.0/24 nmap -p- 192.168.186.142 nmap 192.168.186.142 -p- -sS -sV -A ...

  5. 异常——JavaSE基础

    异常 异常的分类 检查性异常 运行时异常:可能被程序员避免的异常,运行时异常可以在编译时被忽略 错误ERROR:错误不是异常 在Java中把异常当作对象来处理,并且定义了一个基类java.lang.T ...

  6. Eureka高可用集群搭建

    就是搭建Eureka的集群. 每个Eureka Server需要相互注册,确保数据一致. 我这里准备两个Eureka Server  他两的POM文件配置是一样的 <dependencies&g ...

  7. 【题解】Codeforces Round #798 (Div. 2)

    本篇为 Codeforces Round #798 (Div. 2) 也就是 CF1689 的题解,因本人水平比较菜,所以只有前四题 A.Lex String 题目描述 原题面 给定两个字符串 \(a ...

  8. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  9. go-zero微服务实战系列(七、请求量这么高该如何优化)

    前两篇文章我们介绍了缓存使用的各种最佳实践,首先介绍了缓存使用的基本姿势,分别是如何利用go-zero自动生成的缓存和逻辑代码中缓存代码如何写,接着讲解了在面对缓存的穿透.击穿.雪崩等常见问题时的解决 ...

  10. Python|range函数用法完全解读

    写在前面的一些过场话: 迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在.在关于迭代器的系列文章中(链接见文末),我至 ...