巧用短路运算简化代码"/>
【编程技巧】巧用短路运算简化代码
文章目录
- 1. 短路运算
- 1.1 短路运算的符号
- 1.2 运算规则
- 1.3 示例 (C/C++)
- 1.3.1 逻辑与的短路运算
- 1.3.2 逻辑或的短路运算
- 2. 特殊应用
- 2.1 JavaScript中的短路运算
- 2.2 Python中的短路运算
- 3. 参考资料
1. 短路运算
短路运算就是在从左到右的逻辑运算中,前者满足要求,就不再执行后面的表达式。在编程中合理利用短路运算,可以简化我们的代码。
1.1 短路运算的符号
- 逻辑与
- 逻辑或
- 非
编程语言中的逻辑运算符大多是:
&&
、||
、!
(如C/C++、Java、JS、C#),少部分是and
、or
、not
(如 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");
elseprintf("等于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;elsereturn 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. 参考资料
- C语言逻辑运算短路(与运算、或运算)_好儿郎-志在四方的博客-CSDN博客_c语言逻辑短路
- 短路运算(逻辑运算是短路运算中最常见的一种) - 灬安 - 博客园
- JavaScript逻辑运算符“&&”和“||”短路原则的应用_瑝琦的博客-CSDN博客
- 【Python】true和false_云朵先生_的博客-CSDN博客
更多推荐
【编程技巧】巧用短路运算简化代码
发布评论