大数据编程语言Scala之三运算符

举报
tea_year 发表于 2025/02/12 07:13:07 2025/02/12
【摘要】 Scala(斯嘎拉)这个名字来源于"Scalable Language(可伸缩的语言)", 它是一门基于JVM的多范式编程语言, 通俗的说: Scala是一种运行在JVM上的函数式的面向对象语言. 之所以这样命名, 是因为它的设计目标是: 随着用户的需求一起成长. Scala可被广泛应用于各种编程任务, 从编写小型的脚本到构建巨型系统, 它都能胜任. 正因如此, Scala得以提供一些出众的特性

Scala第三章节

章节目标

  1. 理解运算符的相关概述

  2. 掌握算术, 赋值, 关系, 逻辑运算符的用法

  3. 掌握交换变量案例


1. 算术运算符

1.1 运算符简介

用来拼接变量或者常量的符号就叫: 运算符, 而通过运算符连接起来的式子就叫: 表达式. 实际开发中, 我们会经常用到它.

例如:

10 + 3 这个就是一个表达式, 而+号, 就是一个运算符.

注意: 在Scala中, 运算符并不仅仅是运算符, 也是函数的一种, 这点大家先了解即可, 后续我们详细讲解.

1.2 运算符的分类

  • 算术运算符

  • 赋值运算符

  • 关系运算符

  • 逻辑运算符

    注意: Scala中是没有三元运算符的, 被if-else给替代了.

1.3 算术运算符

算术运算符指的就是用来进行算术操作的符号, 常用的有以下几种:

运算符 功能解释
+ 加号, 功能有3点. 1) 表示正数 2) 普通的加法操作 3) 字符串的拼接
- 减号, 功能有2点. 1) 表示负数 2) 普通的减法操作
* 乘号, 用于获取两个数据的乘积
/ 除法, 用于获取两个数据的商
% 取余(也叫取模), 用于获取两个数据的余数

注意:

  1. Scala中是没有++, --这两个算术运算符的, 这点和Java中不同.

  2. 整数相除的结果, 还是整数. 如果想获取到小数, 则必须有浮点型数据参与.

    例如: 10 / 3 结果是3 10 / 3.0 结果是: 3.3333(无限循环)

  3. 关于+号拼接字符串: 任意类型的数据和字符串拼接, 结果都将是一个新的字符串.

  4. 关于%操作, 假设求a % b的值, 它的底层原理其实是: a - a/b * b

1.4 代码演示

需求: 演示算术运算符的常见操作.

参考代码:

 //演示+号操作
 println(+3)
 println(10 + 3)
 println("hello" + 10)//演示-号操作
 println(-5)
 println(10 - 5)//演示*号操作
 println(5 * 3)//演示/号操作
 println(10 / 3)
 println(10 / 3.0)//演示%(取余)操作
 println(10 % 3)     //结果是1, 具体运算过程: 10 - 10/3 * 3   = 10 - 3 * 3   = 1
 println(10 % -3)    //结果是1, 具体运算过程: 10 - 10/-3 * -3 = 10 - -3 * -3 = 10 - 9  =  1
 println(-10 % 3)   //结果是-1, 具体运算过程: -10 - -10/3 * 3 = -10 - -3 * 3 = -10 + 9 = -1 


2. 赋值运算符

2.1 概述

赋值运算符指的就是用来进行赋值操作的符号. 例如: 把一个常量值, 或者一个变量值甚至是某一段代码的执行结果赋值给变量, 这些都要用到赋值运算符.

2.2 分类

  • 赋值运算符常用的有两类

    • 基本赋值运算符

      =就是基本的赋值运算符, 例如: var a:Int = 3, 就是把常量值3赋值给变量a

    • 扩展赋值运算符

      +=, -=, *=, /=, %=

    注意:

    1. 赋值运算符的左边必须是: 变量, 不能是常量. 例如: 3 = 5, 这种写法就是错误的.

    2. 关于扩展赋值运算符, 其实就是把左边的数据和右边的数据进行指定的操作, 然后把结果赋值给左边.

      例如; a += 3 就是把变量a的值和常量3进行加法操作, 然后把结果赋值给变量a

2.3 代码演示

 //将常量值1赋值给变量a
 var a:Int = 1           //注意: 因为后续代码要修改变量a的值, 所以变量a要用var修饰
 //对变量a进行加3操作, 然后把结果重新赋值给变量a
 a += 3          //a的最终结果为: a = 4
 //对变量a进行减2操作, 然后把结果重新赋值给变量a
 a -= 2          //a的最终结果为: a = 2
 //对变量a进行乘3操作, 然后把结果重新赋值给变量a
 a *= 3          //a的最终结果为: a = 6
 //对变量a进行除2操作, 然后把结果重新赋值给变量a
 a /= 2          //a的最终结果为: a = 3
 //对变量a和2进行取余操作, 然后把结果重新赋值给变量a
 a %= 2          //a的最终结果为: a = 1


3. 关系运算符

3.1 概述

关系运算符指的就是用来进行比较操作的符号. 例如: 数据是否相等, 是否不等, 数据1大还是数据2大...等这些操作.

3.2 分类

