Scala基本语法(二)

条件表达式

条件表达式就是 if 表达式,if 表达式可以根据给定的条件是否满足,根据条件的结果(true or false)决定执行对应的操作。Scala条件表达式的语法和Java一样。

有返回值的 if

与Java不一样的是:

  • 在Scala中,条件表达式也是有返回值的。
  • 在Scala中,没有三元表达式,可以使用 if 表达式替代三元表达式。

示例:
定义一个变量sex,再定义一个result变量,如果sex等于"male",result等于1,否则result等于0

参考代码:

val sex = "male"
val result = if (sex == "male") 1 else 0

块表达式

  • Scala中,使用 {} 表示一个块表达式
  • 和 if 表达式一样,块表达式也是有值的
  • 值就是最后一个表达式的值

问题:请问一下代码,变量a的值是什么?

val a = {
  println("1+1")
  1+1
}

循环

在Scala中,可以使用 for 循环和 while 循环,但一般推荐使用 for 循环,因为 for 表达式语法更简洁。

for 循环

语法:

for(i <- 表达式/数组/集合) {
    // 表达式
}

示例:使用for表达式打印1-10的数字
参考代码:

val nums = 1.to(10)
for (i <- nums) println(i)

注:生成1~10的数字可以使用 to 方法

以上代码的简写方式如下:

for(i <- 1 to 10) println(i)  //中缀调用法

嵌套循环

示例:使用for表达式,打印以下字符
*****
*****
*****

参考代码:

for (i <- 1 to 3; j <- 1 to 5) {print("*");if (j == 5) println("")}
//外循环控制行,内循环控制列

守卫

for 表达式中,可以添加 if 判断语句,这个 if 判断就称之为守卫。我们可以使用守卫让 for 表达式更简洁。

语法:

for(i <- 表达式/数组/集合 if 表达式) {
    // 表达式
}

示例:使用 for 循环打印1-10之间能够被3整除的数字
参考代码:

for (i <- 1 to 10) if (i % 3 == 0) println(i)	// 3 6 9

for 推导式

在 for 循环体中,可以使用 yield 表达式构建出一个集合(一组数据),我们把使用 yield 的 for 表达式称之为推导式。

示例:生成一个10、20、30…100的集合。

参考代码:

val result = for (i <- 1 to 10) yield i * 10
println(result)		//Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

while 循环

Scala中 while 循环和 Java 中是一致的

示例:打印1-10的数字

参考代码:

var num = 1
while(num <= 10) {
  println(num)
  num = num + 1
}

Break & Continue

在 Scala 中,类似 Java 和 C++ 的 break/continue 关键字被移除了,如果一定要使用 break/continue,就需要使用 scala.util.control 包的 Break 类的breablebreak方法。

实现Break

用法:

  • 导入Breaks包 import scala.util.control.Breaks._
  • 使用breakable将for表达式包起来
  • for表达式中需要退出循环的地方,添加break()方法调用

示例:使用for表达式打印1-100的数字,如果数字到达50,退出for表达式

参考代码:

import scala.util.control.Breaks._
breakable {
  for (i <- 1 to 100) {
    if (i > 50) break()
    else println(i)
  }
}

实现Continue

用法:Continue 的实现与 Break 类似,但有一点不同:实现break是用 breakable{} 将整个for表达式包起来,而实现continue是用breakable{}将 for 表达式的循环体包起来。

示例:打印1-100的数字,使用for表达式来遍历,如果数字能被10整除,则不打印。

参考代码:

import scala.util.control.Breaks._
for (i <- 1 to 100) {
  breakable {
    if (i % 10 == 0) break()
    println(i)
  }
}

方法

一个类可以有自己的方法,Scala中的方法和Java中的方法类似。但Scala与Java定义方法的语法是不一样的。

方法的定义

语法:

def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
    // 方法体:一系列的代码
}

注:

  • 参数列表的参数类型不能省略;
  • 返回值类型可以省略,由Scala编译器自动推断;
  • 返回值可以不写return,默认就是{}块表达式的值。

示例:

  1. 定义一个方法,实现两个整形数值相加,返回相加后的结果;
  2. 调用该方法。

参考代码:

def sum(a: Int, b: Int): Unit = {
  println(a + b)
}
sum(1, 2)

返回值类型推断

Scala定义方法可以省略返回值,由Scala自动推断返回值的类型,使方法的定义更加简洁。
注:定义递归方法时不能省略返回值类型。

示例:定义递归方法,求阶乘。

参考代码:

def recursion(x: Int): Int = {
  if (x == 1) 1
  else recursion(x - 1) * x
}
recursion(5)

方法参数

Scala中的方法参数使用比较灵活,它支持以下几种类型的参数:默认参数带名参数变长参数

默认参数

在定义方法时可以给参数定一个默认值。

示例:

  1. 定义一个计算两个值相加的方法,这两个值默认为0;
  2. 调用该方法,不传任何参数。

参考代码:

def sum(a: Int = 0, b: Int = 0) = {
  a + b
}
sum()

带名参数

在调用方法时,可以指定参数名来进行调用。

示例:

  1. 定义一个计算两个值相加的方法,这两个值默认为0;
  2. 调用该方法,只设置第一个参数的值。

参考代码:

def sum(a: Int = 0, b: Int = 0) = {
  a + b
}
sum(a = 1)

变长参数

如果方法的参数不是固定的,那么可以将这个方法的参数定义为变长参数。

语法:

def 方法名(参数名:参数类型*):返回值类型 = {
    方法体
}	//在参数类型后面加一个 * ,表示参数可以是0个或多个

示例:

  1. 定义一个计算若干个值相加的方法;
  2. 调用该方法,并传入以下参数:1,2,3,4,5

参考代码:

def sum(a:Int*):Int = a.sum
sum(1,2,3,4,5)

方法的调用方式

在Scala中,有如下几种调用方式:后缀调用法中缀调用法花括号调用法无括号调用法

后缀调用法

这种方式和Java一样。
语法:

对象名.方法名(参数)

示例:使用后缀Math.abs求绝对值。

参考代码:

Math.abs(-11)

中缀调用法

语法:

对象名 方法名 参数

示例:使用中缀调用法Math.abs求绝对值。

参考代码:

Math abs -11

花括号调用法

语法:

Math.abs{ 
    // 表达式1
    // 表达式2
}

注:方法只有一个参数,才能使用花括号调用法。

示例:使用花括号调用法Math.abs求绝对值。

参考代码:

Math.abs{-10}

无括号调用法

如果方法没有参数,可以省略方法名后面的括号。

示例:

  1. 定义一个无参数的方法,打印hello
  2. 使用无括号调用法调用该方法。

参考代码:

def method = println("hello")
method
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值