〇,编程环境
1,安装Java
一,算术运算
二,输入输出
输出:println,print,printf
读文件:scala.io.Source
1,输出
2,输入
3,写文件
4,读文件
三,导入包package
Scala有以下一些常见的导入package的方式
1,引入全部对象 (import scala.io._)
四,语法规则
1,标识符
2,注释
多行注释用/*开头,以*/结尾。
Scala中的数据类型有:
以及
Unit(表示无值与C语言void等同,用作无返回值的方法的返回类型),……
4,变量
Scala支持两种类型的变量,即常量val和变量var。
5,标点括号
(1)小括号()用来表示优先级,传入函数参数序列,以及传入容器的下标或key。
6,编译执行
Scala代码有以下几种执行方式:
然后在cmd中输入 scala HelloWorld.scala 执行。
scalac HelloWorld.scala,
生成HelloWorld.$class和HelloWorld.class的JVM文件,
再用 scala -classpath . HelloWorld 执行。
注意当使用第(3)种方法scalac把代码编译时,脚本中必须要定义object单例对象。并且在object对象中实现main方法作为程序入口。
五,Scala数据结构概述
Scala中最常用的数据结构为数组Array以及Collection包中的各种容器类。
按照两个角度进行划分,容器类可以分为可变或者不可变类型,有序或者无序类型。常用的数据结构有以下一些:
ArrayBuffer 不定长数组:有序,可变类型,长度可以扩展。
List 列表:有序,不可变类型。
六,字符串String
Scala的字符串是一种有序且不可变的基本数据类型,直接使用的Java中定义好的java.lang.String。
1,创建字符串
2,字符串常用操作
七,数组Array
数组Array是一种可变的有序数据结构,但其长度创建后是不可变的,如果要使用长度可变的数组,可以引入ArrayBuffer。
1,创建数组
2,数组常用操作
八,列表List
列表和数组相似,都是有序的结构,但列表中的元素是不可变的。
1,创建列表
2,列表常用操作
九,集合
集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。
十,映射Map
映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。
1,创建Map
2,Map常用操作
十一,元组Tuple
元组也是一种不可变的数据结构,其特点是可以存储类型不同的对象。
十二,迭代器Iterator
迭代器不是一种容器,但是它提供了一种访问容器的方法。
1,创建Iterator
2,使用Iterator
十三,选项Option
Option表示有可能包含值,也可能不包含值的容器。
十四,选择结构
Scala的选择结构主要通过if语句以及match语句实现。
1,if语句
2,match语句
十五,循环结构
Scala循环结构主要是 for循环和while循环,此外还可以使用for推导式。
1,for循环
2,while循环
3,循环控制
在Scala里,一个for表达式可以包含1个或多个「生成器」(Generator)。
十六,异常捕获
异常捕获的语句是 try...catch...finally...
十七,函数定义
Scala中的函数可以通过关键字def定义或者使用匿名函数。
十八,匿名函数
Scala中的函数是一等公民,可以像变量一样定义和使用。
十九,高阶函数
高阶函数即可以传入函数作为其参数的函数。
Scala支持非常强大的函数式编程风格。
函数式编程风格的特点不显式使用循环,而是利用高阶函数调用普通函数在数据上进行遍历操作。
Scala的Array和容器中的各种数据结构内置有非常丰富的高阶函数。
二十,类的定义
Scala中用关键字class定义普通类,用abstract class定义抽象类,用case class定义样例类, 用object定义单例对象,用trait定义特征。
Scala有3中定义类的风格,java风格,简写风格,和case类风格。
1,java风格
2,简写风格
3,case类风格
二十一,getter和setter
私有属性可以通过getter和setter方法比较安全地访问和修改。
二十二,构造器
Scala的类包括一个主构造器和若干个(0个或多个)辅助构造器。
主构造器即定义类时传参并用来初始化对象属性的构造器,它是隐含的。
辅助构造器的名称为this,每个辅助构造器都必须调用一个此前已经定义好的主构造器或辅助构造器。
二十三,单例对象和伴生对象
object定义的对象为单例对象,可以直接使用无需实例化。
二十四,继承和特征
Scala可以通过extends关键字指定从某个超类(父类)进行继承。
为了实现多继承的功能,在指定一个超类的同时可以指定若干个trait特征进行继承。
二十五,apply,unapply和update
当把对一个对象当做函数使用时,会自动调用它的apply方法。
1,内部范例
2,apply使用演示
3,unapply使用演示
二十六,Scala语言的设计哲学
1,一切皆对象
从整数,字符串,函数,类到各种数据结构,Scala中一切皆为对象,Any是它们的超类。
2,一切皆表达式
Scala中书写的每条语句都可以看成是一条表达式。
表达式的基本格式是 name:type = {...}
name是对象标识符,type是它的类型,{}括起来的作用域部分都是它的值。
从变量的定义,函数的定义,判断语句,循环语句到类的定义,都可以看成是这个格式省去某些部分的特例或语法糖等价书写形式。
3,简洁而富有表现力
同样的功能,Scala的代码量可能不到Java的五分之一。
4,函数式编程
函数的特点是操作无副作用,唯一的作用的生成函数值。
为了逼近这个目标,scala设计的默认数据结构绝大部分是不可变的。
显式的for或者while循环是不可取的,让我们用更多的高阶函数吧。
5,多范式编程
尽管函数式编程是Scala的推荐编程范式,但Scala同时混合了强大的命令式编程的功能。
Appendix,参考资料
1,林子雨《Spark编程基础》
https://study.163.com/course/courseMain.htm?courseId=1005031005
http://dblab.xmu.edu.cn/blog/spark/
https://www.runoob.com/scala/scala-tutorial.html