快学scala笔记第二章 结构及简单函数

18 篇文章 0 订阅

1 条件表达式



这里需要注意x的类型通过定义,scala系统推断为Int类型不能进行修改

scala中有Any类型


scala中的Unit类型(像java中void类型)


scala语句块,整个语句块中最后一个表达式返回为变量赋值


2 输入和输出

输出函数:

print, println, printf

输入函数:

var line=readLine()

var x=readInt()

3 循环

while循环

for循环


遍历字符串循环:
val s="hello"
for(i<-s)println(i)
for(j<-0 to s.length-1)println(s(j))

注意:

scala中没有break和continue语句

可以导入Breaks中的break

import scala.util.control.Breaks._
for (i<-1 until 3){
  for(j<-1 until 5){
    if(i%3==0){
      break
    }
      println(i)
  }
}

4 高级for循环和推导

for循环中提供多个生成器,使用分号分割

for(i<-1 to 3;j<-4 to 5)printf("i:%d,j:%d\n",i,j)

每次循环带有守卫,使用if语句

for(i<-1 to 5;j<-2 to 4 if i!=j)printf("i:%d,j:%d\n",i,j)

在循环表达式中可以引入多个变量,并在循环中使用该变量

for(i<-1 to 5;x=i+1;j<-x to 4)printf("i:%d,j:%d\n",i,j)

for推导式:

循环体以yield开始,循环构造出一个集合,yield后面的表达式生成了集合中的值

val x=for(i<-1 to 5) yield i

    print(x)//Vector(1, 2, 3, 4, 5)

如果yield中使用for的第一个表达式的类型是字符串,则最终返回字符串本身

val y=for(x<-"ok"; i<-1 to 3) yield (x+i).toChar

    print(y)//pqrlmn

但是yield中使用for的第二个表达式是字符串类型,则返回集合

val x=for(i<-1 to 3;j<-"ok")yield (j+i).toChar

    println(x)//Vector(p, l, q, m, r, n)


5 函数

scala中可以定义函数,其中参数类型必须给出,如果函数不是递归函数,无需给出返回类型;

函数通过=符号后的表达式 自动推导返回类型

def one(x:Int,y:Int)=x+y

def func(x:Int):Int=if(x==1||x==0) 1 else x*func(x-1)


5.1 默认参数和带名参数

函数参数定义中可以使用默认值

def func2(x:String="<",y:Int=8)=x+y


调用

func2(y=66)

func2()

func2("<<")

但是

func2(6)这个调用违反参数的声明顺序

5.2 变长参数

在参数声明后添加*,表示可变长参数;函数得到一个seq类型的参数

x.tail得到除了第一个元素外的其他所有元素

def sum(x:Int*)={

println(x.tail)

    var s=0;for(i<-x)s+=i;s      

  }

调用

val y=sum(1,2,3)

_*将1 to 5当做序列处理

val y2=sum(1 to 5:_*)

6 过程

当函数体前没有=符号,返回值类型自动变成Unit, 这种成为过程

def func(){

printf("ok")

 }

def func():Unit={

printf("ok")

 }


7 异常

使用throw抛出异常

def func(x:Int)={

   if(x>0)

     scala.math.sqrt(x)

    else

throw new IllegalArgumentException("参数不能负数")

 }

调用时使用try..catch处理异常

使用_代表异常变量;定义异常变量ex可以打印异常信息

try{

      func(-9)

    }catch{

      case _:IOException=>print(-9)

      case ex:IllegalArgumentException=>ex.printStackTrace()

    }finally{

      print("over")

    }











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值