JS编程建议——13:养成优化表达式的思维方式(1)

建议13:养成优化表达式的思维方式(1)
对同一个表达式稍加改动就会打乱表达式的逻辑运算顺序,因此我们应该学会优化表达式的结构,不改变表达式的运算顺序和结果即可提高代码的可读性。
1.第一种方式——加小括号
例如,面对下面这个复杂表达式,可能被&&和||的优先级所迷惑。

  1. (a + b > c && a – b < c || a > b > c)
    不过,如果进行如下优化,逻辑运算的顺序就会非常清晰了。
  2. ((a + b > c) && ((a – b < c) || (a > b > c)))
    虽然增加这些小括号显得多余,但是这么写并没有影响表达式的实际运算,反而带来了非常明显的好处。学会使用小括号分隔符来分隔表达式的逻辑层次,不失为一种高明之举。

使用小括号分隔符来优化表达式内部的逻辑层次,是一种很好的设计习惯。如果复杂表达式中存在一些与人的思维方式相悖的不良的逻辑结构,也会影响人们对代码的阅读和思考,这个时候就应该根据人的思维习惯来优化表达式的逻辑结构。
2.第二种方式——改变表达式结构顺序
例如,想设计一个表达式来筛选学龄人群,即年龄大于或等于6岁且小于18岁的人:

  1. if(age >= 6 && age < 18){
  2. }
    直观阅读,表达式age>=6 && age<18可以很容易被每一个人所理解。继续复杂化表达式:筛选所有弱势年龄人群,以便在购票时实施半价优惠,即年龄大于或等于6岁且小于18岁,或者年龄大于或等于65岁的人:
  3. if(age >= 6 && age < 18 || age >= 65){
  4. }
    从逻辑上分析,上面表达式没有错误。但是从结构上分析就感觉比较模糊,为此我们可以使用小括号来分隔逻辑结构层次,以方便阅读。
  5. if((age >= 6 && age < 18) || age >= 65){
  6. }
    但是,此时如果根据人的思维来思考条件表达式的逻辑顺序时,会发现它有些紊乱,与人的一般思维方式发生了错位。人的思维是一种线性的、有联系、有参照的一种方式。

对于表达式(age >= 6 && age < 18)|| age >= 65来说,通过对此模型图的直观分析,会发现该表达式的逻辑是非线性的,呈现多线思维的交叉型,这种思维结构对于机器计算来说基本上没有任何影响。但是对于人脑思维来说,就需要认真思考之后,才能把这个表达式中各个小的表达式逻辑单元串联在一起,形成一个完整的逻辑线。

时间: 2024-09-02 04:42:30

JS编程建议——13:养成优化表达式的思维方式(1)的相关文章

JS编程建议——24:优化if逻辑(2)

建议24:优化if逻辑(2)重写if结构后,每次抵达正确分支时最多通过4个条件判断.新的if结构使用二分搜索法将值域分成了一系列区间,然后逐步缩小范围.当数值范围分布在0-10 时,此代码的平均运行时间大约是前面代码的一半.此方法适用于需要测试大量数值的情况,而相对离散值来说switch 更合适.当然,在性能影响不是很大的情况下,遵循条件检测的自然顺序会更容易阅读.例如,对于检测周一到周五值日任务安排的分支结构来说,虽然周五的任务比较重要,但是这类任务有着明显的顺序,安排顺序结构还是遵循它的自然

JS编程建议——24:优化if逻辑(1)

建议24:优化if逻辑(1)逻辑顺序体现了人的思维的条理性和严密性.合理的顺序可以提升解决问题的品质,相反,混乱的顺序很容易导致各种错误的发生.在分支结构中经常需要面临各种优化逻辑顺序的问题.人在思考问题时,一般总会对各种最可能发生的情况做好准备,这叫做"有备而来".分支结构中各种条件根据情况的先后.轻重来排定顺序.如果把最可能的条件放在前面,把最不可能的条件放在后面,这样程序在执行时总会按照代码先后顺序逐一检测所有条件,直到发现匹配的条件时才停止继续检测.如果把最可能的条件放在前面,

JS编程建议——33:优化循环结构

