逻辑熔断的巧用
巧用逻辑熔断
之前我应该写过一篇逻辑熔断的文章(但是没找到,可能不是发布在博客园的吧)。简单来说就是当 s1=false
的时候 s1 && s2 && s3
比为 false
,不需要判断 s2
, s3
。当 s1
为 true
的时候 s1 || s2 || s3
必为 true
,同样不需要判断 s2
, s3
。在大多数编程语言中也是如此实现的。也就是说,当 s1=true
时哪怕 s1
s2
中包含令程序崩溃的语句对 s1 || s2 || s3
来说也不是问题——因为根本不会被执行,s1=false
时对 s1 && s2 &&s3
来说同样如此。
所以这里就衍生出两种用途:
- 选择一个执行
- 全部都要执行
下面以 shell 为例(其他语言也是可以的,不过没有这个直观,并且不少时候不建议你这么做)
选一个执行
tmux 是一个终端复用工具,在 tmux 环境下 tmux detach
可以退出 tmux 环境而不关闭 tmux,exit
则是退出并且关闭 tmux。不在 tmux 环境下的时候前者会报错,后者会退出当前终端。这时候就在 .bashrc 中加入一行 alias e='tmux detach || exit'
让 e
命令实现当我处于 tmux 环境的时候退出但不关闭 tmux,当我不处于 tmux 环境的时候退出当前终端。这里就实现了一个命令,在不同场景下的两种用法。再举一个例子。tmux attach
可以进入你最后退出的 tmux 环境,tmux
(不加任何参数)则可以新建一个 tmux 环境。那么 tmux attach || tmux
就可以实现当有一个 tmux 环境的时候就进入它,没有的时候就创建一个。
这里说的 “tmux 环境” 更准确来说应该叫 tmux 的 session,环境只是一种便于表述的说法,悉知。
全部都要执行
这个就很常见了,比如 mkdir tmp && cd tmp && touch README.MD && vim README.MD
就是先创建一个 tmp 目录,然后进入 tmp 目录,接着创建一个 README.MD 文件,最后使用 vim 打开这个文件。这个命令可以在前面任何一步失败的时候终止,不继续后续的执行。这个应该很常见了,不再过多列举。
注意事项
如前面所说,这里使用 shell 举例原因是其本身对此的贴合,而其他语言想要实现相同的效果除了麻烦一些之外,场景也需要考虑,不可乱用。就如同 switch 当中不使用 break 当然会在一些特殊的场景下有很好的作用,但不要为了这个作用特意使用 switch。尤其这里的逻辑熔断虽然大多数都是从左往右开始执行,但如果某天语言本身更改了这种顺序,你将很头疼。