Scala基本使用

Posted wh984763176

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala基本使用相关的知识,希望对你有一定的参考价值。

一.变量和数据类型

1.变量

语法:val / var 变量名:变量类型 = 值

val name:String = "zhangsan"

注意
1、val定义的变量想到于java的final,不可用被重新赋值
2、var定义的变量可以被重新赋值
3、在定义变量的时候,变量类型可以省略,scala会自动推断
4、在定义变量的时候,必须初始化

2.命名规范

驼峰原则

3.字符串操作

1、双引号: val 变量名 = "字符串"

val name:String = "zhangsan"

2、三引号: val 变量名 = """sql语句"""

一般用于写Sql字符串

val sparkSql : String =
  """
    |select
    |   t1.name,
    |   t2.age,
    |   t1.address
    |from test1 t1
    |join test2 t2
    |on t1.id = t2.id
    |""".stripMargin
print(sparkSql)

3、插值表达式: val 变量名 = s"hello ${变量名1}"

val name : String ="zhangsan"
val address:String = "BeiJing"
println(s"name=${name},address=${address}")

4、format方法: "hello %s".format(字符串)

val name : String ="zhangsan"
val address:String = "BeiJing"
println("name is %s, address is %s".format(name, address))

4.数据类型

类型一览图

技术图片

1、类型结构

Any: 所有类型的父类
	AnyVal:值类型
		Byte、Short、Int、Long、Float、Double、Char、Boolean
		Unit: 相当于java的void,有一个实例()
		StringOps: 是对java string的扩展
	AnyRef:引用类型
		String、scala class、scala集合、java class、java集合
			Null: 是所有引用类型的子类,有一个实例null
Nothing: 是所有类型的子类,一般scala抛出异常的时候返回Nothing

2、数据转换

1、数字之间的转换
	1、精度小的自动转成精度大的数字类型 比如Byte可以自动转成Int
	2、精度大的数字转成精度小的数字,通过toXXX方法转换 比如 val a:Int = 10;  val b:Byte = a.toByte
2、数字和字符串的转换
	1、数字转字符串,可以通过插值表达式转换
	2、字符串转数字,可以通过toXXX方法转换

二.运算符

? 1、算术运算符
? 2、关系运算符
? 3、逻辑运算符
? 4、位运算符
? 5、赋值运算符
? scala中没有++、--、三目运算符
? scala中运算符是一个个的方法
? scala中方法的调用:
? 1、对象.方法名(参数,...)
? 2、对象 方法名 (参数,...)
? 如果方法的参数只有一个,那么()可以省略: 对象 方法名 参数

三.流程控制

1.块表达式

{ }包裹的一块代码称之为块表达式,块表达式有返回值,返回值为{ }中最后一行表达式的结果值。

val address = {
  var province: String = "GuangDong"
  var city: String = "ShenZhen"
  s"province:${province},city:${city}"
}
print(address)

打印结果

province:GuangDong,city:ShenZhen

Process finished with exit code 0

2.分支

单分支

if (布尔表达式) {..}

双分支

if (布尔表达式) {..} else {..}

多分支

if (布尔表达式) {..} else if(布尔表达式) {..} else if(布尔表达式){..} else{..}

嵌套分支

if (布尔表达式) { if (布尔表达式) {..}}

注意

分支有返回值的,返回值为满足条件的一个分支的{}的最后一行表达式的结果值。
如果if在方法中,有return的时候,返回值就不一定是最后一行表达式的结果值。

3.循环

for循环

1)to方法

左右闭合。1 to 10也等价于1.to(10) ,结果: 1-10的集合

val list = 1 to 10
println(list.toBuffer)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Process finished with exit code 0

2)until方法

左闭右开。1 until 10也等价于1.until(10) ,结果: 1-9的集合

同上

3)for循环基本语法

for(变量 <- 数组/集合/表达式) {..循环体..}

for(i <- 1 to 10){
  print(i)
}

4)守卫

for(变量 <- 数组/集合/表达式 if 布尔表达式)

for(i <- 1 to 10 if(i%2==0)){
  print(i)
}

注意:如果if之前有代码语句,那么if不能提到循环后面,只能放在循环体中

5)嵌套循环

for(变量 <- 数组/集合/表达式;变量 <- 数组/集合/表达式)
6)引入变量: for(变量 <- 数组/集合/表达式;val 变量名 = 变量值;变量 <- 数组/集合/表达式)
7)for循环的返回值:

for(变量 <- 数组/集合/表达式) yield {..}

添加yield以后每个{ }都有一个返回值。

4.实现java的continue和break

break

//导包
import scala.until.control.Breaks._
//使用
breakable{
	while(..){
		if(...) break()
	}
}

continue

//导包
import scala.until.control.Breaks._
//使用
while (...){
  breakable(){
    if(...)break()
  }
}

















以上是关于Scala基本使用的主要内容,如果未能解决你的问题,请参考以下文章

为什么Scala是可扩展的?

初学scala4——trait混入

如何在 Scala 中使用 java.String.format?

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

Scala的面向对象与函数编程

基本目录中缺少 build.scala