本文总结Scala在语法上的新特性,以达到看得懂Scala程序的地步(Scala有些写法确实是比较骚气~)。
Scala的语法之所以显得骚气,是因为它的某些关键字或者运算符我们不认识,看起来更接近人类语法,比较随意不固定。
当我们学习的语言多了之后,就会有比较广阔的见识,当然也会有门户之见,对某些新语言的某些语法嗤之以鼻。但是,新语言(像Scala、Go)的出现,带给我们的知识冲击,一定是一件好事!一些我们想都不敢想的特性(比如goroutine)在语言层面被支持了,极大地提高了我们的生产效率,这才是符合历史发展规律的!以前我们只知道“应该这样”,现在知道了“居然还可以这样”。
和Go比较的话,Go更像是C/C++的后裔,Scala显然是Java的后裔。不过它们都有一个特点,就是更轻量化,试图总结诸多语言的优点,把最必要的那部分留下(比如包机制、面向对象),把造成臃肿混乱的干掉(比如多重继承),去芜存菁。
一门语言要能用,必然要有几个核心的API库,用于完成字符串操作、文件操作、网络操作、数据结构与算法等基础功能,比如:C语言的GLIBC,C++的STL,Go也有,Scala呢?
1. 左箭头 <-
2. 数组
var myList = Array(1.9, 2.9, 3.4, 3.5); //用var作为变量的数据类型,一下就让人想起被javascript支配的恐惧
3. 多维数组(不妨称为矩阵)
var myMatrix = ofDim[Int](3, 3) for (i <- 0 to 10) { for (j <- 0 to 10) { myMatrix(i)(j) = j; } }
能够支持矩阵,这就牛B大了,注定它非常适合用于大数据处理。
4. 数组运算--合并
var myList1 = Array(1.9, 2.9, 3.4, 3.5) var myList2 = Array(8.9, 7.9, 0.4, 1.5) var myList3 = concat(myList1, myList2)
5. 右箭头 ->
val x = Map("one" -> 1, "two" -> 2, "three" -> 3)
"->"是key和value之间的连接符。
6. 数据类型放在后面
var myVar : String = "foo"
评论:这是跟Go学的吧!C语言老人家好想把它怼到前面去!
7. 使用+号连接字符串
评论:干得漂亮!和Python一样,很自然。
8. 特殊的返回值类型Unit
评论:不明所以,叫void不就好了?Scala作者想装个B?