建议33:优化循环结构循环是最浪费资源的一种流程.循环结构中一点小小的损耗都会被成倍放大,从而影响程序运行的效率.下面从以下几个方面介绍如何优化循环结构,从而提高循环结构的执行效率.(1)优化结构循环结构常常与分支结构混用在一起,因此如何嵌套就非常讲究了.例如,设计一个循环结构,结构内的循环语句只有在特定条件下才被执行.使用一个简单的例子来演示,其正常思维结构如下: var a = true; for(var b = 1; b < 10; b ++ ) { // 循环结构 if(a == tru

JS编程建议——65:比较函数的惰性求值与非惰性求值

建议65:比较函数的惰性求值与非惰性求值在JavaScript中,使用函数式风格编程时,应该对于表达式有着深刻的理解,并能够主动使用表达式的连续运算来组织代码.1)在运算元中,除了JavaScript默认的数据类型外,函数也作为一个重要的运算元参与运算.2)在运算符中,除了JavaScript的大量预定义运算符外,函数还作为一个重要的运算符进行计算和组织代码.函数作为运算符参与运算,具有非惰性求值特性.非惰性求值行为自然会对整个程序产生一定的负面影响.先看下面这个示例:var a = 2;fun

JS编程建议——18:比较function语句和function表达式

建议18:比较function语句和function表达式在JavaScript语言中,既有function语句,也有函数表达式,这是令人困惑的,因为它们看起来是相同的.一个function语句就是值为一个函数的var语句的简写形式.下面的语句: function f() {} 相当于: var f=function() {} 这里建议使用第二种形式,因为它能明确表示f是一个包含一个函数值的变量.要用好JavaScript这门语言,理解函数就是数值是很重要的. function语句在解析时会被提

JS编程建议——5:防止JavaScript自动插入分号

建议5:防止JavaScript自动插入分号JavaScript语言有一个机制:在解析时,能够在一句话后面自动插入一个分号,用来修改语句末尾遗漏的分号分隔符.然而,由于这个自动插入的分号与JavaScript语言的另一个机制发生了冲突,即所有空格符都被忽略,因此程序可以利用空格格式化代码.这两种机制的冲突,很容易掩盖更为严重的解析错误.有时会不合时宜地插入分号.例如,在return语句中自动插入分号将会导致这样的后果:如果return语句要返回一个值,这个值的表达式的开始部分必须和return在

JS编程建议——8:谨慎使用运算符(1)

建议8:谨慎使用运算符(1)1.用===,而不用==JavaScript有两组相等运算符:===和!==.==和!=.===和!==这一组运算符会按照期望的方式工作.如果两个运算数类型一致且拥有相同的值,那么===返回true,而!==返回false.==和!=只有在两个运算数类型一致时才会做出正确的判断,如果两个运算数是不同的类型,会试图强制转换运算数的类型.转换的规则复杂且难以记忆,具体规则如下: '' == '0' // false 0 == '' // true 0 == '0' //

JS编程建议——25:恰当选用if和switch

建议25:恰当选用if和switchswitch结构中存在很多限制,存在这些限制的主要目的是提高多重分支结构的执行效率.因此,如果能够使用switch结构,就不要选择if结构.无论是使用if结构,还是使用switch结构,应该确保下面3个目标的基本实现:准确表现事物内在的.固有的逻辑关系.不能为了结构而破坏事物的逻辑关系.优化逻辑的执行效率.执行效率是程序设计的重要目标,不能为了省事而随意耗费资源.简化代码的结构层次,使代码更方便阅读.相对来说,下面几种情况更适合使用switch结构:枚举表达式

JS编程建议——23推荐提高条件性能的策略

建议23:推荐提高条件性能的策略与循环相似,条件表达式决定JavaScript 运行流的走向.与其他语言一样,JavaScript也采用了if 和switch 两种条件结构.由于不同浏览器针对流程控制进行了不同的优化,因此两者在性能上并没有特别大的差异,主要还是根据需求形式进行分析和选择:条件数量较大,建议选择switch 结构,而不是if结构,这样可以使代码更易读:如果条件较少时,建议选择if结构. //条件少 if(found) { //执行代码 } else { //执行代码 } //条件