运算符 功能解释
> 用来判断前边的数据是否大于后边的数据
>= 用来判断前边的数据是否大于或者等于后边的数据
< 用来判断前边的数据是否小于后边的数据
<= 用来判断前边的数据是否小于或者等于后边的数据
== 用来判断两个数据是否相等
!= 用来判断两个数据是否不等

注意:

  1. 关系表达式不管简单还是复杂, 最终结果一定是Boolean类型的值, 要么是true, 要么是false.

  2. 千万不要把==写成=, 否则结果可能不是你想要的.

3.3 代码演示

 //定义两个Int类型的变量a, b, 分别赋值为3, 5
 var a:Int = 3
 var b:Int = 5
 //判断a是否大于b, 并打印结果   
 println(a > b)                  //false
 //判断a是否大于等于b, 并打印结果
 println(a >= 3)                 //true
 //判断a是否小于b, 并打印结果
 println(a < b)                  //true
 //判断a是否小于等于b, 并打印结果
 println(a <= 3)                 //true
 //判断a和b是否不等, 并打印结果
 println(a != b)                 //true
 //判断a和b是否相等, 并打印结果
 println(a == b)                 //false
 //如果把==写成了=, 其实是把变量b的值赋值给变量a
 println(a = b)                  //输出结果是一对小括号"()", 即: 没有打印值.
 println(a)                      //再次打印变量a, 打印结果是:5

3.4 关系运算符延伸

学过Java的同学会发现, 上述的Scala中的关系运算符用法和Java中是一样的, 那有和Java不一样的地方吗?

答案是: 有.

需求描述 Scala代码 Java代码
比较数据 == 或者 != equals()方法
比较引用(地址值) eq方法 == 或者 !=

示例

有一个字符串"abc",再创建第二个字符串,值为:在第一个字符串后拼接一个空字符串。

然后使用比较这两个字符串是否相等、再查看它们的引用值是否相等。

参考代码

 val s1 = "abc"
 val s2 = s1 + ""
 s1 == s2     //结果是: true,  因为比较的是 数据值
 s1.eq(s2)    //结果是: false, 因为比较的是 地址值


4. 逻辑运算符

4.1 概述

逻辑运算符指的就是用来进行逻辑操作的符号. 可以简单理解为它是: 组合判断. 例如: 判断多个条件是否都满足, 或者满足其中的某一个, 甚至还可以对某个判断结果进行取反操作.

4.2 分类

运算符 功能解释
&& 逻辑与, 要求所有条件都满足(即: 结果为true), 简单记忆: 有false则整体为false.
|| 逻辑或, 要求只要满足任意一个条件即可, 简单记忆: 有true则整体为true.
! 逻辑非, 用来进行取反操作的. 即: 以前为true, 取反后为false, 以前为false, 取反后为true.

注意:

  1. 逻辑表达式不管简单还是复杂, 最终结果一定是Boolean类型的值, 要么是true, 要么是false.

  2. 在Scala代码中, 不能对一个Boolean类型的数据进行连续取反操作, 但是在Java中是可以的.

    • 即: !!false, 这样写会报错, 不支持这种写法.

4.3 代码演示

 //相当于: false && true
 println(3 > 5 && 2 < 3)     //结果为: false
 //我们可以简写代码为:
 //逻辑与: 有false则整体为false.
 println(false && true)      //结果为: false
 println(true && false)      //结果为: false
 println(false && false)     //结果为: false
 println(true && true)       //结果为: trueprintln(false || true)      //结果为: true
 println(true || false)      //结果为: true
 println(false || false)     //结果为: false
 println(true || true)       //结果为: trueprintln(!false)             //结果为: true
 println(!true)              //结果为: false
 println(!!true)             //这样写会报错, Scala不支持这种写法, 但是Java代码支持这种写法.

5. 案例: 交换两个变量的值

5.1 需求

已知有两个Int类型的变量a和b, 初始化值分别为10和20, 请写代码实现变量a和变量b的值的交换.

即最终结果为: a=20, b=10.

注意: 不允许直接写a=20, b=10这种代码.

5.2 参考代码

  • 方式一: 通过算术运算符实现.

     //定义两个Int类型的变量a和b, 初始化值分别为10和20
     var a = 10
     var b = 20
     //将变量a和b的计算结果赋值给变量a
     a = a + b   //a = 30, b = 20
     //计算并赋值
     b = a - b   //a = 30, b = 10
     a = a - b   //a = 20, b = 10
     //打印结果
     println("a: " + a)      //a: 20
     println("b: " + b)      //b: 10
  • 方式二: 通过定义临时变量实现

     //定义两个Int类型的变量a和b, 初始化值分别为10和20
     var a = 10
     var b = 20
     //定义临时变量temp, 记录变量a的值
     var temp = a            //a = 10, b = 20, temp = 10
     //把变量b的值赋值给a
     a = b                   //a = 20, b = 20, temp = 10
     //把临时变量temp的值赋值给b
     b = temp                //a = 20, b = 10, temp = 10
     //打印结果
     println("a: " + a)      //a: 20
     println("b: " + b)      //b: 10

总结

     通过本章节技术课我们学习了Scala的算术运算符、赋值运算符、关系运算符、逻辑运算符等,为后续大数据开发打下扎实的基础。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。