Scala高级语法入门 (一) 函数式编程第一篇 函数基础语法

🙆‍♂️🙆‍♂️ 写在前面

​🏠​ 个人主页: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、函数的至简原则就是能省就省

  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 48
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值