谈谈学习Scala的心得
----读《快学Scala》有感
对于Scala从没有接触过,但我想学习它。有两个原因:
首先,想挑战一下自己在大学期间所掌握的学习方法论,检验一下自己学习能力情况;
第二,马上将要就业了,即将到来的工作不一定是用现在学会的面向过程的C或面向对象的java,说不定马上要用上Scala了。
在阅读的过程中,我分两步阅读,现在总结也分两步去总结:
第一步:前言与目录
这部分给我了很大的学习启发。很重要的一句话“Scala是一门以Java虚拟机(JVM)为目标运行环境并将面向对象和函数式编程语言的最佳特性结合在一起的编程语言。”明确了以下几点:
1.JVM运行环境,要求我们要有java基础,跟java有很大关系;
2.面向对象,说明这个语言中也会有类与对象,一些面向对象的设计模式也可以应该到这里面去,还有面向对象思想会渗入其中;
3.函数式编程语言,要了解函数式编程。上网找到来自wiki的定义:In computer science, functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.
大概意思:在计算机科学中,函数式编程是一种编程模型,将计算机运算看作是数学中函数的计算,同时避免了状态以及变量。
第二步,实例与实战总结
相对于用java或C++,用Scala真的能大大提高效率,有些人说代码量会比用JAVA少三分之二,通过阅读真的有这个可能性,因为它具如下的几个特点:
1.书写简单与简洁
很多东西都变得十分的简单,用这个就好像之前用JQuery的感觉,从很繁琐的javaScript解脱出来,简洁表现为:类型只有一个,所有类型都是类;而我们以前纠结的基本类型与类就不存在了;函数调用如果没有参数不用写参数;强大的循环;创建定长数组,直接new Array;可以用相同的代码处理不同的数据结构。
2.名副其实的面向函数
编码风格基本都是函数的形式的,无论是运算(例如a+b等价于a.+(b))还是类型的转换(例如”22.3”.toDouble)都是函数。
3.没有“语句”,只有“表达式”
表达式有值,语句执行动作,Scala全是有值的。例如if表达式、块都有值。
4.考虑很周全的语言,例如,readLine函数,可以带提示字符的。字符串遍历不使用下标。
5.Scala与javas相互操作。
6.不存在状态,对并发编程很大的优势
一般在采用函数式编程,意味着状态不保存在变量中。经过查阅资料,函数式编程使用参数保存状态,最好的例子就是递归。而对于递归太多,对于栈出现的溢出,一般采用尾递归来解决。
看完这本书,总结出学习语言类书籍方法论:
第一,编程语言基于什么思想;就像前面提到的那样,Scala语言基于面向对象与面向函数编程模式。
第二,多多练习(掌握语法),与以前学习的语言进行类比;《快学Scala》整篇都在与JAVA和C++进行了比较。
第三,思考然后反复前面一二点。无论学习什么都得支持与勤奋。
另外,从另一个方面觉得,一门新的语言其实就是一个新的工具,就像C与JAVA,Scala能实现,他们也能实现,可是,新语言新工具的出现与热捧必有它的优势之处,Scala就是简便,用起来简结。从这此刻让我想到了基础的重要性,很多语言都是一脉相承的,第一步我学习了C,C掌握后,接着java前面的基本语法不用学习,直接奔到java/的类与对象;现在学习Scala语言,在掌握JAVA 的基础上去带有区别地去学习Scala语言,同时加上以前学习过ActionScript,语言一点不陌生,反复练习掌握不难。
最后,学习C并不单纯是学习C,以C为一类的面向过程语言思想掌握,学习java把面向对象掌握了。同理,学习Scala的语言,并不是为学习Scala语言本身,目标得把掌握面向函数风格与思想掌握,将来可以把Scala作为基础学习其它语言。