条件控制与循环

if表达式

  • 定义:if表达式是有值的,就是if或者else中最后一行语句返回的值。

    • 例如:val isAdult = if (age > 18) 1 else 0
  • 类型推断:由于if表达式是有值的,而if和else子句的值类型可能不同,此时if表达式是什么类型呢?Scala会自动取两个类型的公共父类型。
    • 如果if后没有跟else,则默认else的值是Unit,也用()表示,类似java中的void或者null。
  • 写多行if语句:可以使用{}的方式,但推荐使用:paste和ctrl + D的方式。

终结符

默认情况下scala不需要终结符; 因为默认一行一句,但是如果你想在一行写多句,那么必须使用; 隔断,其次可以使用{}来进行块编码。

缩进

官方推荐代码缩进为2个空格,因为Scala代码很容易陷入很深的嵌套层级,如果有更多空格的话代码很容易就超出屏幕右边界。

循环

  • while do:语义与java相同
  • for:只有简易版for语句
    • 例如:var n = 10; for(i <- 1 to n) println(i)
    • 或者使用until,表示不达到上限: var n = 10; for(i <- 1 until n) println(i)
    • 也可以对字符串进行遍历,类似java的增强for循环: for (c <- "hello World") print(c)
  • 跳出循环语句
    • 没有类似于java的break语句
    • 但是可以使用bool、return或者Breaks的break函数来替代使用
import scala.util.control.Breaks._
breakable{
var n = 10
for(c <- "hello world"){
if(n == 5) break;
print(c)
n -=1
}
}

高级for循环

  • 多重for循环:九九乘法表
for(i <- 1 to 9; j <- 1 to 9){
if(j==9){
println(i*j)
}else{
print(i*j + " ")
}
}
  • if守卫:for循环中可以添加if判断,例如:取偶数

    • for (i <- 1 to 100 if i % 2 == 0) println(i)
  • for推导式:构造集合, 类似于python中的列表解析式

scala> var list = for(i<- 1 to 10) yield i
list: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8
, 9, 10)

Scala入门系列(二):条件控制与循环的更多相关文章

  1. C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  2. C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...

  3. [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...

  4. Shell学习(三)——Shell条件控制和循环语句

    参考博客: [1]Shell脚本的条件控制和循环语句 一.条件控制语句 1.if语句 1.1语法格式: if [ expression ] then Statement(s) to be execut ...

  5. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  6. Maven入门系列(二)--设置中央仓库的方法

    原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...

  7. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  8. Python - 条件控制、循环语句 - 第十二天

    Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...

  9. Shell脚本的条件控制和循环语句

    条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...

随机推荐

  1. BZOJ2428_均分数据_KEY

    题目传送门 这道题可以用C++的random_shuffle屮过去. random数列插入顺序,每次都插入数值和最小的那一组. #include <cmath> #include < ...

  2. Oracle 安装过程中 File not found "WFMLRSVCApp.ear" 的原因

    主要有两种原因: 1 只解压缩了第一个zip文件. 2 两个zip 文件解压缩到了两个不同的目录里.

  3. django学习笔记(2)

    Part 2: The admin site ====> Creating an admin user$ python manage.py createsuperuser   Username: ...

  4. log4j配置单独日志文件输出

    log4j.logger.batteryHistory=ERROR,BD log4j.appender.BD=org.apache.log4j.FileAppender log4j.appender. ...

  5. Redis 为什么使用单进程单线程方式也这么快

    Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写.官方提供的数据是可以达到100000+的 qps.这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 ...

  6. 菜鸟vimer成长记——第2.2章、visual模式

    vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...

  7. js 日期,时间函数 及相关运算大全

    一.在js中如何比较两个时间字符串的大小 方法一: function CompareDate(d1,d2){     return ((new Date(d1.replace(/-/g,"/ ...

  8. html5新特性data_*自定义属性使用

    HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单, 就是你可以往HTML标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的 ...

  9. Socket之简单的Unity3D聊天室__TCP协议

    服务器端程序 using System; using System.Collections.Generic; using System.Linq; using System.Net; using Sy ...

  10. 【LeetCode算法题库】Day2:Median of Two Sorted Arrays & Longest Palindromic Substring & ZigZag Conversion

    [Q4] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...