编程基础_2020-03-10_04

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)