大数据 -- Scala:方法、函数、数组、元组

1、方法

1)语法:

def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
    // 方法体:一系列的代码
}

- 参数列表的参数类型不能省略
- 返回值类型可以省略,由scala编译器自动推断
- 返回值可以不写return,默认就是{}块表达式的值

注意:如果定义递归方法,不能省略返回值类型

大数据 -- Scala:方法、函数、数组、元组

递归方法:求阶乘  10*9*8*..*1

大数据 -- Scala:方法、函数、数组、元组

2)方法的参数

默认参数:

在定义方法时可以给参数定义一个默认值

大数据 -- Scala:方法、函数、数组、元组

带名参数:

在调用方法时,可以指定参数的名称来调用

大数据 -- Scala:方法、函数、数组、元组

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

如果方法的参数是不固定的,可以定义一个方法的参数是变长参数

格式:

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

大数据 -- Scala:方法、函数、数组、元组

2、函数

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

语法:val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体

注意:

函数是一个对象(变量)

相同点:类似于方法,函数也有输入参数和返回值

区别:函数定义不需要使用def定义  ;  无须指定返回值类型

大数据 -- Scala:方法、函数、数组、元组

 

匿名函数

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

方法和函数的区别:

方法是隶属于类或者对象的,在运行时,他是加载到JVM的方法区中

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

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

方法转换为函数:

有时候需要将方法转换为函数,作为变量传递,就需要将方法转换为函数  ??

使用 “_”  即可将方法转换为函数  

大数据 -- Scala:方法、函数、数组、元组

3、数组

Scala中数组的概念是和java类似的,可以用数组来存放一组数据

Scala 中,有两种数组,一种是定长数组,另一种是变长数组  

定长数组:

定义:指的是数组的长度不允许改变

数组的元素是可以改变的

语法:

// 通过指定长度定义数组
val/var 变量名 = new Array[元素类型](数组长度)

// 用元素直接初始化数组
val/var 变量名 = Array(元素1, 元素2, 元素3...)

注意:

在scala中,数组的泛型使用[]来指定   new Array[Int](10)
使用()来获取元素  a(0)

大数据 -- Scala:方法、函数、数组、元组

大数据 -- Scala:方法、函数、数组、元组

变长数组:

定义:

指的是数组的长度是可以改变的,可以往数组添加、删除元素

创建变长数组,需要提前导入ArrayBuffer类 

import scala.collection.mutable.ArrayBuffer

语法:

创建空的ArrayBuffer变长数组   val/var a = ArrayBuffer[元素类型]()

创建带有初始元素的ArrayBuffer   val/var a = ArrayBuffer(元素1,元素2,元素3....)

大数据 -- Scala:方法、函数、数组、元组

变长数组的增删改操作:

使用+=添加元素

使用-=删除元素

使用++=追加一个数组到变长数组

大数据 -- Scala:方法、函数、数组、元组

遍历数组:

  • 使用   for表达式   直接遍历数组中的元素

  • 使用    索引     遍历数组中的元素

注意:

//0 until n ——生成一系列的数字,包含0,不包含n
//0 to n    ——包含0,也包含n

大数据 -- Scala:方法、函数、数组、元组

数组常用操作:

  • 求和——sum方法

  • 求最大值——max方法

  • 求最小值——min方法

  • 排序——sorted方法

大数据 -- Scala:方法、函数、数组、元组

4、元组

元组可以用来包含一组不同类型的值,例如用户的个人信息,包括姓名、性别、年龄 等 。

元组的元素是不可变的

定义元组:

  • 使用括号来定义元组     val/var 元组变量名称 = (元素1, 元素2, 元素3....)
  • 使用箭头来定义元素(元组只有两个元素) val/var 元组 = 元素1->元素2

大数据 -- Scala:方法、函数、数组、元组

访问元组:

_1 ,  _2  , _3 ,  .....       来访问元组中的元素,_1表示访问第一个元素,依次类推

大数据 -- Scala:方法、函数、数组、元组