Scala 学习


Java 的编译和解释执行:


javac xxx.java
java xxx.class

Scala 的编译和解释执行:


scala xxx.scala
scala xxx.class
# 还有一个 xxx$.class

构造方法私有化:

单例模式(只实例化一次)

object 伴生对象(class case class)

Scala 没有 static 关键字,取而代之的是 object,比 Java 更加面向对象

多看源码,多看文档

Scala 的注释和 Java 完全一样

Ctrl + Alt + L 进行格式化

一行不超过 80 或 100 个字符

变量和常量


var i:Int = 0 // 变量
val j:Int = 0 // 常量

能使用常量的地方,不适用变量
在函数式编程中,推荐使用常量(在数学中,不存在“变量”这个概念)

Scala 是强类型语言(这一点和 JavaScript 不一样)

class 和 case class 的区别

case class 可以直接访问构造参数

Scala 关键字(39 个),即使是关键字,通过反引号包裹之后也可以作为变量名

以操作符开头,且只包含操作符,也可以作为变量名(±*/#)等

Scala 的大多数对象也都实现了 toString 的方法

  • 可以复制多次拼接

(1)
println
(2)
printf()
(3) 字符串模板
println(s"${}“)
println(f”${age}岁的${name}在BUAA学习") 比 s 多了一个格式化功能
println(raw"…") 只做替换,其他原样输出
println()
三引号可以原样表示字符串

val sql = s"""
	|select * 
	|from
	|	student
	|where
	|	name = ${name}
	|and
	|	age > ${age}
	|""".stripMargin
println(sql

Scala 输入输出


import scala.io.StdIn

object Test05_StdIn {
	def main(args: Array[String]): Unit = {
		println("请输入你的名字:")
		val name: String = StdIn.readLine()
		val age: Int = StdIn.readInt()
	}
}

文件 IO

读取:Source
写入:调用 Java 的 PrintWriter 和 File


Source

Scala 数据类型

低精度向高精度转换,隐式转换

StringOps 是值类型,是对 Java String 的优化

Unit:空值,类似 Java 中 Void(大写)

AnyRef
Scala Collections
all java classes
other Scala classes
Null(空引用)

Nothing:什么都不知道

可以把抛出的返回值,返回给任何变量或函数

Byte Short Int Long


val b2: Byte = (10 + 20)

IDEA 的语法分析器会报错,实际编译不会报错

判断元素相等的方法。

函数式编程

函数高级

高阶函数

没有高阶函数,就要使用函数指针,比较复杂,Scala 提供了丰富的高阶函数用法,大大简化了函数的应用。

def addOperation(array: Array[Int], op: (Int, Int) => Int): = {
    
}

函数柯里化 & 闭包

函数闭包

将函数对象化,将其所用的局部变量打包放在堆区(C++ 和 Python 中也有类似特性),以供取用

递归

尾递归

控制抽象

把代码块作为参数传入

def myWhile(condition: =>Boolean): (=>Unit)=>Unit = {
	def doloop(op: Unit): Unit = {
        if (condition) {
            op
            myWhile(condition)(op)
        }
    }
    doLoop _ //只有一个参数,可以用下划线代替
}
n = 10
myWhile(n >= 10) {
    
}

惰性加载(懒加载)

面向对象

Scala 包管理

封装

继承

多态

伴生对象

// 饿汉式

// 懒加载式

特质

基本语法


Author: Yixiang Zhang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Yixiang Zhang !
评论
  TOC