读书笔记 -- 《代码之髓》

2016/2/20
如何学习?
1. 在比较中学习。通过比较多种语言,总结出某种语言的独有特点,以及多种语言的共有特点。
2. 在历史中学习。 通过追溯语言的发展历史,了解语言是如何产生、变化和消失的,探寻语言发展演变的轨迹。
3. 在实践中学习。亲自进行程序设计,边实践边思考如何编程,才能深入理解语言设计者的意图,同时也能发现自己原先理解不到位之处。

2016/2/21
多种语言共通的知识才是要点。掌握了这些要点,学习其他语言时才会更加轻松。
在比较中学习多种语言时,一些知识能理解得更深刻。所谓语言不同,规则不同。
目标明确了,学习效率自然而然就提高了。

2016/3/17
        变量的诞生,就是为了用 字符串替代数值来表示 存储了某个值内存的位置。 (《代》P.45)

2016/3/23
       随着程序越来越庞大,把握全局逐渐变得困难起来。同时,有可能需要多次用到非常相似的操作。
       函数就是为解决这个问题产生的。通过在语义上把一整块代码切分出来为止命名,理解这段代码变得更加容易。此外,通过在其他地方调用这个函数,实现了代码的再利用。
       伴随着函数的使用产生了递归调用这一编程技巧,它非常适合处理嵌套形式的数据。(《代》p.52)

2016/4/10
       如何传达错误?
       假设有一个执行时可能出错的函数,取名为shippai。调用这个函数时,有可能成功也有可能出错。那么该如何分别编写成功时的操作和出错时的操作(错误处理)呢?
       错误处理的编写方法大体可分为两种。1) 一种是利用shippai函数的返回值来 传达程序出错的信息函数调用方通过检查返回值来相应地对错误进行处理。2) 另外一种是在调用shippai函数前设定好错误处理的代码,错误发生时能跳转至相应的错误处理代码。前者至今还在C语言等语言中经常使用,后者则被称为异常处理。 (《代》p.55)

2016/4/12
      何时抛出异常?
      1.  函数调用时参数不同的情况。比如:调用一个带有两个参数的函数但只传递一个参数时会发生什么?Python语言和Ruby语言会在函数调用的时刻抛出异常。但是JavaScript语言会把缺失的参数当作未定义的特殊值(undefined)继续执行。(p.68)
      2.  数组越界的情况。比如,试图读取一个只有三个数的数组的第四个数值时会怎么样?这就是数组的界外操作。此时,Python语言会抛出异常,Ruby语言会返回一个指示不存在的特殊值(null),而JavaScript语言会返回undefined。(p.69)

2016/4/25
具体的知识和抽象的知识
在语言x中如何实现y, 像这种具体的知识(know-how)可快速提高你的工作效率。但是一旦语言发生变化,这种知识就无法再使用。因此,我们不仅要学习具体的知识,更要有意识地去学习那些应用范围广泛的抽象的概念。
当然,学习了抽象的元知识,如果不将其与你具体的经验相结合,也无法在实际应用中发挥其作用。喜欢樱花的人即使剪下花开的树枝带回家,终将看到的也仅仅是枝枯花败的场景而已。要想樱花年年盛开,离开根部和枝干是不行的。
我们所学的知识到底有没有真正的“根基”,可以通过考察能否具体地举例或者具体地实现来确认。没有真正根基的知识是无法树藤摸瓜、触类旁通的,所谓学习到的知识也只能像鹦鹉学舌般的重复讲讲而已。想要因地制宜地活用知识更是缘木求鱼,根本没有可能了。(p.73)

2016/5/4
所谓递归调用,是指函数内部再次调用当前函数的过程。
当有一重嵌套、二重嵌套、三重嵌套时,可以考虑使用for循环解决。那么当有几十层这样的嵌套时,处理这样的数据结构,需要的是不管多少层嵌套都能做处理的机制,多层嵌套for语句是无法做到的。尤其是无规律的情况,比如循环一个数组中的数字相加求和,但是有的应该放数字的位置放了一个数组,这时使用for循环就无法处理了。
例如,有个数组:[ 1, 3, [1,2], 5 ]
那么当1加到3时,发现后面的不是整数,这时,如果调用自身(递归),把[1,2]中的“1”,“2”作为参数传入函数自身,则可求得为3,这时函数返回值为3, 然后继续往后边加,即最终实现:1+3+3+5 = 12.

读书笔记(完)
(如有其它新的读书笔记会第一时间发到博客)
Steven
2016/5/4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值