Scala学习系列(三)——入门与基础

简介: Scala学习系列(三)——入门与基础

首先,打开IDEA编辑器的SbtExampleProject项目,我们将在这个项目下进行练习

本节的练习内容位于 com.tree1123.Base 中 新建一个main函数

微信图片_20220526232620.jpg


一 、声明值和变量


Scala声明变量有两种方式,一个用val,一个用var

声明格式为:val/var 变量名【:变量类型】 = 变量值

val定义的值是不可变的 类似于一个常量

IDEA的快捷键 Enter + Alt 方便给出提示, 我们这样增加变量类型, 便于初学时 , 清楚看到scala的类型推断

微信图片_20220526232623.png

熟练以后 我们可以将变量类型省略

微信图片_20220526232626.png

val类型是常量

微信图片_20220526232629.png

var类型是变量

微信图片_20220526232631.png

注意:var和val关键字只标识引用本身是否可以指向另一个不同的对象,它们并未表明其所引用的对象是否可变。为了减少可变性引起的bug,应该尽可能的使用不可变变量。

变量类型可以省略,解析器会根据值进行推断。val和var声明变量时都必须初始化。

object Base {
  def main(args: Array[String]): Unit = {
    //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
    val aaa: Int = 4 * 2
    //aaa = 10
    //使用var定义的变量是可变的,在Scala中鼓励使用val
    //变量名在前,类型在后
    var bbb: Int = 4 * 2
    bbb = 10
  }
}


二、常用类型


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

  • Boolean:true或者false
  • Byte:8位,有符号
  • Short:16位,有符号
  • Int:32位,有符号
  • Long:64位,有符号
  • Char:16位,无符号
  • Float:32位,单精度浮点数
  • Double:64位,双精度浮点数

跟java的数据类型不同,Scala不区分基本类型和引用类型,所以这些类型都是对象,可以调用相对应的方法,String直接使用的是 java.lang.String 不过由于String实际是一系列Char的不可变的集合,Scala中大部分针对集合的操作都可以用于String,具体来说,String的这些方法存在于类scala.collection.immutable.StringOps中。由于String在需要时能隐式转换为StringOps,因此不需要任何额外的转换,String就可以使用这些方法。

每一种数据类型都有对应的Rich*类型,如RichInt,RichChar等,为基本类型提供了更多的有用操作。

微信图片_20220526232636.png

scala的toString其实就是由Predef中的隐式转换完成将相应类型转换成Rich*,然后调用Rich*的相对应方法.

在scala中通过方法进行类型转换,不像Java的强制类型转换。

微信图片_20220526232641.jpg

注意:Scala中没有强制转换 需要通过方法进行类型的转换

Scala中所有的值都是类对象,而所有的类,包括值类型,都最终继承自一个统一的根类型Any。

统一类型,是Scala的一大特点。而且Scala还定义了几个底层类(Bottom Class),比如Null和Nothing。

微信图片_20220526232644.png

1)Null是所有引用类型的子类型,而Nothing是所有类型的子类型。Null类只有一个实例对象,null,类似于Java中的null引用。null可以赋值给任意引用类型,但是不能赋值给值类型。

2)Nothing,可以作为没有正常返回值的方法的返回类型,直观的说明这个方法不会正常返回。而且由于Nothing是其他任意类型的子类,他还能跟要求返回值得方法兼容。

3)Unit类型用来标识过程,也就是没有明确返回值的函数。由此可见,Unit类似于Java里的void。Unit只有一个实例,(),这个实例也没有实质的意义。


三、算术和操作符


一个运算符是一个符号,用于告诉编译器来执行指定的数学运算和逻辑运算。

Scala 含有丰富的内置运算符,包括以下几种类型:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
    算术运算符
    下表列出了 Scala 支持的算术运算符。
    假定变量 A 为 10,B 为 20:

微信图片_20220526232647.png

关系运算符

下表列出了 Scala 支持的关系运算符。

假定变量 A 为 10,B 为 20:

微信图片_20220526232652.png

逻辑运算符

下表列出了 Scala 支持的逻辑运算符。

假定变量 A 为 1,B 为 0:

微信图片_20220526232655.png

位运算符

位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:

微信图片_20220526232700.png

Scala 中的按位运算法则如下:

微信图片_20220526232704.png

赋值运算符

以下列出了 Scala 语言支持的赋值运算符:

微信图片_20220526232707.png

注意:scala的算术操作可以完成和Java中相同的工作,但是有一点区别,他们都是方法。

Scala中没有 ++ --操作符 需要通过+= -=

微信图片_20220526232710.png


四、Scala几个特性


Scala除了方法,还提供了函数

调用函数 需要引入函数包 import 包名. 下划线是通配符 等同于java中的*

微信图片_20220526232714.png

Scala中没有静态方法,一般通过单例对象或者伴生对象进行实现

BigInt.probablePrime(100,scala.util.Random)

调用对象方法

"Hello".distinct

apply,update方法

apply是调用时可以省略方法名的方法,用于构造和获取元素

//下边两者等同
"Hello"(4)
"Hello".apply(4)
//下边两者等同
Array(1,2,3)
Array.apply(1,2,3)

在StringOps中会发现一个def apply(n:Int):Char的方法定义

update方法也是调用时可以省略方法名的方法,用于元素的更新

//两者等同
var arr = Array(1,2,3)
    arr(2)=5
    arr.update(2,5)

option类型

Scala为单个值提供了对象的包装器,表示那种可能存在也可能不存在的值。只有两个子类对象,Some表示某个值 另外一个None 表示为空 通过Option的使用 避免了使用null 空字符串的等方式来表示缺少某个值的做法。

相关文章
|
4月前
|
分布式计算 Java Hadoop
Scala入门必刷的100道练习题(附答案)
Scala入门必刷的100道练习题(附答案)
257 1
|
4月前
|
Java 大数据 Scala
Scala入门【运算符和流程控制】
Scala入门【运算符和流程控制】
|
2月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
70 2
|
2月前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
63 2
|
2月前
|
Java Scala
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
Scala学习--day02---控制流、“九层妖塔—杨辉三角”
54 1
|
2月前
|
Java 编译器 API
Scala学习--day01变量与数据类型、运算符
Scala学习--day01变量与数据类型、运算符
40 1
|
4月前
|
Java Shell API
Scala入门【变量和数据类型】
Scala入门【变量和数据类型】
|
6月前
|
安全 Java 编译器
Scala语言入门:初学者的基础语法指南
作为一种在Java虚拟机(JVM)上运行的静态类型编程语言,Scala结合了面向对象和函数式编程的特性,使它既有强大的表达力又具备优秀的型态控制
27 0
|
11月前
|
JavaScript 前端开发 Java
Scala语言入门以及基本语法
Scala语言入门以及基本语法