© Bohua Xu

programming with types

Oct 3, 2022 · 2min

notes

declare function secondSinceLastComment(userId:string):number
declare function postComment(comment:string,userId:string):void

function commentGatekeeper(comment:string,userId:string):boolean{
    if((comment='')||(secondSinceLastComment(userId)<10))         //翻转条件提升性能
    return false

    postComment(comment,userId)

    return true
}

declare function secondSinceLastComment(userId:string):number
declare function postComment(comment:string,userId:string):void

function commentGatekeeper(comment:string,userId:string):boolean{
    if((comment='')||(secondSinceLastComment(userId)<10))         //翻转条件提升性能
    return false

    postComment(comment,userId)

    return true
}

大部分编译器运行时会对布尔表达式进行所谓的‘短路’优化,a and b 形式的表达式会被翻译为if a then b else false。

a OR b 会进行类似的翻译,使其成为if a then true else b。

之所以进行类似的翻译,是因为如果计算的第一个操作符已经能够知道整个表达式的结果,则完全不必进行计算第二个操作符,即所谓‘短路’。

所以上边我们把请求数据库的判断放在第二项,从而在一些情况下减小开销以提升性能。

CC BY-NC-SA 4.0 2021-PRESENT © Bohua Xu