记录本次学习是用于:Scala实现网站流量实时分析
Scala官网:https://www.scala-lang.org/,创始人:马丁·奥德斯基(编写了javac和scalac,没错就是我们初学java时所用命令行窗口中的javac),Scala不把程序员当傻子,马丁·奥德斯基对于Scala的定位很清楚:“Scala现在是为聪明人创造的,以后也是为聪明人服务的”。另外Kafka、Spark等大数据框架中也有Scala的身影。
之前有人曾经提到过,Scala新手和老手写出来的代码完全会呈现出两种不同的风格,甚至新人(比如我)根本读不懂有经验的Scala程序员所写的代码,有人于是戏称:“太好了,这样的话我们部门的实习生就不能乱碰我写的代码啦!”,但其实不仅风格不同,执行效率差距也一定是巨大的。
官网API参考:https://www.scala-lang.org/api/2.13.1/scala/index.html
一、Scala特点
Scala并不适于编程的初级课程,相反,它是为专业程序员定制的强力语言(吹一波)
1、它既是一门OOP语言,每个“操作符”都是一个对象,Scala在面向对象方面,要比java更彻底;同时也是一门函数式编程语言,可以将函数作为参数传递,可以用OOP、FP或者两者结合的方式编写代码。
2、Scala代码通过scalac编译成.class文件,在JVM上运行,可以无缝使用已有的丰富的java类库。即scala代码会编译成字节码,运行在java虚拟机(JVM)中。
3、Scala改变我们编程的看法,可以有很多种实现方式,并且可读性以及性能都有不一样的体现
二、Scala基础语法1
三、Scala基础语法2
四、Scala函数1
五、Scala函数2
六、柯里化Currying
Scala的柯里化作用是结合Scala的高阶函数,从而允许用户建立控制结构。柯里化(Currying)技术是Christopher Strachey 以逻辑学家Haskell Curry命名的(尽管它是MosesSchnfinkel和Gottlob Frege)发明的。它是把接受多个函数变换成接受一个单一参数的函数,并且返回接受余下参数且返回结果的新函数的技术。
柯里化作用:柯里化技术在提高适用性、延迟执行或者固定易变因素等方面有着重要的作用,加上Scala语言本身就是推崇简洁编码,使得同样功能的函数在定义与转换的时候更加灵活多样。另外Spark的源码中有大量运行Scala柯里化技术的情况;在Scala柯里化中,闭包也发挥着重要的作用。所谓闭包就是变量出了函数的定义域外在其他代码块还能有其作用,这样的情况称之为闭包,就上述的小例子,如果没有闭包作用,那么转换后函数其实返回的匿名函数是无法再与第一个参数相结合的,自然就无法保证其所实现的功能是跟原来一致的。
七、Scala Collection
1、数据Array
2、List链表
3、Set
Scala Set(集合)是没有重复对象的集合,所有的元素都是唯一的。Scala集合分为可变的和不可变的集合。默认情况下,Scala使用的是不可变集合(可变集合需要导入scala.collection.mutable.Set包)默认引用的是scala.collection.immutable.Set
注:很多方法未列出,使用方法与List相似
4、Map映射
Map(映射,也叫哈希表,Hash Tables )是一种可迭代的键值对(key/value)结构;所有的值都可以用键来获取;Map中的键都是唯一的;Map有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。默认情况下Scala使用的是不可变Map(可变Map则需要导入import scala.collection.mutable.Map)在Scala中可以同时使用可变与不可变Map,不可变的直接使用Map,可变的使用的是mutable.Map
5、Tuple元组
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素;元组的值是通过将单个的值包含在圆括号中构成的。