scala基础(一)

1.声明值和变量值

    val name:type=initvalue //不可修改变量 
    var name:type=initvalue //  可修改
知识兔

其中名字name以字母或下划线开头,后面跟着字母、下划线或数字类型type可省略,
scala自动会区分不同类型初始值initvalue

 val a= 1
 var b: Double=1
 var c="Helloworld"
知识兔

2.常用类型8种数值类型

Byte Char Short Int Long Float Double Boolean
类型与Java不同的是,这些类型都是类,自带有方法

   1.toString()//返回字符串"1"
   1.to(3)  //返回Range(1,2,3)
知识兔

3.算数和操作运算符重载,与Java不同点

   1)么有++和--
   2)操作符其实是方法,a+b其实是a.+(b)
知识兔

4.条件表达式

if/else与java一样,不过在scala中可以把if/else表达式的值赋值给变量

  val s=if (x>0) 1 else -1
知识兔

5. 块表达式也可以赋值

   val a={
          val b=1 
          val c=5b+c
   }
知识兔

6.输入和输出

输出:与c++类似,print(),printf(),println()
输入: readline(),八个类型read,如readInt,readDouble()....

    val name=readLine("your name:")
    println("name is "+name)
知识兔

7. 循环

  while(n>0){....}
  for(i< 1 to 10){....}//循环1到10
  for(i< myarray){....}
  myarray.foreach(i=>{....})
知识兔

8. 函数

  def methodName(arg1:type1,arg2 type2) returnType={.....result}
知识兔

函数的定义关键字def开始,后面跟着方法名和括号的参数列表。参数名:参数类型
参数列表后跟着一个冒号和一个返回结果类型

 def abs(x:Double):Double= {if(x>=0) x else -x} //可以省略括号 
知识兔

9.默认参数、带名参数、变长参数

定义函数时,我们可以给函数设置默认值

  def corde(str:String,left:String ="[",right:String ="]") =left +str +right
知识兔

此时直接调用 corde("Hello")会得到"[Hello]"另外可以再使用函数的时候,指定参数名,就不需要跟参数列表顺序完全一致

  println corde(left="<<<", str="Hello", right =">>>")
知识兔

还可以实现混用未命名参数和带名参数,注意未命名参数要排在前面

  corde("Helo", right="]]") //输出"[ Hello]]
知识兔

scala 可以实现变长参数,可以让函数接受任意多的参数,如下

  def sum(args: Int*)={ 
   var result =0
   for(arg <args)
   result+ = arg
   result
} 
知识兔

注意以下的用法的正确性

val s=sum(1,4,9,16,25)//正确
val ss=sum(1 to 5) //错误,不接受序列
val sss=sum(1 to 5:_*)  //正确,追加:_*做参数序列
知识兔

10.过程
过程即函数体在花括号前没有=号,返回类型为Unit,也就是过程不返回值

def book(s: String){
  //没等号,这个是过程,用来打印书名号
  println("<<"+s+">>")
}
知识兔

11.赖值当val被声明为lazy时,直到我们首次对它取值,才开始初始化

lazy val word = scala.io.Source.fromfile("/usr/share/words").mkString 
//words 没有被调用,文件也不会打开,不会进行初始化
知识兔

12.异常
scalar中的异常与java相似try{}catch{}finally{}不同的是 scala没有受检异常,即不需要说函数或方法可能会抛出某种异常,且 scala捕获异常的语法采用的是模式匹配

try {
  process(new URL("http://www.baidu....."))
}catch{
  case_:MalformedURLException =>println("bad url ")
  case ex:IOException =>ex.printStackTrace()
}
知识兔
计算机