什么是 Scala (运算、集合、函数、循环)

什么是 Scala (运算、集合、函数、循环),第1张

什么是 Scala (运算、集合、函数循环

目录
  • 什么是 Scala
    • 简介
      • 概念
      • 官网
      • 六大特征
      • Scala 应用场景
    • 标识符(驼峰命名法)
    • 数据类型
    • 运算
      • 常量与变量
      • 运算符表达式
    • 集合
      • 列表
      • 数组
    • 定义函数
      • Scala常用数据类型
      • 声明函数
      • 函数
      • 函数组合器
    • 循环判断
      • (1)判断
      • (2)循环

什么是 Scala 简介
  • 目前主要以学习 Scala 语言 作为 学习 Spark 框架的语言基础
概念
  • scala 是一门以 jvm 为运行环境的静态类型编程语言,具备面向对象及函数式编程的特性
官网
  • Scala 官网首页
  • 对应 Spark 版本文档
六大特征
  • 1、Java 和 scala 可以混编
  • 2、类型推测(自动推测类型)
  • 3、并发和分布式( Actor)
  • 4、特质,特征(类似 java 中 interfaces 和 abstract 结合)
  • 5、模式匹配(类似 java 中的 switch…case )
  • 6、高阶函数
Scala 应用场景
  • Kafka:分布式消息队列,内部代码经常用来处理并发问题,用scala 可以大大简化其代码
  • spark:方便处理多线程场景,另外 spark 主要用作内存计算,经常要用来实现复杂的算法。利用Scala 这种 函数式编程语言 可以大大简化代码
标识符(驼峰命名法)
  • 区分大小写
    • Scala 是大小写敏感的
  • 类名
    • 对于所有的类名的首字母大写
    • 如果需要使用几个单词来构成一个类的名词,每个单词的首字母大写
  • 方法名
    • 所有的方法名称的首字母小写
    • 如果若干单词被用于构成方法的名称,则每个单词的首字母大写
  • 程序文件名
    • 程序文件的名称应该与对象名称(Scala 是区分大小写的),并追加".scala"为文件扩展名
数据类型

注意:

  • 比较特殊的 None ,是 Option 的两个子类之一,另一个是 Some ,用于安全的函数返回值。
  • scala 推荐在可能返回空的方法使用 Option[X] 作为返回类型。
  • 如果有值就返回Some[X],无值则返回 None。
运算 常量与变量
  • 定义常量(val):val name:type = initialization
  • 定义变量(var):var name:type = initialization
运算符表达式
  • 算术运算符:±*/%

  • 关系运算符:- >,<,>=,<=,==,!=

  • 逻辑运算符: &&与,||或 ,!非

  • 赋值运算符: = , + = , - = …等

  • 位运算符:&与,|或,^ 取反

集合 列表
  • 类型

    • (1)List 列表,相同元素类型
    • (2) Set 没有重复的集合
    • (3) Map 可迭代键值对集合
    • (4) Tuple元组,可包含不同类型的元素,圆括号
数组
  • 声明数组格式:var z:Array[String] = new Array[String] (num) 或 var z = Array(元素1,元素2,…)

  • 数组基本 *** 作方法

    • 增:++ 或 concat

    • 长度 : arr.length 返回数组的长度

    • 是否为空:arr.isEmpty 判断数组是否为空

定义函数 Scala常用数据类型
  • Int 整型(byte,short,long)
  • Float 浮点数
  • Double 双精度浮点数
  • String 字符序列(char)
  • Boolean 逻辑型(True或False)
  • Unit 表示无值,与void等同(null,nothing,any)
声明函数
  • def functionName (参数列表) : [return type] = { }
 def add(a:Int,b:String):Int = { print(a+b)}
函数
  • 匿名函数

    • 定义函数不给出函数名,用“=>”表示
     var  addInt = (a:Int,b:Int) => a+b ;    // 格式:参数列表 => 函数体
    
  • 高阶函数

    • 将函数作为参数
    • 将函数作为返回值
  • 常用函数

    • range函数
    range(1,10,2)    // 前闭后开,步长为2
    
    • 读取文件
     Source.fromFile( 文件路径 )
    
    • 写入文件
    new PrintWriter( 文件路径 ).write( '  ****** ' ).close 
    
函数组合器

注意: 对RDD的 *** 作,即返回一个新的RDD

  • map 重新计算

     List (1,2,3).map( x => x*2 ) : List
    
  • foreach 对参数进行作用

     List ( 1,2,3 ).foreach( x => print( x*2 ) : Unit    // 在原来原来元素上 *** 作
    
  • filter 过滤

    List ( 1,2,3 ).filter ( x => x%2==0 ) : List
    
  • flatten 降维打击

    List(List ( 1,2,3 ),List(1,2,3),List ( 1,2,3 )).flatten : List
    
  • flatMap 结合,先map后flatten

    List(List ( 1,2,3 ),List(1,2,3),List ( 1,2,3 )).flatMap(x => x *2 ) : List
    
  • groupBy 分组,结果Map

     List ( 1,2,3 ).groupBy( x => x%2 == 0 ) : Map
    
循环判断 (1)判断
  • if 、if…else 、if…else if… else语句、if…else嵌套

  • match 模式匹配

    x match { case 1 => fun1 ;  case 2 => fun2 ; case _* => fun3}  // 类似于switch
    
(2)循环
  • while 、do …while 和 for 循环
  • for循环
    for  ( 变量 <- 集合 ){  循环语句  }
    for ( i <- 1  to  10 ){ print(i) }   // to 前闭后闭
    for (i  <- 1 until 10 ){ print(i) }  // until 前闭后开
    for (i  <- 1  to  10 ;  if (i%2==0; if  i >6){ print(i) }   // 多个判断条件间用”;“ 
    

哈哈没了,到底了。。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5665153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存