美文网首页
编程基础_2020-03-10_04

编程基础_2020-03-10_04

作者: moongy | 来源:发表于2020-03-17 10:44 被阅读0次

    1. 如何方便的用测试写代码

    // 编写测试条件函数,参数为一个布尔值,和一个提示信息
    const ensure = function(condition, message) {
        //条件成立时,输出测试成功,条件失败,输出测试失败以及错误信息(message)
        if(condition) {
            log('测试成功')
        } else {
            log('测试失败, ', message)
        }
    }
    #编写数组元素乘积函数
    const product = function(array) {
        var s = 1
        var i = 0
        while(i < array.length()) {
            var n = array[i]
            s = s * n
            i = i + 1
        }
    }
    #对product函数进行测试
    const testProduct = function() {
        var numbers = [1, 2, 3, 4]
        var value = 24
        ensure(value == product(numbers), '测试错误1')
        ensure(1 == product([1), '测试错误2')
        ensure(0 == product([1, 2, 3, 0]), '测试错误3')
    }
    

    PS:当对无限小数进行比较时,可以计算其差值,小于一个下限

    2. 程序函数模块化

    将函数模块化,并创建一个入口函数,这样可以避免函数对从上到下执行的依赖性(不正交)。只有一个入口,一个测试入口,会更加规范。

    //编写main函数,整个程序外部只有函数和对象的定义(全局变量的使用??)
    const main = function() {
        //只是用一个入口进行函数的测试和运行
        //testProduction()
        ...
        ...
    }
    
    main() //这是整个程序的唯一入口
    

    PS:当在循环函数在使用continue时,注意条件语句的位置,防止出现死循环

    3. 字典(map/dict)

    map是一个重要的存储数据的数据类型,map通过key(键)来访问数据

    //创建一个字典
    var  taoer = {
        'name': 'gualang',
        'age': 15, //最后一个元素可以不加逗号,但为了一致性,最好加上逗号
    //程序中应该避免出现特例,造成不正交,避免错误的产生
    }
    

    字典的内容是成对出现的,由冒号分割开,左边的是key(键),几乎所有情况下,key都是字符串,定义时可以不加引号,但当有空格时,必须加引号
    右边的是value值,可以是任意类型
    实际上可以把array看作是 key 为数字的字典
    字典的数据引用: taoer['name'] 或者是 taoer.name

    4. 递归

    一个函数调用本身或者两个函数相互调用,递归有适用的场景,不应该随便使用,以下为示例:

    //使用递归求阶乘
    const fac = function(n) {
        //如果 n 是 0 则返回 1
        //这是递归终止的条件,必须要有,否则会无限递归
        if(n == 0) {
            return 1
        } else {
            //如果 n 不为 0,返回 n * fac(n - 1)
            //这时候 n 是已知的,fac(n - 1) 需要计算
            //于是代码进入下一重世界开始计算
            //return n * fac(n - 1), 直到为 0 时,返回 1,调用自身
            var n1 = fac(n - 1)
            return n * n1
        }
    }
    

    例:使用递归计算斐波那契数列

     //斐波那契数列的定义:fib(n) = fib(n - 1) + fib(n - 2)
    //当n 等于 1,2 的时候,fib(n) 为 1
    //1 1 2 3 5 8 13 21
    const fib(n) {
        //如果 n 小于 3,则返回 1 作为结束
        //这是递归终止的条件,必须要有,否则无限递归
        if(n < 3) {
            return 1
        } else {
            //如果 n 不为 1 和 2,返回 fib(n - 2) + fib(n - 1)
            //这时候 fib(n - 2) fib(n - 1) 需要计算
            //于是代码进入下一重世界开始计算
            var f1 = fib(n - 2) 
            var f2 = fib(n - 1)
            return f1 + f2
        }
    }
    

    相关文章

      网友评论

          本文标题:编程基础_2020-03-10_04

          本文链接:https://www.haomeiwen.com/subject/quukjhtx.html