重构第六天:用条件语句替换异常

在工作中经常遇到用异常去控制程序流程,下面是一个普遍的例子:

public class Microwave
{
    private IMicrowaveMotor Motor { get; set; }

    public bool Start(object food)
    {
        bool foodCooked = false;
        try
        {
            Motor.Cook(food);
            foodCooked = true;
        }
        catch (InUseException)
        {
            foodcooked = false;
        }

        return foodCooked;
    }
}

异常应该是用来处理异常的行为的,对于上面的这种类型的代码,它们中的大部分都可以通过一个合适的条件语句进行替换。

public class Microwave
{
    private IMicrowaveMotor Motor { get; set; }

    public bool Start(object food)
    {
        if (Motor.IsInUse)
            return false;

        Motor.Cook(food);

        return true;
    }
}

重构第六天:用条件语句替换异常

时间: 2024-11-06 11:26:11

重构第六天:用条件语句替换异常的相关文章

重构第18天 用条件语句来代替异常(Replace exception with conditional)

理解:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断. 详解: 重构前代码: 1 public class Microwave 2 { 3 private IMicrowaveMotor Motor { get; set; } 4 5 public bool Start(object food) 6 { 7 bool foodCooked = false; 8 try 9 { 10 Motor.Cook(food); 11 foodCooked = true;

重构第四天 : 用多态替换条件语句(if else & switch)

面相对象的一个核心基础就是多态,当你要根据对象类型的不同要做不同的操作的时候,一个好的办法就是采用多态,把算法封装到子类当中去. 重构前代码: 1 public abstract class Customer 2 { 3 } 4 5 public class Employee : Customer 6 { 7 } 8 9 public class NonEmployee : Customer 10 { 11 } 12 13 public class OrderProcessor 14 { 15

小酌重构系列[20]——用条件判断代替异常

概述 异常处理的关键在于何时处理异常以及如何使用异常,有些开发者会觉得try catch的处理和使用难以把握,于是他们秉承着"您可错杀一千,不可放过一个"的想法,给所有的方法添加try catch. 这种方式会对应用程序造成什么影响吗? 从用户角度出发,用户确实难以察觉到什么,应用程序运行正常,使用的体验好像也没什么差别. 从程序角度出发,大量的try catch会降低代码的可读性,只有在异常触发时才会对程序的性能造成较大的影响. 这两种角度有对错吗? 二者都没有错,第一种角度甚至要远

利用反射+多态替换条件语句

/*利用反射+多态替换条件语句*/ class Program { public static void Main(string[] args) { /* * 用户发送一个命令,让代码去指定Commander * * <?xml version="1.0" encoding="utf-8" ?><Command><CommandType>Start</CommandType></Command> */ //

使用条件判断代替异常

概念:本文中的"使用条件判断代替异常"是指把没有必要使用异常做判断的条件尽量改为条件判断. 正文:如下代码所示,在日常的编码中我们经常需要用到异常来控制程序流,Start方法里面用try   catch 做条件判断,我们知道这里没有必要使用这种方式,因为你不需要做类型不可控的类型转换,也不需要处理异常行为,所以我们应该对它进行重构. namespace LosTechies.DaysOfRefactoring.ReplaceException.Before { public class

Shell脚本的条件测试和if条件语句使用

博文目录一.条件测试操作1.文件测试:2.整数值比较:3.字符串比较:4.逻辑测试:二.使用if条件语句1.单分支if语句2.双分支if语句3.多分支if语句 一.条件测试操作 要使Shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作.Shell环境根据命令执行后的返回状态值(¥?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常.使用专门的测试工具--test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立

Python成长之路第一篇(4)_if,for,while条件语句

有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连接,但是这样做是不好的 因为在使用加号的时候,会在内存中开辟新的内存地址来存放新的内容这样做的坏处就是增加了内存的消耗 那么我们该怎么办呢? (1)字符串格式化 ①内置占位符 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符

C#整理 条件语句

条件语句主要分为if else语句和switch case语句. if else语句主要分为四种格式: 1. if(表达式) {} 2.二选一 if(表达式) {} else {} 3.多选一 if(表达式) {} else if(表达式) {} else {} 4.if循环的嵌套 其中,第三种格式“多选一”可以与switch case替换. switch case的格式: switch(被判断的变量名) { case "1": Console.WriteLine(); break;

Ansible 自动化运维工具之when条件语句

1.When语句 有时候用户有可能需要某一个主机越过某一个特定的步骤.这个过程就可以简单的像在某一个特定版本的系统上少装了一个包一样或者像在一个满了的文件系统上执行清理操作一样. 这些操作在Ansible上,若使用`when`语句都异常简单.When语句也含Jinja2表达式, 第一个例子: tasks:   - name: "shutdown Debian flavored systems"     command: /sbin/shutdown -t now     when: a