1.16

函数
Scala 支持函数式编程,Spark/Flink 程序会大量使用函数。

定义
val 函数变量名 = (参数名1:参数类型1, 参数名2:参数类型2...) => 函数体
函数是一个对象

类似于方法,函数也有参数列表和返回值

函数定义不需要使用 def 定义

无需指定返回值类型

示例:定义一个计算两个整数之和的函数。

val getSum = (a:Int, b:Int) => a + b
val sum = getSum(1, 2)//3
方法和函数的区别
方法属于类或者对象,在运行时会加载到 JVM 的方法区。

可以将函数对象赋值给一个变量,在运行时会加载到 JVM 的堆中。

函数是一个对象,继承自 FunctionN,函数对象有apply、curried、toString、tupled这些方法,方法则没有。

结论:在 Scala 中,函数是对象,而方法是属于对象的,可以理解为:方法归属于函数。

可以通过在方法后加上空格和下划线将其转为函数,例如定义一个求和方法并转为函数:

def add(a:Int, b:Int):Int = a + b
val func = add _
func(1, 2)//3

案例:打印nn乘法表
通过方法:

def write(n:Int){
for(row <- 1 to n;col <- 1 to row){
print(s"${col} x ${row} = ${col * row}\t")
if(row == col) println()
}
}

通过函数:

val func = (n:Int) => {
for(row <- 1 to n;col <- 1 to row){
print(s"${col} x ${row} = ${col * row}\t")
if(row == col) println()
}
}

类和对象
类和对象
创建类和对象可以通过 class 和 new 关键字实现,用 class 创建类,用 new 创建对象。

示例:创建一个 Person 类,然后创建其对象并打印。

创建一个 Scala 项目,并创建一个 Object 类(Object 修饰的类是单例对象)。
在 object 类中添加 main 方法。
创建 Person 类,并在 main 方法中创建 Person 类的对象然后输出结果。
//实体类
class Person {

}
----------------------------------------------
//测试类
object ClassDemo {

//main方法,作为程序主入口,所有代码执行都从这里开始
def main(args: Array[String]): Unit = {
//创建 Person 对象
val person = new Person()
//打印对象
println(person)
}
}


如果类是空的,没有任何成员,可以省略{}

如果构造器参数为空,可以省略()

//简写类和对象
object ClassDemo {

class Person

def main(args: Array[String]): Unit = {
val person = new Person
println(person)
}

}

成员变量
可以使用 var/val 定义成员变量,对象通过 对象名. 的方式访问成员变量。

示例:定义一个 Person 类,包含一个姓名和年龄字段,创建一个具体对象并打印。

object ClassDemo {

class Person{
var name = ""
var age = 0
}

def main(args: Array[String]): Unit = {
val person = new Person
person.name = "sjh"
person.age = 24
print(s"姓名:${person.name},年龄:${person.age}")
}

}
使用下划线初始化成员变量
在定义 var 类型的成员变量时,可以使用 _ 初始化成员变量。

val 类型的成员变量,必须要自己手动初始化。

例如:

class Person{
var name:String = _
var age:Int = _
}

定义和访问成员方法
在 Scala 的类中,也是使用 def 定义方法。

object ClassDemo {

class Person{
var name:String = _
var age:Int = _

def printHello(msg:String): Unit = print(msg)

}

def main(args: Array[String]): Unit = {
val person = new Person
print(person.printHello("hello scala"))
}

}


访问修饰符
在 Scala 中没有 public 关键字,没有被标记为 private 和 protected 的成员都是公共的。

Scala 中的权限修饰符只有:privat、private[this]、protected、默认。

object ClassDemo {

class Person{
private var name:String = _
private var age:Int = _

//获取姓名
def getName:String = name
//设置姓名
def setName(name:String): Unit = this.name = name
//获取年龄
def getAge:Int = age
//设置年龄
def setAge(age:Int): Unit = this.age = age

}

def main(args: Array[String]): Unit = {
val person = new Person
person.setName("sjh")
person.setAge(24)
}

}

 

posted @ 2025-02-07 13:45  七安。  阅读(23)  评论(0)    收藏  举报