在浏览文章的时候发现了一篇叙述有关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. unity---监听物体被点击

    脚本 public void OnPointerClick(PointerEventData eventData) { Debug.LogFormat("{0} is Click" ...

  2. 基础篇:java GC 总结,建议收藏

    垃圾标记算法 垃圾回收算法 major gc.mini gc.full gc.mixed gc 又是什么,怎么触发的 垃圾回收器的介绍 Safe Point 和 Safe Region 什么是 TLA ...

  3. Python <算法思想集结>之初窥基础算法

    1. 前言 数据结构和算法是程序的 2 大基础结构,如果说数据是程序的汽油,算法则就是程序的发动机. 什么是数据结构? 指数据在计算机中的存储方式,数据的存储方式会影响到获取数据的便利性. 现实生活中 ...

  4. 第06组 Beta冲刺 (1/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.曾丽莉 4.黄少丹 5. 董翔云 6.杜筱 7.鲍凌函 8.詹鑫冰 9.曹兰英 10.吴沅静 1.3 冲刺成果展示 1.1 ...

  5. B - A Simple Task

    https://vjudge.net/contest/446582#problem/B 这道题是一道不错的线段树练代码能力的题. #include<bits/stdc++.h> using ...

  6. ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

    Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+MySQL,性能.可用 ...

  7. Kafka 的稳定性

    一.事务 1. 事务简介 1.1 事务场景 producer发的多条消息组成⼀个事务这些消息需要对consumer同时可⻅或者同时不可⻅ producer可能会给多个topic,多个partition ...

  8. C#中的CSV文件读写

    目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...

  9. 树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁)

    前言   安装了mysq数据库,最终时为了实现在一个树莓派上实现多用户多进程操作的同步问题,避免数据并发出现一些错误,本篇安装了远程服务并且讲述了使用Qt进行悲观锁for update操作,命令行进行 ...

  10. 内存泄漏定位工具之 valgrind 使用

    1 前言 前面介绍了 GCC 自带的 mtrace 内存泄漏检查工具,该篇主要介绍开源的内存泄漏工具 valgrind,valgrind 是一套 Linux 下,开放源代码的动态调试工具集合,能够检测 ...