Scala基础01-数据类型与控制语句

一、scala特点

1.静态类型:变量声明后不允许改变类型;变量和表达式的类型在编译时就已经完全确定
2.强类型:不经过强转,数据类型不会被改变,不允许隐式类型转换。方式为(对象名.asinstanceOf[XXX],对象名.toXXX方法,隐式转换(implicit关键字))
3.多范式编程:
(1)面向对象:一切值都是对象;无static关键字使用伴生对象模拟类对象;无接口概念,用特质概念替代
(2)函数式编程:一切函数都是值,所以可以把函数作为参数和返回值

二、常量与变量

1.val:常量一旦初始化将不可以被修改
2.var:变量可以重复赋值

三、数据类型

1.值类型(AnyVal)
(1)直接存储值,在栈上存储其值
(2)与Java的八大基本类型一致(Byte、Short、Int、Long、Float、Double、Char、Boolean)
2.引用类型(AnyRef)
(1)存储对其值的引用,在栈上存储地址,堆上存储值
(2)List、Option等,已经自定义类
3.字面量:直接在代码中写常量值的方式:0,0L等等;符号字面量:’<标识符>’,对应scala.Symbol类型
4.特殊类型:
(1)Null:所有引用类型的子类,只有一个实例对象null,并且null为关键字
(2)Nothing:List()返回是List[Nothing]
(3)Unit:仅有一个实例对象“()”,无用占位符,类似Java的void。一切表达式都有值

四、scala字符串差值(拼接)

本质:隐匿转换的实现
1.s字符串插值,可以用$引用变量,也可以引用表达式
在这里插入图片描述

2.f字符串插值后格式化输出
在这里插入图片描述

3.raw插值,屏蔽转义符等控制效果
在这里插入图片描述

五、程序控制

1.条件控制:if
(1)if语句也是表达式,最终结果也必须有值,可以直接赋值
在这里插入图片描述
在这里插入图片描述

2.循环控制:for
(1)不可以声明i,也可以写做a、b等等;可以是作用域内现有变量
(2)<-为关键字非操作符
(3)表达式为数组、元祖、集合
(4)Scala中Range是常用的集合类型,表示范围区间
(5)单循环:for(i<- min to/until max by step){statements},从数值min开始以step作为步长行走直至max结束,to包含max,until不包含max。在条件后面可以加条件限制,比如下图中的if语句
在这里插入图片描述
在这里插入图片描述

(6)多重循环:for(i<-表达式1;j<-表达式2;…){statements},如果()内有多个表达式可以使用{}替代,换行写多条语句
(7)如果没有else则值为unit,即()
(8)循环跳转语句:
①scala中没有break,如要使用,需要导入包:import scala.util.control.Breaks._;
在这里插入图片描述

②break的源码如下,使用过异常机制实现跳出中断
在这里插入图片描述

③ ._相当于Java中的.*,是一种匹配通配符
(9)推导式:yield循环的结果输出生成集合Vector
①var arr = for(i<-1 to 20 if i%2==0) yield i
在这里插入图片描述

3.块表达式:{}
(1)块表达式也是一个结果,{}中的最后一行的结构就是块表达式的结果
(2)如果最后一行是赋值语句,则为unit()
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值