🙆♂️🙆♂️ 写在前面
🏠 个人主页:csdn春和
📚 推荐专栏:更多专栏尽在主页!
JavaWeb专栏(从入门到实战超详细!!!)
SSM专栏 (更新中…)
📖 本期文章:Scala高级语法入门 (一) 函数式编程第一篇 函数基础语法
如果对您有帮助还请三连支持,定会一 一回访!🙋🏻♂️
函数基础
1、函数式编程思想
函数式编程思想:
解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用 这些封装好的步骤,解决问题。
例如:请求->用户名、密码->连接 JDBC->读取数据库
Scala 语言是一个完全函数式编程语言。万物皆函数。
函数的本质:函数是功能的封装
在 Scala 中函数式编程和面向对象编程完美融合在一起了
2、函数定义
2.1、基本语法
[修饰符] def 函数名 ( 参数列表 ) [:返回值类型] = {
函数体
}
2.2、函数和方法的区别
1、为完成某一功能的程序语句的集合叫做函数,即
函数是功能的封装
2、定义在类中的函数叫做方法
方法也是函数
Scala 中存在方法与函数两个不同的概念,二者在语义上的区别很小。scala 方法是类的一部分,而函数是一个对象,可以赋值给一个变量
。换句话来说在类中定义的函数即是方法
。scala 中的方法跟 Java 的类似,方法是组成类的一部分。scala 中的函数则是一个完整的对象。
Scala中的方法和函数从语法概念上来讲,一般不好区分,所以简单的理解就是:方法也是函数
。只不过类中声明的函数称之为方法,其他场合声明的就是函数了。类中的方法是有重载和重写的
。而函数可就没有重载和重写的概念了,但是函数可以嵌套声明使用,方法就没有这个能力了
调用也不一样
// 调用函数
say()
// 调用方法
Scala01_Function02.say()
// 或者使用过this调用方法
this.say() // 调用的方法
函数的作用域比较小
方法的作用域比较大 取决于对象的使用范围
函数的本质 编译后函数会被编译成一个新的方法 我们可以反编译看看
如果函数名和方法名相同,那么调用时 默认为函数调用
2.3、函数声明
函数分为多种情况,有些无参有些有参,有些无返回值有些有返回值,下面我们具体来看看各种类型的函数如何声明
【1】无参 无返回值
// TODO 1、无参数 无返回值
def fun1(): Unit ={
println("无参无返回值函数!")
}
// 调用 函数没有参数 那么调用时可以省略小括号
fun1()
fun1
函数没有参数 参数为0 调用的时候可以省略() 不写
【2】无参 有返回值
// TODO 2、无参数 有返回值
def fun2(): String = {
return "jack"
}
val res1 = fun2()
println(res1)
【3】有参 无返回值
// TODO 3、有参数 无返回值
def fun3(name: String): Unit = {
println(s"欢迎您${name}先生!")
}
fun3("原来是小瘪三")
【4】有参 有返回值
// TODO 4、有参数 有返回值
def fun4(name : String): String ={
"你好" + name
}
val res2 = fun4("zs")
println(res2)
【5】多参数 无返回值
// TODO 5、多参数 无返回值
def fun5(name:String,age:Int): Unit ={
println(s"${name}今年${age}岁!")
}
fun5("张无忌",23)
【6】多参数 有返回值
// TODO 6、多参数 有返回值
def fun6(n1:Int,n2:Int): Int ={
return n1 + n2
}
val res3 = fun6(10, 3)
println(res3)
3、函数参数
3.1、可变参数
参数的个数在某些情况下不能固定 则使用可变参数
// TODO 可变参数
// java中国可变参数使用... scala中国可变参数使用*
def fun1(name:String*): Unit ={
println(name)
}
fun1() // 一个参数都没有 空集合 list
fun1("zs") // 一个参数 包装成数组
fun1("zs","ls") // 两个参数
可变参数不能放置在参数列表的前面,必须放置在参数列表的最后
实例代码:
// 一个人喜欢哪些运动
def fun2(name:String,sport: String*) {
println(s"${name}喜欢的运动有${sport}")
}
fun2("战三","篮球")
fun2("战三","篮球","足球")
3.2、参数默认值
有些时候我们不传递参数会使用到默认值,在scala中也可以设置默认值,我们可以直接在参数的后面使用=设置一个默认值
object Scala02_FunctionDefine03 {
def main(args: Array[String]): Unit = {
// TODO 参数默认值
// 函数参数默认是以val声明的 意味着不能修改
def getPasswd(passwd:String = "123123"): Unit ={
println(passwd)
}
// 调用时 不传递参数则使用的是默认值
getPasswd()
getPasswd("000000")
}
}
3.3、带名参数
我们知道当多参数时,参数的传递是按照顺序匹配的,如果我们想要打乱顺序则可以使用带名参数传递,简而言之,带名参数就是在指定参数的时候带上参数名
object Scala02_FunctionDefine04 {
def main(args: Array[String]): Unit = {
// TODO 带名参数
def getPasswd(passwd:String = "123456",name:String): Unit ={
println(s"${name}的密码为:${passwd}")
}
// 参数在传递时默认为顺序匹配
getPasswd(name = "张三")
}
}
4、函数的至简原则
所谓的至简原则,其实就是Scala的作者为了开发人员能够大幅度提高开发效率。通过编译器的动态判定功能,帮助我们将函数声明中能简化的地方全部都进行了简化。也就是说将函数声明中那些能省的地方全部都省掉。所以这里的至简原则,简单来说就是:
能省则省
。
☑️ 至简原则具体规则:
1、return 可以省略,Scala 会使用函数体的最后一行代码作为返回值
2、如果函数体只有一行代码,可以省略花括号
3、返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)
4、如果有 return,则不能省略返回值类型,必须指定
5、如果函数明确声明 unit,那么即使函数体中使用 return 关键字也不起作用
6、Scala 如果期望是无返回值类型,可以省略等号
7、如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加
8、如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略
9、如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略
object Scala02_FunctionDefine05 {
def main(args: Array[String]): Unit = {
// TODO 函数的致简原则 能省则省
def fun1(name: String): String = {
return name
}
println(fun1("张三"))
// 1、return 可以省略
def fun2(name: String): String = {
name
}
// 2、如果函数体只有一行代码 则可以省略花括号 {}
def fun3(name: String): String = name
// 3、返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)
def fun4(name: String) = name
// 4、如果有 return,则不能省略返回值类型,必须指定
def fun5(name: String): String = return name
// 5、如果参数列表中没有声明任何参数那么参数列表可以省略
def fun6 = "万物" // 省略了参数列表 返回值类型 花括号 return关键字
// 当函数省略参数列表 调用时不能加()
println(fun6)
//6、Scala 如果期望是无返回值类型,可以省略等号
def fun7(): Unit = println("hello world!")
// 7、 如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略
def say = (name:String) => {println(s"${name}欢迎您")}
def fun8(f:String => Unit): Unit ={
println("******************")
}
}
}
5、小结
📝1、函数其实就是功能的封装,定义在类中的函数叫做方法,方法和函数的调用不同,方法有重载函数没有,函数可以嵌套但是方法不行
📝2、函数声明的时候没有参数(参数个数为0),在调用的时候可以省略()
📝3、在Scala中可变参数使用* 表示,可变参数不能放置在参数列表的前面,必须放置在参数列表的最后
📝4、参数的默认值设置是直接在参数后面赋值
📝5、带名参数指的是在传递参数的时候带上名字 比如 name=“张三”
📝6、函数的至简原则就是能省就省