Chiriri's blog Chiriri's blog
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)

Iekr

苦逼后端开发
首页
  • Java

    • JavaSE
    • JavaEE
    • 设计模式
  • Python

    • Python
    • Python模块
    • 机器学习
  • Golang

    • Golang
    • gRPC
  • 服务器

    • Linux
    • MySQL
    • NoSQL
    • Kubernetes
  • 项目

    • 传智健康
    • 畅购商城
  • Hadoop生态

    • Hadoop
    • Zookeeper
    • Hive
    • Flume
    • Kafka
    • Azkaban
    • Hbase
    • Scala
    • Spark
    • Flink
  • 大数据项目

    • 离线数仓
  • 青训营

    • 第四届青训营
  • HTML

    • HTML
    • JavaScript
  • Vue

    • Vue2
    • TypeScript
    • Vue3
    • Uni-APP
  • 数据结构与算法
  • C语言
  • 考研数据结构
  • 计算机组成原理
  • 计算机操作系统
  • Java基础

    • Java基础
    • Java集合
    • JUC
    • JVM
  • 框架

    • Spring
    • Dubbo
    • Spring Cloud
  • 数据库

    • MySQL
    • Redis
    • Elasticesearch
  • 消息队列

    • RabbitMQ
    • RocketMQ
  • 408

    • 计算机网络
    • 操作系统
    • 算法
  • 分类
  • 标签
  • 归档
  • 导航站
GitHub (opens new window)
  • Hadoop

  • Zookeeper

  • Hive

  • Flume

  • Kafka

  • Azkaban

  • Hbase

  • Scala

    • Scala介绍
    • Scala入门
    • 流程控制
      • 分支控制
      • 三元运算符
      • Switch分支结构
      • For循环
        • 范围数据循环(To)
        • 范围数据循环(Until)
        • 循环守卫
        • 循环步长
        • 嵌套循环
        • 引入变量
        • 循环返回值
        • 倒序打印
      • 循环中断
    • 函数式编程
    • 面向对象
  • Spark

  • Flink

  • 离线数仓

  • 青训营

  • DolphinScheduler

  • Doris

  • 大数据
  • Scala
Iekr
2021-12-15
目录

流程控制

# 流程控制

# 分支控制

Scala 中 if else 表达式其实是有返回值的,具体返回值取决于满足条件的代码体的最后一行内容

object TestIfElse  {
    def main(args: Array[String]): Unit = {

        println("input age")
        var age = StdIn.readInt()

        val res :String = if (age < 18){
            "童年"
        }else if(age>=18 && age<30){
            "中年"
        }else{
            "老年"
        }

        println(res)
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 三元运算符

利用条件运算符可以有返回值特性 使用三元运算符

val res:Any = if (age < 18)  "童年" else "成年"
1

# Switch 分支结构

在 Scala 中没有 Switch,而是使用模式匹配来处理。

# For 循环

# 范围数据循环(To)

使用 1 to 3 赋值给一个变量

for(i <- 1 to 3){
    print(i + " ")
}
// 1 2 3 
1
2
3
4
  1. i 表示循环的变量,<- 规定 to
  2. i 将会从 1-3 循环,前后闭合

# 范围数据循环(Until)

for(i <- 1 until 3) {
    print(i + " ")
}
// 1 2 
1
2
3
4
  1. 这种方式和前面的区别在于 i 是从 1 到 3-1
  2. 即前闭合后开的范围

# 循环守卫

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为 true 则进入循环体内部,为 false 则跳过,类似于 continue。

在 scala 中没有 break 和 continue 关键字,循环守卫其实是通过 if 判断模拟 continue 跳出本次循环

for(i <- 1 to 3 if i != 2) {
    print(i + " ")
}
// 1 3 
1
2
3
4

# 循环步长

for (i <- 1 to 10 by 2) {
    println("i=" + i)
}
// 2 4 6 8 10
//负步长
for (i <- 10 to 1 by -2) {
    println("i=" + i)
}
//10 8 6 4 2
1
2
3
4
5
6
7
8
9

by 表示步长

# 嵌套循环

for(i <- 1 to 3; j <- 1 to 3) {
    println(" i =" + i + " j = " + j)
}
1
2
3

使用;来隔断逻辑

# 引入变量

for(i <- 1 to 3; j = 4 - i) {
    println("i=" + i + " j=" + j)
}
// 1 3
// 2 2
// 3 1
1
2
3
4
5
6

for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号,当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号

for {
    i <- 1 to 3
j = 4 - i
} {
    println("i=" + i + " j=" + j)
}
1
2
3
4
5
6

# 循环返回值

将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。

val res = for(i <- 1 to 10) yield i
// 1 2 3 4 5 6 7 8 9 10
var res = for(i <-1 to 10) yield {i * 2}
//Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
1
2
3
4

# 倒序打印

倒序打印一组数据,可以用 reverse 关键字

for(i <- 1 to 10 reverse){
    println(i)
}
1
2
3

# 循环中断

Scala 内置控制结构特地去掉了 break 和 continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决 break 和 continue 的功能,而不是一个关键字。Scala 中使用 breakable 控制结构来实现 break 和 continue 功能。

import scala.util.control.Breaks

def main(args: Array[String]): Unit = {

    Breaks.breakable(
        for (elem <- 1 to 10) {
            println(elem)
            if (elem == 5) Breaks.break()
        }
    )

    println("正常结束循环")
}
1
2
3
4
5
6
7
8
9
10
11
12
13

Breaks 底层是抛出异常来结束循环 break 方法捕抓异常

简化写法

import scala.util.control.Breaks._

object TestBreak {

    def main(args: Array[String]): Unit = {
    
        breakable {
            for (elem <- 1 to 10) {
                println(elem)
                if (elem == 5) break
            }
        }
    
        println("正常结束循环")
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
上次更新: 2023/12/06, 01:31:48
Scala入门
函数式编程

← Scala入门 函数式编程→

最近更新
01
k8s
06-06
02
进程与线程
03-04
03
计算机操作系统概述
02-26
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Iekr | Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式