Scala坑二(控制结构和函数)

原创 2015年11月18日 10:39:56

在Scala中几乎所有构造出了的语法结构都有值

1.条件表达式

不同java,Scala的if/else语法结构有值,值是跟在if或者else后面的表达式的值

if(x > 0) 1 else 0    把值赋给变量  val s = if(x >0) 1 else 0 也可以 if(x >0) s = 1 else s = 0

        if( x >0 ) "haha" else 0 混合类型表达式, (String)和(Int)公共超类型叫做 Any

表达式都有值,void 类型相当于 Unit 类 写做 ()。所有不带else的if语句等同于 if( x > 0 ) 1 else ()

2.语句终止

可以不使用分号

3.块表达式和赋值

{  }块包含一系列的表达式,结果也是一个表达式,块中最后一个表达式的值就是块的值。

如val  distanc= { val dx = x - x0 ; val dy = y - y0; sqrt(dx * dx + dy * dy)}

注意::在Scala中赋值动作本身是没有值得或者说他们的值是Unit类型 { r = r * n; n-=1}表达式的值是Unit

         同样的 x=y=-1 也是Unit类型 y=-1的值是()

4.输入输出

用print和println

5.循环

while( n > 0 ){

r = r * n;

n-=1

}

for(i <- 1 to n)

r = r * 1

for( i <- 表达式) 表示让变量 i 遍历 <- 右边的表达式的所有值

如果类型是数值 用 to ;如果类型是字符串或数组是用 until方法  i <- 0 util str.length

6.高级的for循环和for推导式

多个生成器 for(i <- 1 to 3;j <- 1 to 3)print ((10 * i +j ) + " ") 11 12 13 21 22 23 31 32 33

每个生成器带一个守卫,以if开头的Boolean表达式 for( i <- 1 to 3; j <- 1 to 3 if i != j ) print ((10 * i +j ) + " ")  12 13 21 23 31 32 if之前没有分号

任意多的定义,for( i <- 1 to 3 ; from = 4 - i; j <- from to 3) print ((10 * i +j ) + " ")  13 22 23 31 32 33

        for推导式

for循环体以yieid 开始,该循环会构造出一个集合,每次迭代生成集合中的一个值

for(i <- 1 to 10)yieid i % 3  生成 Vector(1,2,0,1,2,0,1,2,0,1)

for推导式生成的集合与它第一个生成器是类型兼容的

如 for(c< - "hello"; i<- 0 to 1)yieid (c+1).toChar 生成 "HIeflmlmop"

for( i<  - 0 t o 1;c< - "hello")yieid (c+1).toChar 生成Vector('H','I','e','f','l','m','l','m','o',p')   ;

7.函数

方法是对象进行操作的,函数不是,在java中只能用静态方法模拟函数

函数的定义,需要函数的名称,参数,和函数体

def abs(x : Double) = if (x > 0 ) x  else -x 

必须要指定所有参数的类型,如果函数不是递归的,就不需要指定返回类型

如果函数体需要多个表达式完成,可以用代码块,块中最后一个表达式的值就是函数的返回值

def fac(n : Int) = {

var r = 2

for(i <- 1 to n) r = r * 2

r //函数的值

}

对于递归函数必须指定返回值

def fac(n : Int) : Int = if (n <= 0 ) 1 else n * fac( n - 1)

8.默认参数和带名参数

def deco(str : String, left : String ="[",right="]")={ left + str + right}  调用deco("hello")得到 "[hello]" 也可以 调用 deco("hello","<<",">>") 得到 “<<hello>>”

在调用时指定参数名,顺序没有规定 deco(left="<<",str = "hello",right=">>")

9.变长参数

一个接收可变长度参数

def sum (args: Int*)= {

var reult = 0

for (arg -> args) reult +=arg

reult

}

val s = sum(1,2,3,4)

val s = sum(1 to 10:_*)    :_* 将参数序列处理

10.过程

对于没有返回值得函数,成为过程

函数体有花括号但是前面没有 = 号的,那么返回类型是Unit

def bos(s : String) {

print(s)

}

或者

def bos(s : String):Unit = {

print(s)

}

11.懒值

当val 被声明为lazy时,初始化会被推迟,直到首次对其取值

lazy val words = scala.io.Source.fromFile("...").mkString

当words被首次使用时取值

12.异常

异常机制个java差不多





版权声明:本文为博主原创文章,未经博主允许不得转载。

Scala 控制结构和函数

0.要点 if 表达式有值 块也有值,是它最后一个表达式的值 分号(在绝大多数情况下)不是必需的 void类型是Unit 避免在函数定义中使用return 注意别在函数定义式中漏掉了 = 异常的工作方...
  • power0405hf
  • power0405hf
  • 2015年12月02日 15:30
  • 243

Scala学习(二)--- 控制结构和函数

 摘要: 本篇主要学习在Scala中使用条件表达式、循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异。在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做...
  • xiangxizhishi
  • xiangxizhishi
  • 2017年12月19日 10:51
  • 20

Scala的内建控制结构

Scala中的内建控制机构仅有if、while、for、try、match和函数调用。虽然Scala的基础控制结构少,但也足以支持指令式语言里所有的实质内容。因为它们都能产生值,有助于缩短代码。 ...
  • xxfigo
  • xxfigo
  • 2016年08月25日 11:22
  • 605

[scala之二]控制结构和函数

概览 (scala语句和表达式几乎都有值) PK (java中语句有值,表达式执行动作) 1.条件表达式 if(x>0) 1 else -1 可以将表达式结果直接赋值给变量 val s ...
  • mingliaodashi
  • mingliaodashi
  • 2014年12月16日 23:56
  • 112

scala基础——控制结构和函数

这两周项目提测与上线,好久没写Scala的笔记了 scala中几乎构造的所有语法结构都有值...
  • woxiaozhi
  • woxiaozhi
  • 2017年03月25日 14:39
  • 263

scala之控制结构和函数

scala基础
  • Roserug
  • Roserug
  • 2017年08月21日 22:52
  • 159

Scala详解---------控制结构和函数

条件表达式:            Scala的if else语法结构和Java的一样,不过,Scala的if else表达式有值,这个值就是跟在if或者else后面的表达式的值。        ...
  • u011225629
  • u011225629
  • 2015年07月22日 21:14
  • 1019

Scala详解-----------控制结构和函数

Scala学习——控制结构和函数 本章的一开始,是两个容易混淆的概念——表达式(expression)和语句(statement)。表达式有值,而语句没有值只执行操作。 要说起这一点的原因...
  • u011225629
  • u011225629
  • 2015年07月22日 21:16
  • 1353

Scala语法(二)——控制结构

Scala中的基本控制结构有顺序、条件和循环三种方式,这个和其他的JVM语言是一致的,但是Scala也有一些高级的流程控制结构类模式匹配。1、程序代码:package com.dtspark.scal...
  • Jorocco
  • Jorocco
  • 2017年06月07日 23:00
  • 156

Scala 之控制结构(二)

一、for循环Scala中的for循环语句格式如下: for( 变量
  • u013850277
  • u013850277
  • 2017年11月30日 17:21
  • 24
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scala坑二(控制结构和函数)
举报原因:
原因补充:

(最多只允许输入30个字)