Scala的控制结构和函数

控制结构和函数

先看以下简单的一个条件表达式的demo

object TestConditional {

  def main(args: Array[String]): Unit = {
    // scala的if判断表达式
    var x = 1
    if (x > 0) x = 10 else x = 20
    println(x)
  }
}

Scala的if/else语法结构与java一样,如以上代码一样,需要注意的是当else部分缺失了比如:if(x>0) 1,这个if语句没有输出值,但是在Scala中,每个表达式都应该有值,这个问题可以引入一个Unit类,写做()。不带else的这个if语句等同于 if (x>0) 1 else () Scala中没有switch语句,只需if即可解决所有。

  • 语句终止
在java和C++中,每一个语句都以分号结束,而在Scala中和JavaScript类似--行尾的位置不需要分号,因为Scala编译器能够从上下文明确判断出是语句的终止,但是若要在单行中写下多个语句,需要用分号隔开,例如下面的表达式需要分号隔开
if (n > 0) {r = r * n; n-=1}
若是在写较长的语句,需要两行来写,需要告诉编译器不是语句结尾,例子如下:
x = y + (v - m) * d + // +告诉编译器不是结尾
0.5 * (c - v) * t
  • 块表达式和赋值
在java中,块语句是一个包含与{}中的语句序列,在Scala中{}包含一系列表达式,在Scala中,赋值动作本身没有值,它们是Unit类型,相当于java中的void,而这个类型只有一个值,写做()
{r = r * n; n-=1}
  • 输入和输出
打印一个值可以使用print或者println函数,
例如: println("x="+"10"),另外还有一个带有C风格格式化的字符串printf函数例如:
printf("hello, %S! welcome to Scala world.\n","michael")
也可以使用readLine函数从控制台读取一行输入,读取数字,Boolean或者是字符,可以永readInt,readDouble,readByte,readShort,readLong,readFloat,readBoolean或者readChar。
// 使用readLine
val name=readLine("your name:")
print("your age")
val age = readInt()
printf("hello,%s! you have %d year work experience",name,age)
  • 循环

Scala中没有与for(初始化变量值;变量布尔表达式;变量更新),Scala中有两个选择:一个是使用while循环,而是使用以下for语句
for (i<- 表达式)让变量i遍历<-右边的表达式的所有值,对于Scala集合比如Range而言,会取到集合中的每个值

Scala中没有提供break或者continue语句退出循环,一般可以有以下三种方法跳出循环:
1. 使用Boolean型的控制变量
2. 使用嵌套函数---使用return
3. 使用breaks对象中的break方法
import scala.util.control.Breaks._
breakable {
    for(...) {
    // 退出循环
        if(...) break;
    }
}
  • for循环推导式

Scala中的for循环比java要丰富的多,下面介绍其高级特性

    // 多个生成器
    for (i <- 1 to 3; j <- 1 to 3) print((10 * i + j) + " ")
    println()
    // 守卫生成器,if前没有分号
    for (i <- 1 to 3; j <- 1 to 3 if i != j) print((10 * i + j) + " ")
    // 可以定义变量,在循环中引入
    println()
    for (i <- 1 to 3; from = 4 - i; j <- from to 3) print((10 * i + j) + " ")

 for循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中for循环是有返回值的。如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是List,以此类推。

scala> for (i <- 1 to 5) yield i
res10: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5) 
  • 函数

Scala中定义函数需要定义函数的名称、参数和函数体

 def abs (x: Double) = if (x >= 0) x else -x

 必须给出所有参数的类型,只要不是递归就不需指定返回类型。Scala会自动通过=符号右侧的表达式的类型推断出返回类型

// 递归函数,必须指定返回类型
def fac(n : Int) :Int = if (n<=0) 1 else n* fac(n -1) 

以上代码都可以在github获取 https://github.com/codegeekgao/framework-skills/tree/master/scala-demo/src/main/scala/conditionalexpression
欢迎点缀加个star~~~

