本文由 Koon 发表在 ScalaCool 团队博客。
关于笔记
大家好⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄,我是 Koon ,作为一名刚刚离开学校,开始体悟社会百态的大学僧, Scala
将作为我第一份工作不可或缺的一部分。为了高效学习、巩固知识以及督促自我,我决定记录我的学习历程。
这里所有的记录内容都将是我遇到的问题的解决,以及一些问题的看法,我会将所有所遇到的问题用学习清单的方式展示,而这些问题的来源,可能来自下面的学习列表,也可能来自我的学习内容,但是我都将注明出处。
关于学习
我为什么选择Scala
作为我今后学习、工作的主要语言?
很简单,因为我喜欢尝试。在初学计算机编程时,我想大多数人的经历会和我一样,学校为我们挑选一门语言,大多为 C
或 Java
,先是基本的数据类型,然后是程序控制语句,学习定义一个函数,那么程序就是一条一条的指令,告诉计算机该如何操作即可。那么 Scala
对于我而言就是一场冒险。
另一个原因,我并不满足现在所学的知识框架,就像前面所提及的学习过程一样,慢慢地,我们开始尝试一些逻辑上的概念来简化程序,比如迭代,比如递归。老师用事实告诉我们,就像斐波那契数列,在指令式的环境下,迭代优于递归。
在长期的教学过程中,只有命令式编程得到了强调,那就是程序员要告诉计算机应该怎么做,而不是告诉计算机做什么。而递归则通过灵巧的函数定义,告诉计算机做什么。我们为自己某种能力的丧失编织了一个美丽的谎言,直到越来越多的编程语言变得流行起来,使我们有机会看到各种语言、各种风格写出的程序,才发现自己应该重新审视递归这一概念。
无独有偶,很多优秀的性质在Scala
或者其他函数式的语言上得以体现,现在我们可以将函数视作数学上的函数,变量视作代数系统的变量,语句视作函数的语法糖,如果把面向对象比作搭积木的话,那么函数式就是拼线条,更灵活更有创意。
我认为,正确的学习方式是鲁迅先生所谓的拿来主义,既不全盘吸收,也不全盘放弃。现在网络上充斥着各种声音,有些激进有些委婉,同样的意思,不同人的说法可能带来的理解也不一样,因此你需要自己的标准,我认为最好的标准就是教科书,我现在使用的是 Cay S.Horstmann著 高宇翔译《快学Scala》,当然,书,肯定有更好的。
关于使用
如何使用这本笔记?我是一名初学者,每一天的学习,我都会遇到各种各样的问题,之后的每一篇的开始,我都将列下一份列表与清单,就像这里的例子。
如果你与我一样正在学习,你也可以根据自己的所学,进行一个测试,你可以给自己的学习做一个判断,然后去解决没有解决的问题,我会对于清单中的难点和重点进行深层次的调研。
如果你走在我的前面,非常欢迎你给我提供任何的意见,无论是内容排布,或者是在内容理解方面。
学习列表(例)
- twitter Scala 课堂, by twitter
- 菜鸟教程, by 菜鸟教程
- 写点什么, by hongjiang
- Coursera 课程, by coursera
- 其他学习资料整合, by 小柑
学习清单(例)
Scala 中的 String 就是 Java 中的 String ,因此可以使用 String 的所有方法;但是 Scala 不仅仅是更好的 Java ,应该用全新的头脑来学习他。
在命令行下可以使用解释器创建的变量名,但是在 idea 下,不能在 worksheet 下直接使用这个变量名。
Scala 中
if-else if…
最终一定要有else
。函数和方法很相似,而当真正遇到方法和函数之间的差异的时候,你可能会感到困惑。区别有:方法不是一个值,而函数是,可以将一个方法转为函数赋值给变量,有时候根据上下文编译器可以自动将方法转化为函数,而不需要使用下划线。
什么时候应该使用特质而不是抽象类。使用特质优先;而需要使用构造函数参数的时候,使用抽象类,因为
trait t(i: Int){}
中参数 i 是非法的。关于函数的泛型,用方括号语法引入的类型参数。
关于 apply 方法,当类或对象有一个主要用途的时候, apply 方法提供了一个很好的语法糖。定义一个 def ,用
apply()=…
表示了类的主要功能或者说是用途...
写在最后
这里是《Scala学习笔记》的序言,因为内容较多,所以干脆取名为"1",下一篇,我们将开启新世界的大门,以上 :)
停止炫耀你的忙碌!从“慢些匆忙”到“告别匆忙”,从“从容不迫”到“懂慢的人”。
慢慢来,比较快。