小坨的scala语言基础笔记
计算机的缘起
λ演算
图灵机
冯.诺依曼结构
编程范式
编程范式是指计算机编程的基本风格或典范模式。常见的编程范式主要包括命令式编程和函数式编程。面向对象就属于命令式编程。
命令式编程是植根于冯.诺依曼体系的,一个命令式程序就是一个冯.诺依曼机的指令序列,给机器提供一条又一条的命令序列,让其原封不动地执行。
函数式编程它将计算机的计算视为数学上的函数计算,函数式编程的基础是λ演算。
命令式编程中变量可变,当涉及多线程之间的状态共享时,需要锁机制实现并发控制,但锁机制的存在也造成了并发计算时的资源浪费,所以说,命令式编程是不适合并发计算的。
函数式编程更适用于并发计算,也能充分利用多核CPU的并行处理能力。
参考视频:https://www.icourse163.org/learn/XMU-1205811805?tid=1206105206#/learn/content?type=detail&id=1210573310&cid=1212766610&replay=true
scala语言基础
scala简介
scala是一门类Java的多范式语言,它整合了面向对象编程和函数式编程的特性。
scala运行于Java虚拟机(JVM)之上,并且兼容现有的Java程序。
运行scala程序
在scala解释器交互式运行程序
在scala解释器中运行脚本文件,用 :load 命令导入脚本,一次运行多行程序
通过编译打包的方式运行scala程序
scala的基本数据类型
和Java不同的是,在scala中,这些类型都是类,并且都是包scala的成员,比如,Int的全名是scala.Int。对于字符串,scala用java.lang.String类来表示字符串。
操作符
操作符优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符
在scala中,操作符就是方法,比如5 + 3 和 (5).+(3)是等价的
a 方法 b 等价于 a.方法(b)
富包装类
对于基本数据类型,除了以上提到的各种操作符外,scala还提供了许多常用运算的方法,只是这些方法是被封装到一个对应的富包装类中,这些类位于包scala.runtime中。
当对一个基本数据类型的对象调用其富包装类提供的方法,scala会自动通过隐式转换将该对象转换为对应的富包装类型,然后再调用相应的方法。
变量
scala 定义了两种类型的变量val和var。
- val为不可变变量,必须初始化,且不可以重新赋值。
- var为可变变量,声明的时候需要进行初始化,并可以重新赋值。
类型推断机制:根据初始值自动推断变量的类型,使得定义变量时可以省略具体的数据类型及其前面的冒号。
在REPL环境下,可以重复使用同一个变量名来定义变量,而且变量前的修饰符和其类型都可以不一样,REPL会以最新的一个定义为准。
输入输出
向控制台输入数据方法
向控制台输出数据方法
-
print()和println(),可以直接输出字符串或者其他数据类型,其中println()在末尾自动换行。
-
printf()C语言风格格式化字符串。
-
print()、println()和printf()都在对象Predef中定义,该对象默认情况下被所有scala程序引用,因此可以直接使用Predef()对象提供的方法。
s字符串和f字符串
scala提供的字符串插值机制,以方便在字符串字面量中直接嵌入变量的值
写入数据到文件
从文件中读取数据
可以使用scala.io.Source的getLines方法实现对文件中所有行的读取