Scala 中的结构控制和函数

结构控制和函数

条件表达式

scala中的if/else表达式有值。这个值就是跟在if或else之后的表达式的值。

可以将表达式的值进行复制

val s = if(x > 0) 1 else -1

等同于Java中的三元表达式。x > 0 ? 1 : -1。但不能在 ? : 表达式中插入语句。

如果两个分支的类型不同,则会用两个分支类型的公共超类型。

比如:if (x > 0) “positive” else -1 。一个String,一个Int。公共超类型是Any

如果else部分缺失,比如:if( x > 0) 1 ,那么if语句可能没有交出任何值。但Scala中,每个表达式都应具有某种值,这个问题解决方案是引入一个Unit类,写作()。这个不带else的if语句相当于.

if (x > 0) 1 else ()

在这里插入图片描述

注意:如果想在if和else之间进行换行,需要使用花括号。

if ( x > 0 ) {

1 } else if (x == 0) 0 else -1

语句终止

Scala中,行尾的位置上不需要分号。

如果想在单行中写下多个语句,就需要将他们以分号隔开。

if ( n > 0 ) { r = r * n ; n -= 1}

如果写较长的语句,需要分两行写的话,要确保第一行以一个不能用作语句结尾的符号结尾。通常一个比较号的选择是操作符。

s =s0 + (v - v0) * t + // + 告诉解析器这里不是语句的末尾

0.5 * (a - a0) * t * t

实际编码中,无需过分担心 - 在左括号之后,编译器直到匹配的右括号才会去推断某处是否为语句结尾。

Scala程序员更倾向于Kemighan & Ritchie 风格的花括号:

if ( n > 0) {

​ r = r * n

​ n -= 1

}

块表达式和赋值

Java中,块语句是一个包含于 {} 中的语句序列。

Scala中,{}块包含一系列表达式,其结果也是一个表达式。块中最后一个表达式的值就是块的值。

这种特性对于某个val的初始化需要分多步完成的情况很有用。

例如:val distance = { val dx = x - x0 ; val dy = y - y0; sqrt(dx * dx + dy * dy) }dx和dy作为中间变量,可以很干净的对程序其他部分而言不可见。

Scala中,赋值动作本身是没有值的,或者说,它们的值是Unit类型。

一个以赋值语句结束的块。比如:{ r = r * n ; n -= 1} 的值是Unit类型的。

赋值语句的值是Unit类型,隐藏别把其串联在一起。

x = y =1 , y=1的值是()。

输入和输出

可以使用print和println进行输出,前者不带换行。

  • 前缀f ,字符串插值:

print(f"Hello, $name ! In six months, you’ll be ${age + 0.5}%7.2f years old. %n " }

被格式化的字符串以f打头。包含以 打 头 , 并 可 能 带 有 c 风 格 的 格 式 化 字 符 串 的 表 达 式 。 打头,并可能带有c风格的格式化字符串的表达式。 cname被替换为name变量的值。

表达式 ${ age + 0 . 5 }% 7 . 2f 被替换成 age + 0.5 的值并以宽度为7、精度为2的浮点数格式化. f插值器比printf方法更好,因为它是类型安全的。

对不是数值类型的表达式使用%f,编译器会报错。

在这里插入图片描述

  • 前缀s,字符串可以包含表达式,但不能有格式化命令

    想要被插值的字符串中包含 符 号 , 需 连 续 写 两 次 。 例 如 : 表 达 式 s ” 符号,需连续写两次。例如:表达式s”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值