大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

时间:2023-03-10 22:15:08

具体见第三阶段scala-day01中的文档(scala编程基础---基础语法)

 1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html):

  • 将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程。

  我们可以看到,函数式编程中,函数不仅直接调用,也可以当成参数被其他函数调用。因此,进一步,如果我不仅想把函数当参数,还想传入值,所以再封装一下,函数和值封装后是什么。

  • 函数->行为
  • 值->属性

没错这就是对象

  • 将业务逻辑细化,抽象,封装成一个个对象,并借助语言,库,组件,框架等,将整个业务流程转化为对象之间的相互调用,这就是面向对象编程。

因此,这么看来,函数式跟面向对象的思想其实都是一致的,即对逻辑的抽象与封装。

原点:

回顾下语言的历程

过程式->函数式->面向对象

近年来大数据的兴起,数据的处理往往跟面向对象没关系,更多的是简单而大量的数据结构,借助mapreduce这样的高阶函数处理更加方便,这也是函数式编程又火起来的原因。

程序只不过是回到了它的原点:

算法+数据结构->函数+高阶函数+数据。

  

下面笔记来源:https://www.zhihu.com/question/28292740

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法

 2. for 循环

(1) 重点:守卫模式和推导式

  • 守卫模式
for(i <- 1 to 10 if i >3){满足条件的执行此逻辑}
  • 推导式
  def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 4, 6, 5)
val new_arr = for(i <- arr if i >3) yield i*2 //推导式
println(new_arr.toBuffer)
}
}

(2)可变参数

/**
* 可变参数
*/ object Demo2 {
def main(args: Array[String]): Unit = {
operation("hello","spark","hadoop","flink")
}
def operation(s:String*): Unit ={
s.foreach(x=>println(x))
}
}

(3)三种遍历模式如下:

  • 第一种:相当于java中的增强for循环
// 第一种:增强for循环的遍历方式
val arr = Array(1, 2, 3, 4, 6, 5)
for (elem <- arr) {
println("第一种遍历方式:"+elem)
}
  • 第二种:角标索引的方式
  // 第二种:角标索引的方式
for (index <- arr.indices) { // 此处的arr.indices相当于:0 util arr.length
println("第二种遍历方式:"+arr(index))
}
  • 第三种:调用foreach方法,此种适合校验
// 第三种:调用foreach方法,此种适合校验
arr.foreach(e=>print("第三种遍历方式:"+e))
}

3. 数组中常用的方法

 * 1 update(index,newVal)  更新元素
* -------2 reverse 空参的方法 将数组反转
* 3 reduce 每个元素累计操作 聚合操作
* 4 max 获取数组中的最大元素
* 5 min 获取数组中最小的元素
* -------6 sorted 将数组中的元素按照默认的排序 数值(小--->大) 字符串(字段的先后排序) 自定义的类???
* 7 exists 判断是否有符合要求的元素
* 8 drop(num) 从0的位置删除n个元素(dropright(num)表示从尾部删除n个元素)
* -------9 distinct 去除数组中重复的元素
* -------10 sum 求和
* -------11 map 遍历数组中的每个元素 分别处理 将处理的结果返回到一个新的数组中(map(f:Int=>B)  map(f:String=>{})  B block,即为代码块)
* -------12 foreach 遍历数组中的每个元素 没有返回值 一般用于打印(foreach[U](f:Int=>U),此处的U即为Unit)
* -------13 contains(elem) 判断数组中是否包含某个元素
* -------数组的定义
* -------数组的遍历
*/