Scala语法介绍(七):方法

方法

一个类可以有自己的方法,scala中的方法和Java方法类似。但scala与Java定义方法的语法是不一样的。

定义方法

语法:

def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
   // 方法体:一系列的代码
}
  • 参数列表的参数类型不能省略
  • 返回值类型可以省略,由scala编译器自动推断
  • 返回值可以不写return,默认就是{}块表达式的值
    示例:
  1. 定义一个方法,实现两个整形数值相加,返回相加后的结果
  2. 调用该方法
    参考代码:
scala> def add(a:Int, b:Int) = a + b
m1: (x: Int, y: Int)Int
​
scala> add(1,2)
res10: Int = 3

返回值类型推断

scala定义方法可以省略返回值,由scala自动推断返回值类型。
定义递归方法,不能省略返回值类型

示例

定义递归方法(求阶乘)
10 * 9 * 8 * 7 * 6 * ... * 1
参考代码
scala> def m2(x:Int) = {
     | if(x<=1) 1
     | else m2(x-1) * x
     | }
<console>:13: error: recursive method m2 needs result type
       else m2(x-1) * x

方法参数

scala中的方法参数,使用比较灵活。它支持以下几种类型的参数:

  • 默认参数
  • 带名参数
  • 变长参数

默认参数

在定义方法时可以给参数定义一个默认值。
参考代码:

// x,y带有默认值为0 
def add(x:Int = 0, y:Int = 0) = x + y
add()

带名参数

在调用方法时,可以指定参数的名称来进行调用。
参考代码:

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

变长参数

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

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

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

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

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

方法调用方式

在scala中,有以下几种方法调用方式,

  • 后缀调用法
  • 中缀调用法
  • 花括号调用法
  • 无括号调用法

在后续编写spark、flink程序时,我们会使用到这些方法调用方式。

后缀调用法

这种方法与Java没有区别。
语法:

对象名.方法名(参数)

示例:
使用后缀法Math.abs求绝对值
参考代码:

scala> Math.abs(-1)
res3: Int = 1

中缀调用法

语法 : 注意空格

对象名 方法名 参数

例如:1 to 10
如果有多个参数,使用括号括起来
示例:
使用中缀法Math.abs求绝对值

scala> Math abs -1
res4: Int = 1

操作符即方法

scala中,+ - * / %等操作符都是方法,操作符是一个方法名字是符号的方法。

花括号调用法

语法:

Math.abs{ 
    // 表达式1
    // 表达式2
}

方法只有一个参数,才能使用花括号调用法
示例

使用花括号调用法Math.abs求绝对值
参考代码:

scala> Math.abs{-10}
res13: Int = 10

无括号调用法

如果方法没有参数,可以省略方法名后面的括号
示例:

  • 定义一个无参数的方法,打印"hello"
  • 使用无括号调用法调用该方法
    参考代码:
def m3()=println("hello")
m3()
发布了218 篇原创文章 · 获赞 330 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/weixin_43563705/article/details/105171566