Scala基本语法

简介: Scala基本语法

数据类型

Scala的数据类型有 Byte  Char Short  Int Long Float Double Boolean 和Unit


其中unit类型是表示无值,和其他语言中的void相同。可以用作方法无返回值的结果类型,Unit只有一个实例值,写成()。


Scala类的继承层级,Any类型等价于Java中的object类,基本类型都继承于Anyval,其他均属于AnyRef

1ecd1b2606ed46e9956a89f231c9802c.png

变量的定义

定义变量使用var或者val关键字

语法:var/val 变量名称=变量值   (不指定数据类型)    


          var/val 变量名称:数据类型=变量值  (指定数据类型)


注:1.使用val修饰的变量,值不能修改,相当于Java中final修饰的变量


      2.使用var修饰的变量,值可以修改


      3.定义变量时,可以指定数据类型,也可以不指定,不指定时编译器会自动推测变量的数据类型

#交互式窗口示例演示
scala> var name="laozaoxiaowanzi"
name: String = laozaoxiaowanzi
scala> var nickname:String="wanzi"
nickname: String = wanzi
scala> var a=12
a: Int = 12
scala> a=13
a: Int = 13
scala> val b=14
b: Int = 14
scala> b=14
<console>:11: error: reassignment to val
       b=14

字符串的格式化输出

#交互窗口代码示例
#定义变量
scala> val name="lisi"
name: String = lisi
scala> var age=18
age: Int = 18
scala> var phone=123456
phone: Int = 123456
#普通输出
scala> println("name="+name,"age="+age,"phone:"+phone)
(name=lisi,age=18,phone:123456)

插值器的使用

1.文字‘f’插值器允许创建一个格式化的字符串,类似于C语言中的 printf。在使用'f'插值器时,所有变量引用都应该是 printf 样式格式说明符,如%d,%i,%f 等。

scala> println(f"$name%s 年龄$age%d,phone is $phone")   #该行输出有换行
lisi 年龄18,phone is 123456
scala> printf("%s age %d,phone is :%d",name,age,phone)   #该行输出没有换行
lisi age 18,phone is :123456

2. 's'插值器允许在处理字符串时直接使用变量。 在 println 语句中将 String 变量($name)附加到普通字符串中。

scala> println(s"name=$name,age=$age,phone=$phone")
name=lisi,age=18,phone=123456

3.字符串插值器还可以处理任意表达式。

使用's'字符串插值器可以处理具有任意表达式的字符串——任何表达式都可以嵌入到${}中

scala> println(s"3*4=${3*4}")  #output:3*4=12
3*4=12

条件表达式

#交互式窗口代码示例
#if语句的使用
scala> val num: Int=9
num: Int = 9
scala> val res1=if(num>7)">7"else "<7"   #9>7 所以输出第一个字符串
res1: String = >7
scala> val i=8
i: Int = 8
scala> val res2=if(i>8)i   #8>8不成立,且没有else分支,故输出Unit类型的值即()
res2: AnyVal = ()
scala> val res2=if(i>8)i else "abcd"  #else左右类型不同,输出类型则为Any
res2: Any = abcd
scala> val score=76   #if...else代码较多时可以使用代码块
score: Int = 76
scala> val res4={if(score>60&&score<70)"pass" else if(score>=70&&score<80)"good"else "perfect"}
res4: String = good

循环语句/yield关键字

在Scala中有for循环和while循环,但for循环用的比较多

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

#交互式窗口代码示例
#定义一个数组,元素为1到5
scala> val array=Array(1,2,3,4,5)
array: Array[Int] = Array(1, 2, 3, 4, 5)
#遍历打印每个数组的元素
scala> for(i<-array)   #类似于Java中的增强for循环
     | println(i)
1
2
3
4
5
#通过角标获取数组中的元素
#定义一个0到4的角标范围
scala> for(i<-0 to 4)      #0 to 4=> 会生成一个范围集合 Range(0,1,2,3,4) 闭区间
     | println(array(i))
1
2
3
4
5
scala> for(i<-0 until 5)    #0 until 5 => 会生成一个范围集合 Range(0,1,2,3,4,5) 左闭右开
     | println(array(i))
1
2
3
4
5
#打印数组中的偶数元素
scala> for(e<-array if e%2==0){  #for 表达式中可以增加守卫
     | println(e)}
2
4

yield关键字:把结果放在一个数组中

scala> for(e<-array if e%2==0)yield e
res28: Array[Int] = Array(2, 4)

双层for循环示例

#循环功能是将不同的两个数进行大括号中的运算
scala> for(i<-1 to 3; j<-1 to 3 if i!=j) { println((10 * i + j) + " ") }
12
13
21
23
31
32

运算符/运算符重载

Scala中的 +-*/%等操作符作用于Java一样,位操作符&|^>><<也一样,只是有一点特别:这些操作符实际上是方法

如:a+b   是 a.+(b) 方法调用的简写 ,a 方法 b 可以写成 a.方法(b)

方法的定义与调用

1ecd1b2606ed46e9956a89f231c9802c.png

方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回 类型。


定义方法的格式为:def methodName ([list of parameters]) : [return type] = {}

说明:如果不使用等号和方法体,则隐式声明抽象(abstract)方法。

 

#交互式窗口代码示例
#定义一个add方法,有两个整型参数,方法返回值为整型
scala> def add(a: Int,b: Int): Int=a+b
add: (a: Int, b: Int)Int
#调用
scala> val res=add(1,3)
res: Int = 4
#无参、无返回值函数的定义及调用
scala> def sayhello1=println("say hello1")   #方式一
sayhello1: Unit
scala> val s1=sayhello1
say hello1
s1: Unit = ()
scala> def sayhello2()=println("say hello2")   #方式二
sayhello2: ()Unit
scala> val s2=sayhello2()
say hello2
s2: Unit = ()
scala> val s2=sayhello2
say hello2
s2: Unit = ()

注:如果方法没有() 调用时不能加();如果方法有(), 可以省略(), 也可以不省略。

方法可转换为函数

1ecd1b2606ed46e9956a89f231c9802c.png

函数的定义与调用

函数定义方式1:

1ecd1b2606ed46e9956a89f231c9802c.png

其中 f1 为函数的引用,也可以叫做函数名,function1 表示一个参数的函数。

函数定义方式2:

1ecd1b2606ed46e9956a89f231c9802c.png

示例:

#定义了一个只有1参数无返回值的函数
scala> val f3:(String)=>Unit=a=>println(a)
f3: String => Unit = <function1>
scala> f3("aaaaa")
aaaaa
#定义了一个无参,返回值为int的函数
scala> val f4:()=>Int=()=>1
f4: () => Int = <function0>
scala> f4()
res35: Int = 1
相关文章
|
JavaScript 前端开发 Java
Scala语言入门以及基本语法
Scala语言入门以及基本语法
|
Java 编译器 Scala
【Scala】(二)Scala 基本语法及操作、程序控制结构
【Scala】(二)Scala 基本语法及操作、程序控制结构
329 0
【Scala】(二)Scala 基本语法及操作、程序控制结构
|
Java Scala 索引
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
49 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
48 3
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
40 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
82 0
|
1月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
22 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0