Scala 学习笔记 (1):初见

576 阅读5分钟

本文由 Koon 发表在 ScalaCool 团队博客。

关于笔记

​ 大家好⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄,我是 Koon ,作为一名刚刚离开学校,开始体悟社会百态的大学僧, Scala 将作为我第一份工作不可或缺的一部分。为了高效学习巩固知识以及督促自我,我决定记录我的学习历程。

​ 这里所有的记录内容都将是我遇到的问题的解决,以及一些问题的看法,我会将所有所遇到的问题用学习清单的方式展示,而这些问题的来源,可能来自下面的学习列表,也可能来自我的学习内容,但是我都将注明出处。

关于学习

​ 我为什么选择Scala 作为我今后学习、工作的主要语言?

​ 很简单,因为我喜欢尝试。在初学计算机编程时,我想大多数人的经历会和我一样,学校为我们挑选一门语言,大多为 CJava ,先是基本的数据类型,然后是程序控制语句,学习定义一个函数,那么程序就是一条一条的指令,告诉计算机该如何操作即可。那么 Scala 对于我而言就是一场冒险。

​ 另一个原因,我并不满足现在所学的知识框架,就像前面所提及的学习过程一样,慢慢地,我们开始尝试一些逻辑上的概念来简化程序,比如迭代,比如递归。老师用事实告诉我们,就像斐波那契数列,在指令式的环境下,迭代优于递归。

​ 在长期的教学过程中,只有命令式编程得到了强调,那就是程序员要告诉计算机应该怎么做,而不是告诉计算机做什么。而递归则通过灵巧的函数定义,告诉计算机做什么。我们为自己某种能力的丧失编织了一个美丽的谎言,直到越来越多的编程语言变得流行起来,使我们有机会看到各种语言、各种风格写出的程序,才发现自己应该重新审视递归这一概念。

​ 无独有偶,很多优秀的性质在Scala 或者其他函数式的语言上得以体现,现在我们可以将函数视作数学上的函数,变量视作代数系统的变量,语句视作函数的语法糖,如果把面向对象比作搭积木的话,那么函数式就是拼线条,更灵活更有创意。

​ 我认为,正确的学习方式是鲁迅先生所谓的拿来主义,既不全盘吸收,也不全盘放弃。现在网络上充斥着各种声音,有些激进有些委婉,同样的意思,不同人的说法可能带来的理解也不一样,因此你需要自己的标准,我认为最好的标准就是教科书,我现在使用的是 Cay S.Horstmann著 高宇翔译《快学Scala》,当然,书,肯定有更好的。



关于使用

​ 如何使用这本笔记?我是一名初学者,每一天的学习,我都会遇到各种各样的问题,之后的每一篇的开始,我都将列下一份列表清单,就像这里的例子。

​ 如果你与我一样正在学习,你也可以根据自己的所学,进行一个测试,你可以给自己的学习做一个判断,然后去解决没有解决的问题,我会对于清单中的难点和重点进行深层次的调研。

​ 如果你走在我的前面,非常欢迎你给我提供任何的意见,无论是内容排布,或者是在内容理解方面。

学习列表(例)

  1. twitter Scala 课堂, by twitter
  2. 菜鸟教程, by 菜鸟教程
  3. 写点什么, by hongjiang
  4. Coursera 课程, by coursera
  5. 其他学习资料整合, by 小柑

学习清单(例)

  1. Scala 中的 String 就是 Java 中的 String ,因此可以使用 String 的所有方法;但是 Scala 不仅仅是更好的 Java ,应该用全新的头脑来学习他。

  2. 在命令行下可以使用解释器创建的变量名,但是在 idea 下,不能在 worksheet 下直接使用这个变量名。

  3. Scala 中 if-else if… 最终一定要有 else

  4. 函数和方法很相似,而当真正遇到方法和函数之间的差异的时候,你可能会感到困惑。区别有:方法不是一个值,而函数是,可以将一个方法转为函数赋值给变量,有时候根据上下文编译器可以自动将方法转化为函数,而不需要使用下划线。

  5. 什么时候应该使用特质而不是抽象类。使用特质优先;而需要使用构造函数参数的时候,使用抽象类,因为 trait t(i: Int){} 中参数 i 是非法的。

  6. 关于函数的泛型,用方括号语法引入的类型参数。

  7. 关于 apply 方法,当类或对象有一个主要用途的时候, apply 方法提供了一个很好的语法糖。定义一个 def ,用 apply()=… 表示了类的主要功能或者说是用途...

写在最后

​ 这里是《Scala学习笔记》的序言,因为内容较多,所以干脆取名为"1",下一篇,我们将开启新世界的大门,以上 :)

​ 停止炫耀你的忙碌!从“慢些匆忙”到“告别匆忙”,从“从容不迫”到“懂慢的人”。
​ 慢慢来,比较快。