逻辑熔断的巧用

发布时间 2023-10-07 11:09:48作者: ストッキング

巧用逻辑熔断

之前我应该写过一篇逻辑熔断的文章(但是没找到,可能不是发布在博客园的吧)。简单来说就是当 s1=false 的时候 s1 && s2 && s3 比为 false,不需要判断 s2, s3。当 s1true 的时候 s1 || s2 || s3 必为 true,同样不需要判断 s2, s3。在大多数编程语言中也是如此实现的。也就是说,当 s1=true 时哪怕 s1 s2 中包含令程序崩溃的语句对 s1 || s2 || s3 来说也不是问题——因为根本不会被执行,s1=false 时对 s1 && s2 &&s3 来说同样如此。

所以这里就衍生出两种用途:

  1. 选择一个执行
  2. 全部都要执行

下面以 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。尤其这里的逻辑熔断虽然大多数都是从左往右开始执行,但如果某天语言本身更改了这种顺序,你将很头疼。