Scala
第五章学习目标
-
掌握方法的格式和用法
-
掌握凾数的格式和用法
-
掌握九九乘法表案例
1.方法
1.1概述
实际开发中,我們需要編写大量的代码,这就勢必会渉及到重夏的需求.例如:求10和20的最大値,求11和22的最大値,像祥的需求,用来迸行比較的還輯代碕需要編写兩次,而如果把比較的還緝代碣放到方法中,只需要編写一次就可以了,文就是方法. scala中的方法和Java方法炎似,但scala与ava定乂方法的語法是不- -祥的。
1.2珸法格式
def 方法名(参数名:参数类型,参数名:参数类型) : [return type] = {
//方法体
}
注意:
- 参数列表的参数类型不能省略
- 返回值类型可以省略,由scala自动推断
- 返回值可以不写return,默认就是{}块表达式的值
1.3示例
需求
- 定义一个方法getMax,用来获取两个整型数字的最大值,并返回结果(最大值)
- 调用该方法获取最大值,并将结果打印到控制台上
参考代码
def getMax (a1: Int,a2: Int): Int{
return if(a1 > a2) a1 alse a2
}
def getMax (a1: Int,a2: Int) = if(a1 > a2) a1 alse a2
1.4返回值类型推断
scala定义方法可以省略返回值的数据类型,由scala自动推断返回值类型。这样方法定义后更加简洁。
注意: 定义递归方法,不能省略返回值类型
示例
定义递归方法,求5的阶乘.
步骤
1.定义方法factorial,用来计算某个数字的阶乘
规律: 1的阶乘等于1,其他数字的阶乘为:n!=n*(n- 1)!
2.调用方法,获取5的阶乘,并将结果打印到控制台上.
参考代码
//1.定义方法factorial, 用来计算某个数字的阶乘
def factorial(n:Int):Int = if(n == 1) 1 else n * factorial(n 一1)
//2.调用方法,获取5的阶乘.
va1 result = factorial(5)
//3.将结果打印到控制台上.
println("result: " + result)
1.5惰性方法
当记录方法返回值的变量被声明为lazy时,方法的执行将被推迟,直到我们首次使用该值时,方法才会执行,像这样
的方法,就叫:惰性方法.
注意:
- Java中并没有提供原生态的"惰性’ '技术,但是可以通过特定的代码结构实现,这种结构被称之为:懒加载(也
叫延迟加载)
- lazy不能修饰var类型的变量.
使用场景:
1.打开数据库连接
由于表达式执行代价昂贵,因此我们希望能推迟该操作,直到我们确实需要表达式结果值时才执行它
2.提升某些特定模块的启动时间.
为了缩短模块的启动时间,可以将当前不需要的某些工作推迟执行
3.确保对象中的某些字段能优先初始化
为了确保对象中的某些字段能优先初始化,我们需要对其他字段进行情性化处理
2.函数
scala支持函数式编程,将来编写Spark/Flink程序会大量使用到函数,目前,我们先对函数做一个简单入门, 在后续
的学习过程中,我们会逐步重点讲解函数的用法.
2.1定义函数
语法
(参数名:参数类型,参数名:参数类型....) =>函数体I
注意:
●在Scala中,函数是一个对象(变量)
●类似于方法,函数也有参数列表和返回值
●函数定义不需要使用def义
●无需指定返回值类型
2.2示例
需求:
1.定义一个计算两个整数和的函数
2.调用该函数
val getSum(a: Int, b:Int) => a+b
getSum
2.3方法和函数的区别
在Java中,方法和函数之间没有任何区别,只是叫法不同.但是在Scala中,函数和方法就有区别了,具体如下:
●方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
●可以将函数对象赋值给一一个变量, 在运行时,它是加载到VM的堆内存中
●函数是一个对象,继承自FunctionN, 函数对象有apply, curried, toString, tupled这些方法。 方法则没有
结论:在Scala中,函数是对象,而方法是属于对象的,所以可以理解为:方法归属于函数.
2.4方法转换为函数
有时候需要将方法转换为函数.例如:作为变量传递,就需要将方法转换为函数
格式
val变量名=方法名_
//格式为:方法名+空格+下划线
注意: 使用二即可将方法转换为函数
示例
1.定义一个方法用来计算两个整数和
2.将该方法转换为一个函数,并赋值给变量
参考代码
def add(a:Int ,b:Int) a+b
val getSum = add_
val sum = getSum(10,20)