函数式编程能用常量不用变量
类型在变量名称之后
变量 var a: Int = 10
常量 val b: Int = 10
字符串模板
println(s"
n
a
m
e
今年
{name}今年
name今年{age}")
标准输入 StdIn.readLine() Stdin.readInt()
文件读写
读Source.fromFile(“path”)
写直接用java
val writer = new PrintWriter(new File(“pathname”))
writer.write(“hello scala from java writer”)
writer.close()
数据类型
java中的类型
char byte short int long float double boolean
Character Byte Short Integer Long Float Double Boolen
scale数据类型
循环
包含10for(i <- 1 to 10) println(i)
不包含10for(i <- 1 until 10) println(i)
遍历数组集合for(i <- Array(12,23,34,45,56,67)) println(i)
循环守卫for(i <- 1 to 3 if i !=2)
步长 for(i <- 1 to 10 by 2) println(i)
for(i <- 10 to 1 by -2) println(i)
面向过程,面向对象,函数式编程
面向过程 按照步骤 执行效率更高 命令式编程
面向对象 按照属性和行为 耦合度低 好维护 命令式编程
函数式编程 关注映射关系,当作数学中的函数 没有变量 推荐能用常量不用变量 能用val不用var 不断求表达式的值 每次求值都有返回值 编译器复制
面向过程和面向对象编程都是命令式编程,命令式编程计算机容易理解,人难以理解,而函数式编程只关注业务逻辑,更易于人的理解,不易于机器的理解,由于函数式编程的不可变性,特别适合大数据分布式计算,提高并行处理能力。
Scala函数式编程的使用
函数格式
def sum(x : Int ,y : Int) : Int = { x + y}
省略原则
不用return返回 默认返回最后一行
def f2(name:Strnig) = name
如果用return返回 返回值类型不能省略
def f2(name:Strnig) : String ={ return name}
空参数时候 调用可以省略()直接用函数名调用
省略函数名匿名函数lambda表达式
(name:String) => {name}
匿名函数的用法:函数作为函数的参数 确定了数据,传入操作:
def f(func : String => Unit): Unit = {
func("函数作为函数参数")
}
f(name=>name)
匿名函数的简化
- 参数类型可以省略,可根据形参推导
- 只有一个参数可以省略括号
- 匿名函数函数体只有一行括号可以省略
- 如果参数只出现一次,则参数省略且后面的参数可_代替
- 如果可以推断出当前传入的println是一个函数体,而不是调用语句,可以直接省略下划线
def dualFunctionOneAndTwo(fun: (Int,Int)=>Int) : Int = {
fun(2,3)
}
dualFunctionOneAndTwo((a,b)=>a+b)
dualFunctionOneAndTwo(_+_)
dualFunctionOneAndTwo(_-_)
dualFunctionOneAndTwo(-_+_)
Scala 集合
- Seq
- Set
- Map
集合常用操作
list.head
list.tail
list.last
list.init
list.reverse
取前面若干个元素
list.take(3)
list.takeRight(7)
去掉前面若干个元素
list.drop(5)
最大值
list.max
list.maxBy(匿名函数)
list.sorted
list.sorted(Odering[Int].reverse)
list.sortBy(排序规则)
list.filter(%2==0)
list.map(*2)
list.flattern
list.flatmap(*2)
list.groupBy(%2)
list.reduce(+)