原文地址:https://www.cnblogs.com/codegeekgao/p/9607608.html

时间: 2024-10-10 05:12:59

Scala的控制结构和函数的相关文章

2.scala控制结构、函数、异常处理

a:focus { outline: 5px auto -webkit-focus-ring-color } a:hover,a:active { outline: 0 } a { color: #0088cc; text-decoration: none } a:hover { color: #005580; text-decoration: underline } p { margin: 0 0 1.1em } small { font-size: 85% } strong { font-w

Scala学习(二)--- 控制结构和函数

控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号

快学Scala习题解答—第二章 控制结构和函数

2 控制结构和函数 2.1 一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值 简单的逻辑判断 Scala代码   def signum(num:Int){if(num>0)print(1)else if(num<0)print(-1)else print(0)} Scala中已经有此方法了,刚才查找API的时候,应该能看到 Scala代码   BigInt(10).signum 2.2 一个空的块表达式{}的值

Scala中String.split函数

今天在写一个统计用户信息的程序时出现了bug,导致统计的结果根真实值有很大的差距.经过仔细检查以后,我发现时对scala中的split函数的理解不够透彻导致的.下面我讲详细解释split的参数及用法. 因为scala中的String复用了Java的String,因此这也是Java中String.split的用法. split函数主要有两种参数形式: def split(arg0: String): Array[String] def split(arg0: String, arg1: Int):

Thinking in scala (6)----高阶函数----返回一个函数

在Thinking in scala (5)----高阶函数* 里面,我们演示了如何把一个函数作为参数传递给另外一个函数. 在本文里面,我们来演示函数式编程另外一个重要的特性:返回一个函数.首先来看这么一段代码: code piece 1: def sum(f:Int=>Int):(Int,Int)=>Int={ def sumF(a:Int,b:Int):Int= if(a>b) 0 else f(a)+sumF(a+1,b) sumF } 一点点来看,f:Int=>Int 是s

快学Scala-第二章 控制结构和函数

知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 可能没有输出值,在scala中,每个表达式都应该有某种值,引入Unit类,写作(). if(x>0) 1 等同于 if(x>0) 1 else () 2. 语句终止,如果在写较长的语句,需要分两行来写的话,就要确保第一行以一个不能用作语句结尾的符号结尾,通常用操作符. 3.块表达式和赋值,块中最

Scala详解---------控制结构和函数

条件表达式: Scala的if else语法结构和Java的一样,不过,Scala的if else表达式有值,这个值就是跟在if或者else后面的表达式的值. 例如: if(x>0) 0 else 1 该表达式的值就是0或者1,具体的根据x值判断. 可以将if else表达式的值赋值给变量: val s=if(x>0) 0 else 1 这个跟如下语句一致: if(x>) s=0 else s=1 当然,第一种写法更好,它可以用来初始化一个val(常量),而第二种s必须是var(变量).

Scala具体解释---------控制结构和函数

条件表达式: Scala的if else语法结构和Java的一样.只是,Scala的if else表达式有值.这个值就是跟在if或者else后面的表达式的值. 比如: if(x>0) 0 else 1 该表达式的值就是0或者1,详细的依据x值推断. 能够将if else表达式的值赋值给变量: val s=if(x>0) 0 else 1 这个跟例如以下语句一致: if(x>) s=0 else s=1 当然.第一种写法更好,它能够用来初始化一个val(常量),而另外一种s必须是var(变

快学Scala第2章–控制结构和函数 笔记

条件表达式 在Scala中,if/else 表达式是有值的,这个就是跟在if或者else之后的表达式的值.例如: val s = if(x > 0) 1 else -1 // 类似于 var s = 0 if(x > 0) s = 1 else s = -1 Scala允许使用混合类型的返回值,例如: if(x > 0) "positive" else -1 上式表达式返回的类型是它们类型的公共超类型, 在这里java.lang.String 和 Int 它们的公共超