• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
戈瑾
博客园    首页    新随笔    联系   管理    订阅  订阅
spark学习进度3——Scala方法与函数
Scala中的方法与函数

一、Scala中的方法

1、方法:方法是对一段代码的封装或者是对代码的抽取,为了实现某个功能,方法定义完成以后不会自动执行,需要手动进行调用。

2、Java中定义方法: 

public\protected\private\default\friendly  returnType  methodName(argType  arguments....){ 方法体 }

3、Scala中定义方法:

scala中定义方法的关键字是:def;

scala中方法类型是后置定语;

def methodName(arg:Type......): ={ } 

备注:scala中方法的返回值可以加也可以不加,如果不加返回值类型系统会自适配

例:定义求和的方法

1   def main(args: Array[String]): Unit = {
2     val re=sum(100,80)
3     println("计算总和是:"+re)
4   }
5   def sum(num1:Int,num2:Int):Double={
6     val res=num1+num2
7     return res
8   }

4、Scala中方法定义的时候如果方法名后面没有添加小括号,在调用的时候不能添加小括号,如果方法名称有小括号,那么在调用的时候可以添加小括号,也可以不添加小括号

例:

1   def main(args: Array[String]): Unit = {
2     printInfo            //调用不能添加()
3   }
4   def printInfo:Unit={   //方法中没有()
5     println("hello world")
6   }

5、如果方法中的参数是多个并且数据类型一样,可以使用*代替。可变参数。

 1   def main(args: Array[String]): Unit = {
 2     val result = sum(11,22,33,44,55)
 3     println("累加和是:"+result)
 4   }
 5   //定义参数个数不确定的求和方法
 6   def sum(number:Int*):Int= {
 7     var res = 0
 8     for(n<-number){
 9       res+=n
10     }
11     return res
12   }

1   def main(args: Array[String]): Unit = {
2     val result = sum(11,22,33,44,55)
3     println("累加和是:"+result)
4   }
5   //定义参数个数不确定的求和方法
6   def sum(number:Int*):Int= {
7     number.sum
8   }

 

 6、方法中的返回值

(1)返回值关键字是return

(2) 方法中如果最后没有返回值类型不能使用return关键字

(3)方法中没有返回值不能使用return关键字

 

 

(4)方法中不添加return关键字,返回值类型会自己适配。

(5)方法中如果使用return关键字,方法中必须添加返回值类型

例:阶乘练习

 1   def main(args: Array[String]): Unit = {
 2     val result = jiecheng(5)
 3     println("5!="+result)
 4   }
 5   def jiecheng(number:Int):Int={
 6     if(number==1) {
 7       return number
 8     }else{
 9       return number*jiecheng(number-1)
10     }
11   }


 二、Scala中的函数

1、函数是方法的另一种体现形式,也是一段代码的综合体,函数约等于方法

2、Scala中的函数定义

关键字:val

[scala中函数是可以被传递的,那么可以把函数理解为一个值,既然是值那么定义的时候使用val关键字]

语法:

val  functionName=(参数:参数类型.....)=>逻辑

val  functionName=(number:Int,number1:Int)=>number1+number

3、函数名称后面不能添加小括号,方法名称后如果没有参数可以不加( ),有参数必须添加()

1   def main(args: Array[String]): Unit = {
2     val sum=(a:Int,b:Int)=>(a+b)
3     val res=sum(100,200)
4     println("计算总和是:"+res)
5   }

 4、函数签名信息

 (1)函数的签名信息: 函数名称:{参数类型,参数类型}=>返回值类型=<实现的接口名称>

(2)function2:参数有N个,定义出来的函数签名信息functionN,但是最多不能超过0-22个。  【 函数参数个数: 最少0个,最多22个 】

(3)FunctionN是一个trait特质【接口】,接口中都会有一个构造器apply(N参数)

我们声明的函数,其实是在实现特质,所参数只能放置22个。【其实定义好的函数不是自己定义的,而是在实现定义好的接口】

 5、匿名函数

即没有名称的函数

例:将数组中的每个元素*10

1   def main(args: Array[String]): Unit = {
2     val arr=Array(11,22,33,44,55)
3     val ints:Array[Int]=arr.map((a:Int)=>a*10)
4     for(arr1<-ints){
5       print(arr1+" ")
6     }
7   }

 

 6、Scala中的高阶函数

(1)函数作为返回值

(2)函数作为方法的参数进行传递

 1 //定义方法,参数是一个匿名函数
 2   def sum(function:(Int,Int)=>Int):Int={
 3     return function(11,22)
 4   }
 5   //定义函数让方法进行调用
 6   val f=(a:Int,b:Int)=>(a+b)
 7   def main(args: Array[String]): Unit = {
 8     //调用方法,方法的参数是一个函数
 9     val i=sum(f)
10     println(i)
11   }

 注意:

  • 方法中是形参不能直接定义具体的函数,应该定义一个规范。

  • 函数其实是定义了一种规范,然后将规范进行传递,具体怎么实现,在调用的时候再做具体的实现


 三、方法和函数区别

1、函数是方法的另一种体现形式,但是方法就是方法,只能被调用。

2、函数可以作为一个值【值是有签名信息的】在方法中作为参数进行传递,还能当成返回值使用。

3、Scala 有方法与函数,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。

4、Scala 中的方法跟 Java 的类似,方法是组成类的一部分。Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。

5、Scala 中使用 val 语句可以定义函数,def 语句定义方法。

6、Scala中可以将方法转换成函数,使用 _

 

 

 

 

 1   def main(args: Array[String]): Unit = {
 2     val add=(a:Int,b:Int)=>(a+b)
 3     //正常调用方法
 4     var res1=sum(100,200,add)
 5     println(res1)
 6 
 7     //将方法转换成函数调用
 8     val res2=(sum _)(59,22,add)
 9     println(res2)
10   }
11   def sum(a:Int,b:Int,f:(Int,Int)=>Int):Int={
12     return f(a,b)
13   }

 

 方法的自动转换:

1 def main(args: Array[String]): Unit = {
2     val list=List(12,55,36)
3     //将println方法放到foreach中作为参数,会自动转换为函数
4     list.foreach(println)
5     println("-----------")
6     //将println方法放到foreach中作为参数,手动转换为函数
7     list.foreach(println _)
8   }

 

 


 

四、方法和函数总结

1、函数val => 方法def  ={}

2、函数可以作为表达式单独存在,比如单独放置函数,会出现签名信息,方法不能单独出现,只能被调用。

3、函数是头等公民,函数式编程(方法不能定义规范,一旦被调用就得去实现,函数可以定义规范而不去实现)。

4、方法和函数在本质上几乎一样,方法就是函数的另一种体现形式。

5、函数和和方法进行转换 :空格+下划线,也可以自动转换。

6、在方法中传递的都是函数【自动转换】。

7、在scala编程的时候优先使用函数,但是方法用的比较多。

posted on 2022-01-03 20:22  戈瑾  阅读(150)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3