Scala 流程控制语句

1. 条件表达式if

Scala 中的 if/else 语法结构与 Java 中的一样,唯一不同的是,Scala 中的 if 表达式是有返回值的。

object ScalaApp extends App {val x = "scala"val result = if (x.length == 5) "true" else "false"
  print(result)}

在 Java 中,每行语句都需要使用 `;` 表示结束,但是在 Scala 中并不需要。除非你在单行语句中写了多行代码。

2. 块表达式

在 Scala 中,可以使用 `{}` 块包含一系列表达式,块中最后一个表达式的值就是块的值。

object ScalaApp extends App {val result = {val a = 1 + 1; val b = 2 + 2; a + b}
  print(result)
}// 输出: 6

如果块中的最后一个表达式没有返回值,则块的返回值是 Unit 类型。

scala> val result ={ val a = 1 + 1; val b = 2 + 2 }
result: Unit = ()

3. 循环表达式while

Scala 和大多数语言一样,支持 `while` 和 `do ... while` 表达式。

object ScalaApp extends App {var n = 0while (< 10) {
    n += 1
    println(n)}// 循环至少要执行一次do {
    println(n)} while (> 10)
}

4. 循环表达式for

for 循环的基本使用如下:

object ScalaApp extends App {// 1.基本使用  输出[1,9)for (<- 1 until 10) {print(n)}// 2.使用多个表达式生成器  输出: 11 12 13 21 22 23 31 32 33for (<- 1 to 3; j <- 1 to 3) print(f"${10 * i + j}%3d")// 3.使用带条件的表达式生成器  输出: 12 13 21 23 31 32for (<- 1 to 3; j <- 1 to 3 if i != j) print(f"${10 * i + j}%3d")}

除了基本使用外,还可以使用 `yield` 关键字从 for 循环中产生 Vector,这称为 for 推导式。

scala> for (<- 1 to 10) yield i * 6
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(6, 12, 18, 24, 30, 36, 42, 48, 54, 60)

5. 异常处理try

和 Java 中一样,支持 `try...catch...finally` 语句。

import java.io.{FileNotFoundException, FileReader}object ScalaApp extends App {try {val reader = new FileReader("wordCount.txt")} catch {case ex: FileNotFoundException =>
      ex.printStackTrace()
      println("没有找到对应的文件!")} finally {
    println("finally 语句一定会被执行!")}
}

这里需要注意的是因为 finally 语句一定会被执行,所以不要在该语句中返回值,否则返回值会被作为整个 try 语句的返回值,如下:

scala> def g():Int = try return 1 finally  return  2
g: ()Int// 方法 g() 总会返回 2
scala> g()
res3: Int = 2

6. 条件选择表达式match

match 类似于 java 中的 switch 语句

object ScalaApp extends App {val elements = Array("A", "B", "C", "D", "E")for (elem <- elements) {
    elem match {case "A" => println(10)case "B" => println(20)case "C" => println(30)case _ => println(50)}}
}

但是与 Java 中的 switch 有以下三点不同:

Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常量;

Scala 中每个分支语句后面不需要写 break,因为在 case 语句中 break 是隐含的,默认就有;

在 Scala 中 match 语句是有返回值的,而 Java 中 switch 语句是没有返回值的。如下:

object ScalaApp extends App {val elements = Array("A", "B", "C", "D", "E")for (elem <- elements) {val score = elem match {case "A" => 10case "B" => 20case "C" => 30case _ => 50}
    print(elem + ":" + score + ";")}
}
// 输出: A:10;B:20;C:30;D:50;E:50;

7. 没有break和continue

额外注意一下:Scala 中并不支持 Java 中的 break 和 continue 关键字。

8. 输入与输出

在 Scala 中可以使用 print、println、printf 打印输出,这与 Java 中是一样的。如果需要从控制台中获取输入,则可以使用 `StdIn` 中定义的各种方法。

val name = StdIn.readLine("Your name: ")
print("Your age: ")
val age = StdIn.readInt()
println(s"Hello, ${name}! Next year, you will be ${age + 1}.")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-bluetooth蓝牙

bluetoothctl hciconfig

程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!

现在经济压力这么大&#xff0c;但是生活成本还在上升&#xff0c;相信大家都知道“四脚吞金兽”的威力了吧&#xff01;话虽如此&#xff0c;但是生活总得继续&#xff0c;为了家庭的和谐幸福&#xff0c;为了孩子的未来&#xff0c;不少人选择多干几份工作&#xff0c;赚点外…

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…

linux编译boost库并执行程序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、--prefix命令 二、安装过程 1、shell脚本&#xff1a; 2、gcc编译环境 执行过程 三、linux下执行cpp程序 总结 前言 提示&#xff1a;这里可以添加本文…

【Synopsys工具使用】VCS使用与Makefile脚本调用

文章目录 一、文件导入二、VCS仿真&#xff08;使用可视化界面&#xff09;三、VCS仿真&#xff08;使用Maefile文件&#xff09;3.1 Makefile文件编写3.2 仿真文件编写规范3.3 Makefile文件使用 一、文件导入 新建一个文件夹新建一个文件夹(图中IC_work)   创建一个目录&…

3.18每日一题(奇偶性、奇偶性的平移、几何意义、配方、换元)

解法一&#xff1a;先配方&#xff0c;再用三角函数换元&#xff08;看见根号一般用三角函数&#xff09;&#xff0c;看见对称区间联想奇偶性&#xff0c;最后再用公式 解法二&#xff1a; 利用奇偶性的平移&#xff0c;令&#xff08;x-1&#xff09; t &#xff0c;对应的区…

Linux-rgb接口

rgb接口 R[7:0] 8根红色数据线。 G[7:0] 8根绿色数据线。 B[7:0] 8根蓝色数据线。 DE 数据使能线。 VSYNC 垂直同步信号线。 HSYNC 水平同步信号线。 PCLK 像素时钟信号线。

项目实战:给首页上库存名称添加超链接然后带fid跳转到edit页面

1、提取公共方法common.js function $(key){if(key){if(key.startsWith("#")){key key.substring(1)return document.getElementById(key)}else{let nodeList document.getElementsByName(key)return Array.from(nodeList)}} } 2、 给库存名称添加超链接 2.1、inde…

力扣刷题 day63:11-02

1.字符串中的第一个唯一字符 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 方法一&#xff1a;两次遍历哈希表 #方法一&#xff1a;两次遍历哈希表 def firstUniqChar(s):d{}for i in s:if …

数据库 | 看这一篇就够了!最全MySQL数据库知识框架!

大家好&#xff01; 作为一名程序员&#xff0c;每天和各种各样的“数据库”打交道&#xff0c;已经成为我们的日常。当然&#xff0c;立志成为一名超级架构师的我&#xff0c;肯定要精通这项技能。咳咳&#xff01;不过饭还是要一口一口吃的&#xff0c;“数据库”这个内容实在…

Linux Makefile变量详解

前言 我们是地球人。曾经为复杂的 Makefile 变量而苦恼过吗&#xff1f;这就是我们的用武之地。我们简化您的构建流程&#xff0c;以获得更快、更高效的结果。看看我们。 自 1976 年出现以来&#xff0c;Make 一直在帮助开发人员自动执行编译代码、构建可执行文件和生成文档的…

【Proteus仿真】【51单片机】贪吃蛇游戏

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用8*8LED点阵、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;可操作4个按键控制小蛇方向。 二、软件设计 /* 作者&#xff1a;嗨小易…

Keil uv5 MDK使用教程

目录 前言一、开发环境搭建1.1 Keil的安装1.2 其他工具安装1.3 注意事项 二、Keil基本使用2.1 新建工程模板2.1.1 基于固件库&#xff08;先复制文件夹&#xff0c;后添加文件&#xff09;2.1.2 基于寄存器2.1.3 基于HAL库 2.2 下载与调试2.3 工程目录下简介2.4 MDK使用技巧 前…

pytest 使用(二):前后置(固件,夹具)

Pytest框架实现一些前后置&#xff08;固件&#xff0c;夹具&#xff09;的处理&#xff0c;常用三种。 一、setup/teardown,setup_class/teardown_class 为什么需要这些功能&#xff1f; 比如&#xff1a;web自动化执行用例之前&#xff0c;请问需要打开浏览器吗&#xff1f…

JavaScript

文章目录 1、JavaScript 的历史1.1 JavaScript 的历史1.2 JavaScript与ECMAScript的关系1.3 JavaScript与Java的关系1.4 JavaScript的版本 2、JS的引入方式3、ECMAScript基本语法3.1 变量3.2 注释3.2 语句分隔符 4、ECMAScript 基本数据类型4.1 数字类型4.2 字符串4.2.1 创建4.…

详解API接口如何安全的传输数据(内附商品详情API接口接入方式)

概述 API接口的安全传输是确保数据在API请求和响应之间的传输过程中不被截获、篡改或泄露的重要步骤。以下是一些用于增强API接口安全传输的常见技术和最佳实践&#xff1a; 使用HTTPS&#xff1a;使用HTTPS协议而不是HTTP&#xff0c;以确保数据在传输过程中的安全性。HTTPS使…

【计算机网络】运输层

概述运输层服务 运输层协议为运行在不同主机上的应用程序提供了逻辑通信功能。 运输层协议是在端系统中而不是在路由器中实现的。 运输层和网络层的关系&#xff1a; 网络层提供主机之间的逻辑通信&#xff0c;而运输层为**运行在不同主机上的应用程序&#xff08;进程&#…

利用wasm实现读写本地项目的在线编辑器

利用wasm实现读写本地项目的在线编辑器 本篇内容是通过AI-ChatGPT问答和查阅相关文档得到的答案。 起因是看到在线Vscode和RemixIde都实现了在线读取用户电脑文件夹作为项目根目录&#xff0c;达成读取、创建、修改、删除该目录下所有文件、文件夹的功能。 而在浏览器中因为安…

python爬虫利用代理IP分析大数据

目录 前言 一、什么是代理IP&#xff1f; 二、为什么需要使用代理IP&#xff1f; 1.突破访问限制 2.提高访问速度 3.保护隐私 三、代理IP的分类 1.高匿代理IP 2.普通代理IP 3.透明代理IP 四、如何获取代理IP&#xff1f; 1.免费代理IP网站 2.付费代理IP服务商 五…

Java文件操作详解

CONTENTS 1. 文件和目录路径1.1 获取Path的片段1.2 获取Path信息1.3 添加或删除路径片段 2. 文件系统3. 查找文件4. 读写文件 1. 文件和目录路径 Path 对象代表的是一个文件或目录的路径&#xff0c;它是在不同的操作系统和文件系统之上的抽象。它的目的是&#xff0c;在构建路…