逻辑表达式中的某些术语可能会产生副作用。有时有必要确保所有副作用均按规定的顺序发生,并且没有一个被跳过,而评估结果指导了该逻辑:
if not (PushAirPlane(thrust) and TurnAirplane(vector)), SimulateCrash(severity)
在其他情况下,如果先前的评估返回false,则您不希望评估其余的任何项。
if IsAirborne() and not (PushAirPlane(thrust) and TurnAirplane(vector)), SimulateCrash(severity)
有些人会/已经争论过,在第二个示例中依靠短路行为是不好的形式,但这已经进入了编码风格和信念体系。世界上有很多非常好的代码确实依赖于一种语言提供的几乎所有功能,而事实就是如此。
VB的ANDALSO很清晰,似乎是在使这种做法更容易接受。
正如JimmyJames在回答中指出的那样,短路评估可能会对性能产生可衡量的影响。不提供该机制的语言总是评估表达式的每个术语,而提供这种机制的语言则可以生成额外的分支语句。无论哪种方式,很大程度上取决于评估每个术语所需的处理步骤数量,还取决于编译器和CPU架构。您通常不会在意这些事情,除非您在代码中有了一个确定的瓶颈,并且需要研究如何缓解它。关于允许在代码中进行短路评估的任何有无规则,都有可能导致缓慢的代码和尽早优化的机会大致相等,可能会浪费时间,因此请务必先评估再优化。