(Scala三)控制结构和函数

博客围绕Scala的结构和函数展开,但具体内容缺失。Scala是后端开发常用语言,其结构和函数的运用对程序开发至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



/**
  * if else 无三元运算符
  */
val x = 8
val s = if (x > 0) 1 else -1

//############################################################

/**
  * while
  * 不能直接break
  * 1.通过boolean型的控制变量
  * 2.使用嵌套函数,从函数中return
  * 3.使用Breaks对象的break方法(直接抛出异常,后续代码不能执行)
  */

import scala.util.control.Breaks

var n = 10
while (n > 0) {
  n -= 1
  println(n)
  if (n <= 5) {
    //    Breaks.break()
  }
}


//############################################################

/**
  * for
  * 生成器表达式: 变量名 <- 集合
  */
for (i <- 1 to 3) {
  println(i)
}

for (i <- 1 to 3; j <- 1 to 3) {
  println(10 * i + j)
}

for (i <- 1 to 3; j <- 1 to 3 if i != j) {
  println(10 * i + j)
}

//for 推导式可以引入变量
for (i <- 1 to 3; aa = 4 - i) println(aa)

//需要返回值用yield关键字
for (i <- 1 to 10) yield i * 3



//############################################################
/**
  * 函数
  */
//def 函数名 (参数名: 类型) [:返回类型] = 函数体
def abs(x: Double) = if (x >= 0) x else -x

//相当于下面
def abs2(x: Double) = {
  if (x >= 0) {
    x
  } else {
    -x
  }
}

abs(-8)
abs2(-8)


//递归函数(n的阶乘)
//递归一定要指明函数返回类型
def recursiveFac(n: Int): Int =
  if (n <= 0) 1 else n * recursiveFac(n - 1)

recursiveFac(5)

//函数参数默认值
def descorate(str: String = "default") =
  str

descorate()
descorate("bb")

//变长参数
//return 可以终结函数,但是需要指定函数返回类型
//变长参数通过*来指定,所有参数会转化为一个seq序列
def sum(args: Int*): Int = {
  if (args.size == 3) {
    return 0
  }
  var result = 0
  for (arg <- args) result += arg
  result
}

sum(3, 2, 1, 0)
sum(3, 2, 1)

//############################################################
/**
  * 过程
  * 不返回值得函数叫过程,返回类型是Unit,它是没有等号(=)的
  */
def box(s: String): Unit = {
  println(s)
}
//或者不写:Unit=
def box2(s: String) {
  println(s)
}


box("aaa")


//############################################################
/**
  * 异常
  * 并不像Java代码那样,需要声明方法会抛出异常
  * Throw的类型为Nothing,存在exception的if语句返回类型,Nothing类型在Scala的类层级的最低端 ; 它是任何其他类型的子类型 。
  */
def devide(x: Int, y: Int): Int = {
  if (y == 0) throw new ArithmeticException("Devide by zero")
  else x / y
}

//devide(5, 0)

try {
  devide(5, 0)
} catch {
  case ex: IndexOutOfBoundsException => println("1", ex)
  case ex: ArithmeticException => println("2", ex)
  case ex: Exception => println("3", ex)
} finally {
  println("finally!")
}

devide(5, 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值