02-Scala 基本语法

1.基本语法

1.1函数式编程体验Spark-Shell之WordCount

 

Q1: 对上述文件内容使用Spark进行单词个数统计?

 

Q2: 对上述输出结果进行降序 ?

 

深深的感受到了Scala的强大之处,拿下她已成必然.....

 

1.2 Scala交互模式(cmd窗口介绍)

输入cmd命令, 打开windows 控制台:

 

输入scala , 进入Scala shell 交互模式:

 

在交互式窗口下, 我们可以编写Scala的代码.

1.3数据类型

Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float和Double(无包装类型)和Boolean、Unit类型.

 

注意:Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。

 

1.4变量的定义

object 变量定义 extends App {
    /**
      * 定义变量使用var 或者 val关键字
      *
      * 语法:
      *    var|val 变量名称 (: 数据类型) = 变量值
      */

    // 使用val修饰的变量, 值不能为修改, 相当于java中final 修饰的变量
    val name = "小牛人"

    // 使用var修饰的变量, 值可以修改
    var age = 18

    // 定义变量时, 可以指定数据类型, 也可以不指定, 不指定时编译器会自动推测变量的数据类型
    val nickName: String = "牛牛"
}

1.5字符串的格式化输出

 

/**
  * @author sheep.Old 小羊哥
  * Scala 中的格式化输出
  */
object ScalaPrint extends App{

    val name = "小羊哥"
    val faceValue  = 998.88d
    val url  = "https://blog.csdn.net/weixin_40176205"

    // 普通输出
    println("name=" + name, "faceValue=" + faceValue, "url=" + url)

    // 文字'f'插值器允许创建一个格式化的字符串,类似于C语言中的printf。
    // 在使用'f'插值器时,所有变量引用都应该是printf样式格式说明符,如%d,%i,%f等。
    // 这里$name%s打印String变量James和$height%2.2f打印浮点值1.90。
    println(f"$name%s 颜值 $faceValue%1.2f 爆表, CSDN网址是$url")      // 该行输出有换行
    printf("%s 颜值 %1.2f 爆表, 网址是%s", name, faceValue, url)   // 该行输出没有换行


    // 's'允许在处理字符串时直接使用变量。
    //  在println语句中将String变量($name)附加到普通字符串中。
    println(s"name=$name, faceValue=$faceValue, url=$url")

    // 字符串插入器还可以处理任意表达式。
    // 使用's'字符串插入器处理具有任意表达式(${1 + 1})的字符串(1 + 1)的以下代码片段。任何表达式都可以嵌入到${}中。
    println(s"1 + 1 = ${1 + 1}") // output: 1 + 1 = 2
}

1.6条件表达式

 

/**
  * @author sheep.Old 小羊哥
  * Scala if 条件表达式
  */
object ScalaIf extends App{

    //if 语句的使用,在Scala中,最后一行代码就是我们的代码块返回值
    val faceValue: Int = 99
    val res1 = if(faceValue > 90 ) "帅的不要不要的" else "瘪犊子玩意儿"
    println(res1)

    // 8 > 8 不成立, 且代码没有else分支, res2是什么呢
    val i = 8
    val res2 = if (i > 8) i else () // Unit => ()
    println(res2)

    val res3:Any= if (i > 8) i else "前面是整型这里是字符串, 那个res3是个啥?"
    println(res3)

    // if ... else if ... else 代码较多时可以使用代码块{}
    val score = 76
    val res4 = {
        if(score > 60 && score < 70) "及格"
        else if(score >=70 && score < 80) "良好"
        else "优秀"
    }
}

1.7循环语句/yeild关键字

在scala中有for循环和while循环,用for循环比较多

for循环语法结构:for (i <- 表达式/数组/集合)

/**
  * @author sheep.Old 小羊哥
  * Scala for循环
  */
object ScalaFor extends App {

    // 定义个数组, 元素为1 到 6
    val array = Array(1, 2, 3, 4, 5, 6)
    // 遍历打印数组中的每个元素
    for(ele <- array) { // 类似Java中的增强for
        println(ele)
    }

    // 通过角标获取数组中的元素
    // 定义一个0 到 5 的角标范围
    for(i <- 0 to 5) { // 0 to 5 => 会生成一个范围集合Range(0,1,2,3,4,5)
        println(array(i))
    }

    for(i <- 0 until 6) { // 0 until 6 => 会生成一个范围集合Range(0,1,2,3,4,5)
        println(array(i))
    }

    // to 和 until的区别就是to包含为前后都为闭区间, until为前闭后开区间

    // 打印数组中的偶数元素
    for(e <- array if e % 2 == 0) { // for表达式中可以增加守卫
        println(e)
    }

    // 观察下面代码输出结果
    for(i <- 1 to 3; j <- 1 to 3 if i != j) {
        println((10 * i + j) + " ")
    }
    // 观察下面代码输出结果
    for(e <- array if e % 2 == 0) yield e
}

1.8 运算符/运算符重载

Scala中的+ - * / %`等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有

一点特别的:这些操作符实际上是方法。例如:a + b

是如下方法调用的简写:a.+(b)

a 方法 b可以写成 a.方法(b)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldsheep_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值