Scala基础2-函数

这篇博客深入介绍了Scala编程中的函数命名规范、递归函数、指定参数、可变长度参数以及匿名函数的使用。通过示例展示了如何定义和调用这些函数,包括如何将函数作为参数传递。此外,还探讨了函数至简原则,如无返回值时无需使用`return`关键字等。
摘要由CSDN通过智能技术生成

命名方法

def 方法名(参数名:参数类型[泛型]):返回类型={方法体}
  • 取两值中的最小值
def minValue(a: Int, b: Int): Int = {
  if (a > b) b else a
}

val i = minValue(2, 3)
println(i)
def myName(name: String, age: Int): String = {
  s"我的名字是$name,我的年龄是$age"
}

println(myName("张三", 20))

递归

def diGui(n: Int): Int = {
  if (n == 1) 1
  else n * diGui(n - 1)
}

print(diGui(5))

指定参数

def showMsg(name: String, age: Int): Unit = {
  println(s"hello,$name,age:$age")
}

showMsg("abc", 20)
showMsg(age = 20, name = "abc")

可变长度参数*

//可变长度参数*
def showMsg2(name: String, age: Int*): Unit = {

}

showMsg2("abc", 20, 20, 20, 20, 20)

匿名函数

def sum(a: Int, b: Int): Int = a + b
val ab: (Int, Int) => Int = (a: Int, b: Int) => a + b
val ba = ab
println(sum(2, 3))
println(ab(2, 3))
println(ba(2, 3))
  • 练习
val a: String = "aaa"
val b: Int = 20
val c: (Int, Int) => Int = (a, b) => a + b
val d: (Int, Int) => Int = c

函数作为参数传递

def funTest(f: (Int, Int) => Int, msg: String): String = {
  val a = 100
  val b = 50
  msg + f(a, b)
}

println(funTest((a: Int, b: Int) => a + b, "和为"))
println(funTest((a, b) => a * b, "积为"))
  • 练习1
def funTest2(): (String, String) => String = {
   def funDemo2(a: String, b: String): String = {
      a + b
   }
      funDemo2(a, b) => a + b
}


println(funTest2()("张三", "牛"))


def ma(): Int => (Int, Int) => Int = {
  a => {
    if (a % 2 == 1) {
      (a, b) => a + b
    } else {
      (a, b) => a - b
    }
  }
}

println(ma()(2)(2, 3))
  • 练习2
//传两个数字num1 num2
def ma2(num1: Int, num2: Int, f: (Int, Int) => Int): (Int, Int) => Int = {
  if (f(num1, num2) % 2 == 0) {
    (a, b) => a + b
  } else {
    (a, b) => a - b
  }
}

println(ma2(10, 20, (a, b) => a + b)(99, 98))

函数至简原则

  1. 若是Unit则return不起作用
  2. 若有return,必须声明返回类型
  3. 若声明了返回类型,则不需要加return
  4. 函数无参可以不加(),若不加,调用时也不能加
  5. scala函数的lambda表达式,不关心函数的名称,只关心逻辑,则def和函数名可以省略(name: String) => println(name)
def tes4(fun2:(String)=>Unit)={
    fun2("123")
}

tes4((a)=>println(a))
tes4(println(_))
tes4(println)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值