Scala方法和函数

方法

  • 语法
def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
    // 方法体:一系列的代码
}
  • 说明
    参数列表的参数类型不能省略
    返回值类型可以省略,由scala编译器自动推断
    返回值可以不写return,默认就是{}块表达式的值
  • 示例
scala> def add(a:Int,b:Int) = a+b
add: (a: Int, b: Int)Int

scala> add(1,2)
res8: Int = 3

scala>
  • 注意
    如果定义递归方法,不能省略返回值类型
    示例:定义递归方法求阶乘 10 * 9 * 8 * 7 * 6 * … * 1
scala> def m1(x:Int)={
     | if(x==1) 1
     | else x * m1(x-1)
     | }
<console>:14: error: recursive method m1 needs result type
       else x * m1(x-1)
                ^

scala> def m1(x:Int):Int={
     | if(x==1) 1
     | else x * m1(x-1)
     | }
m1: (x: Int)Int

scala> m1(10)
res9: Int = 3628800
  • 方法的参数

1、默认参数
在定义方法时可以给参数定义一个默认值。示例:

//1. 定义一个计算两个值相加的方法,这两个值默认为0
//2. 调用该方法

scala> def add(x:Int = 0, y:Int = 0) = x + y
add: (x: Int, y: Int)Int

scala> add(10)
res14: Int = 10

scala> add(10,20)
res15: Int = 30

2、带名参数
在调用方法时,可以指定参数的名称来进行调用。示例

scala> def add(x:Int = 0, y:Int = 0) = x + y
add: (x: Int, y: Int)Int

scala> add(x=1)
res16: Int = 1

3、变长参数
如果方法的参数是不固定的,可以定义一个方法的参数是变长参数。
语法格式:

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

//在参数类型后面加一个*号,表示参数可以是0个或者多个

示例:

scala> def add(num:Int*) = num.sum
add: (num: Int*)Int

scala> add(1,2,3,4,5)
res17: Int = 15

函数

scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数

  • 语法
val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体
  • 注意
- 函数是一个对象(变量)
- 类似于方法,函数也有输入参数和返回值
- 函数定义不需要使用def定义
- 无需指定返回值类型
  • 示例
scala> val add = (x:Int, y:Int) => x + y
add: (Int, Int) => Int = <function2>

scala> add(1,2)
res3: Int = 3


//一个函数没有赋予一个变量,则称为匿名函数,
//后期再实际开发代码的时候,基本上都是使用匿名函数
(x:Int,y:Int)=>x+y

方法和函数的区别

  • 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
  • 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
  • 函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法,而方法则没有
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值