【scala专栏_持续更新】14_scala方法

【大纲】
在这里插入图片描述

【正文】

1.【结论】方法语法

def 方法名(参数名:参数类型, 参数名:参数类型): 返回值类型 = {
    方法体代码块
} 

# 注意:
    0.参数类型不能省略

    1.返回值语句可省略return关键字,默认是块表达式{}的值

    2.=的作用是将方法体的返回值赋值给方法。

示例

# 定义方法
scala> def max(a:Int, b:Int):Int = {if (a > b) {a} else {b}}
max: (a: Int, b: Int)Int
# 省略方法体的{}
scala> def max(a:Int, b:Int):Int = if (a > b) a else b
max: (a: Int, b: Int)Int
# 返回值是Unit
scala> def max(a:Int, b:Int):Unit = if (a > b) println(a) else println(b)
max: (a: Int, b: Int)Unit

2.【结论】返回值类型推断

返回值类型推断。即,返回值类型可省略,scala会自动推断

# 注意:
    0.返回值类型是Unit时,这个的方法又叫做过程procedure,过程的=可省略
    
    1.当省略了=时,方法的返回值一定是Unit,哪怕方法体{}中给了返回值也不好使

    2.当方法体只有一行代码时,方法体的{}可省略,但与=同时省略会报错

示例

# 返回值类型推断
scala> def max(a:Int, b:Int) = if (a > b) a else b
max: (a: Int, b: Int)Int
# 省略返回值Unit
scala> def max(a:Int, b:Int) = if (a > b) println(a) else println(b)
max: (a: Int, b: Int)Unit
# 过程的=可省略
scala> def max(a:Int, b:Int) {if (a > b) println(a) else println(b)}
max: (a: Int, b: Int)Unit
# 当省略了=时,函数的返回值一定是Unit,哪怕方法体{}中给了返回值也不好使
scala> def max(a:Int, b:Int){var result = if (a > b) println(a) else println(b); result}
max: (a: Int, b: Int)Unit

3.【结论】递归方法不能省略返回值类型

递归方法,省略返回值类型,会直接代码报错
# 递归方法 求5的阶乘
object Recursion {

  def recursion(n:Int):Int = if(n == 1) 1 else n*(recursion(n - 1))

  def main(args: Array[String]): Unit = {
    val a = recursion(5)
    println(a) // 效果:120
  }
  
}

4.【结论】惰性调用方法

0.语法
    lazy val 变量名a = 调用方法A

1.作用
    惰性调用方法A时,方法A并未执行,当后边代码使用变量a时,方法A才执行
    
# 注意:
    0.lazy不能修饰var,代码会直接报错

示例

# 惰性调用方法
scala> def getSum(a:Int, b:Int) = a + b
getSum: (a: Int, b: Int)Int

scala> lazy val s = getSum(1, 2)
s: Int = <lazy>

scala> println(s)
3

5.方法参数

5.1.【结论】参数默认值

定义方法时,可以给参数设置默认值

def 方法名(参数名: 数据类型 = 默认值, 参数名: 数据类型 = 默认值): 返回值类型 = {
    方法体代码块
}

示例

# 参数默认值
scala> def getSum(a:Int = 1, b:Int = 2) = a + b
getSum: (a: Int, b: Int)Int

scala> val s = getSum()
s: Int = 3

5.2.【结论】带名传参

调用方法时,可指定参数名来进行赋值

示例

scala> def getSum(a:Int = 1, b:Int = 2) = a + b
getSum: (a: Int, b: Int)Int

scala> val s = getSum(b = 3)
s: Int = 4

5.3.【结论】变长参数

定义方法时,可定义一个变长参数,当调用此方法时,可传入0~多个参数来对应这个变长参数

def 方法名(参数名: 参数类型, 参数名: 参数类型*): 返回值类型 = {
    方法体代码块
}

# 注意:
    0.参数里的*表示调用时传入的参数可以0~多个
    
    1.每个方法只能有一个变长参数,且这个变长参数要放到参数列表的最后
    
    2.变长参数本质是个集合Seq(后边会讲)

示例

# 变长参数
scala> def getSum(a:Int, b:Int*) = a + b.sum
getSum: (a: Int, b: Int*)Int

scala> val s = getSum(1,2,3,4,5)
s: Int = 15

6.方法的调用方式

6.1.【结论】后缀调用

对象名或类名.方法名(参数)

示例

# 后缀调用
scala> val a = Math.abs(-2)
a: Int = 2

6.2.【结论】中缀调用

对象名或类名 方法名 参数

# 注意:
    0.如果有多个参数,使用()括起来
    
    1.scala中,所有的操作符,都是中缀调用的方法

示例

# 中缀调用
scala> val a = Math abs -2
a: Int = 2
# 操作符即方法
scala> val a = 1 + 1
a: Int = 2

6.3.【结论】花括号调用

对象名或类名.方法名{
    表达式1
    表达式2
}

# 注意:
    0.方法只有1个参数时才能使用

示例

scala> val a = Math.abs{println(1);println(2);-2}
1
2
a: Int = 2

6.4.【结论】无括号调用

如果方法没有参数,调用时可省略方法名后的()

示例

scala> def run() = println("run")
run: ()Unit

scala> run
run
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheese海盐芝士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值