Scala学习系列(七)函数式编程(未完待更)
程序员文章站
2024-03-14 19:54:23
...
说明:本文将知识点全部写在代码中,后续再拿出来总结吧
一.函数式编程
代码:
package com.zpark.bigdata.scala.chapter05
object Scala01_Function {
def main(args: Array[String]): Unit = {
//TODO 函数式编程
//编程的范式(规范形式)
//面向对象:解决问题时将问题分解成一个一个小问题(形成了对象),分别解决
// 对象关系:继承,实现,多态,重写 TODO 主要关心他们之间的关系
//函数式编程关心的是问题解决的方案(封装功能):重点在于函数(功能)函数入参,出参
// 关心三个点:函数,函数入口参数,函数返回结果 TODO 主要关心解决方案
//函数式编程重要的是函数
//TODO Java中的方法和Scala中的函数都可以进行功能的封装,但是方法必须和类型绑定,但是函数不需要
//声明函数
// Java方法声明
//public static void test (String s){ 方法体}
//Scala函数声明
//TODO Scala语法很灵活,在任意语法中可以声明其他语法规则
def test(s: String):Unit={
//函数体
println(s)
}
//调用函数
test("zhangsan")
}
}
二.函数:入参(方法参数),出参(返回值)
代码:
package com.zpark.bigdata.scala.chapter05
object Scala02_Function01 {
def main(args: Array[String]): Unit = {
//函数:入参(方法参数),出参(返回值)
//无参,无返回值
def test():Unit={
println("Test")
}
test()
//有参,无返回值
//TODO 函数没有重载的概念
//TODO 如果在同一作用域中,函数不能重名
def test1(s:String):Unit = {
println(s)
}
test1("zhangsan")
//有参,有返回值
def test2(s:String):String = {
return s + "........"
}
val rtnVal: String = test2("lisi")
println(rtnVal)
//无参,有返回值
def test3(): String ={
return "Hello World"
}
println(test3())
//Scala中没有throws关键字,所以函数中如果有异常发生,也不需要在函数声明时抛出异常
}
}
三.函数简化过程
package com.zpark.bigdata.scala.chapter05
object Scala03_Function02 {
def main(args: Array[String]): Unit = {
//TODO Scala中可以采用自动推断功能来简化函数的声明
//1.如果函数声明中,明确无返回值Unit,那么即使函数中有return也不起作用
/*
def test(): Unit ={
//println("Hello World")
return "zhangsan"
}
*/
//2.如果将函数体最后一行代码进行返回,那么return关键字可以省略
/*
def test(): String ={
//return"zhangsan"
"zhangsan"
}
*/
//3.如果可以根据函数的最后一行代码推断类型,那么函数返回值类型可以省略
/*
def test()={
"zhangsan"
}
*/
//4.如果函数体重只有一行代码,大括号可以省略
//def test()="zhangsan"
//5.TODO 如果函数声明中没有参数列表,小括号可以省略
//TODO 如果函数小括号省略,那么访问时不能加小括号
//TODO 声明函数必须加def def:声明函数 val:变量
def test="zhangsan"
// val test1="lisi"
println(test)
//如果明确函数没有返回值,那么等号可以省略,省略后,编译器不会将函数体最后一行代码作为返回值
//如果函数没有参数列表,可以省略小括号,调用时一定不能使用小括号
//如果函数没有参数列表,但是没有省略小括号,调用时可加可不加
//扩展:匿名函数
()->{println("vvvvvvvvvvv")}
}
}
四.函数式编程:扩展
1.可变参数
2.默认参数
3.带名参数
package com.zpark.bigdata.scala.chapter05
object Scala04_FunctionHard {
def main(args: Array[String]): Unit = {
//函数式编程:扩展
//TODO 可变参数
def test(name:String*): Unit ={
println(name)
}
//调用函数时,可传多个参数,也可以不传参数
//test("zhangsan","lisi","wangwu")
//运行后结果WrappedArray(zhangsan, lisi, wangwu)
//test()
//运行后结果List()
//TODO 默认参数
//如果希望函数中的某一个参数使用默认值,那么可以在声明时直接赋初始值
def test1(name: String,age:Int = 20): Unit ={
println(s"${name} - ${age}")
}
def test2(name2:String = "lisi",name1:String): Unit ={
println(s"${name1} - ${name2}")
}
test1("zhangsan",22)
//调用函数时,参数匹配规则为从前到后,从左到右
//test2("zhangsan","wangwu")
//TODO 带名参数
test2(name1="zhangsan")
}
}
附加.工程图示