【编程技巧】巧用短路运算简化代码

1. 短路运算

短路运算就是在从左到右的逻辑运算中,前者满足要求,就不再执行后面的表达式。在编程中合理利用短路运算,可以简化我们的代码。

1.1 短路运算的符号

  • 逻辑与
  • 逻辑或

编程语言中的逻辑运算符大多是:&&||! (如C/C++、Java、JS、C#),少部分是 andornot (如 Python、PHP、Lua)

1.2 运算规则

  • 逻辑或:前一个表达式的条件为真就会发生短路运算,不再执行后面的表达式。
  • 逻辑与: 前一个表达式的结果为假就会发生短路运算,不再执行后面的表达式。

1.3 示例 (C/C++)

1.3.1 逻辑与的短路运算

判断一个数和0的关系,通常会这样写:

int a = 1;

if (a > 0)
    printf("大于0");
else if (a < 0)
    printf("小于0");
else
    printf("等于0");

使用三目运算符改写:

int a = 1;

a>0? printf("大于0"): a<0? printf("小于0"): printf("等于0"); 

使用短路运算改写:

int a = 1;

(a > 0) && printf("大于0");
(a < 0) && printf("小于0");
(a == 0) && printf("等于0");

1.3.2 逻辑或的短路运算

编写一个函数,把数字 a 的最小值限定为 10:

int clamp(int a)
{
    
    
    if (a < 10)
        return 10;
    else
        return a;
}

使用三目运算符改写:

int clamp(int a)
{
    
    
    return a < 10? 10: a;
}

使用短路运算改写:

int clamp(int a)
{
    
    
   (a >= 10) || (a = 10);
    // 或
    // (a < 10) && (a = 10);

    return a; 
}

2. 特殊应用

2.1 JavaScript中的短路运算

JavaScript 中的 逻辑值 比较灵活,除了 Boolean对象,其他类型也可以是 逻辑值

类型 true false
Boolean true fasle
Number 0, NaN 0, NaN
String 空串 非空字符串
Object 非 undefined,null 对象 undefined, null

注意:空数组[]和空对象{}的逻辑值是true ;

利用这种特性,经常利用短路运算判断一个对象是否为undefined,如果是就新建一个对象,例如:

function get_book_name(book)
{
    
    
    return book.name || new Book("none").name;
}

上面的代码等效于:

function get_book_name(book)
{
    
    
    if (typeof(book) == "undefined")
        book = new Book("none");
    return book.name;
}

2.2 Python中的短路运算

Python 中的逻辑值非常灵活,除了bool对象,其他类型也可以作为 逻辑值

类型 true false
bool对象 True Fasle
数字 0 数字 0
容器 非空容器 空容器
字符串 空串 非空字符串
对象 None对象 None

利用这种特性,我们可以利用短路运算判断一个数组是否为空:

lis = []

lis or print("数组为空")

上面的代码等效于:

lis = []

if len(lis) == 0:
    print("数组为空")

3. 参考资料

猜你喜欢

转载自blog.csdn.net/qq_34802028/article/details/123853706