Scala学习笔记1——Scala基础

Scala学习笔记1——Scala基础

  • 推荐书目

    • Scala for the Impatient(学习用书)
    • Programming in Scala(字典类书)
  • 特点:

    • 基于JVM的FP + OO
    • 静态类型语言
    • 可以与Java互操作
  • 先编译:scalac xxx.scala 再运行:scala xxx

  • 值与变量:

    • val a : Int = 2 则a为常量不可改变
    • var a : Int = 2 则a为变量可以改变
    • 一般不需要指定类型,有自动推断机制
  • 常用类型:byte,char,short,int,long,float,double,boolean

  • 方法定义:

    • def 方法名(参数名 : 参数类型):返回类型 = {block中最后一行为返回值}

    • 当返回类型为Unit时 (无返回值)可以定义为:

      def 方法名 (参数名 : 参数类型){}

    • eg :

      object WeekOne { 
         //scala中无静态方法,通过object实现
         def add(x : Int , y : Int) : Int = {
          	x + y
         }
         def hello() {
             println("hello")
         }
         def main(args : Array[String]){
             println(add(1,2))   //无分号
             hello   //调用没有参数的函数不用带圆括号
         }
      }
      
    • scala 中无 continue 和 break

    • 利用 if 方便的赋值

      val a = if (x > 0) 1 else -1
      
  • 循环

    • 1 to 10 : range(1,2,3,4,5,6,7,8,9,10)

    • 1 until 10 : range(1,2,3,4,5,6,7,8,9)

    • 对于num = 10的数组 :0 until 10

    • range(1,10,步长) :同python

    • for循环:

      for (i <- 1 to 10) {
          println(i)
      }
      for (i <- 1 to 10 if i % 2 == 0) { //条件遍历
          println(i)
      }
      
  • lazy val:用时才会加载

    lazy val a = 2
    
  • 默认参数:

    def sayName(name : String = "Jack") {
        println(name)
    }
    def main(args : Array[String]) {
        sayName() //输出 "Jack"
        sayName("lucy") //输出 "lucy"
    }
    
  • 带名参数

    def add(x : Int, y : Int) : Int = {
        x + y
    }
    def main(args : Array[String]) {
        println(add(y=2,x=1))//会把2赋给y,1赋给x
        println(add(2,1))    //会把2赋给x,1赋给y
    }
    
  • 变长参数

    def sum(elems : Int*) {
        
    }
    def main(args : Array[String]) {
        sum(1,2,3,4,5)
        sum(1,2,3)
    }
    
  • 异常处理

    try {
    	//....
    } catch {
        //模式匹配
        case e : Exeption => ...
    } finally {
        //...
    }
    
  • 定长数组

    val a = new Array[String](5) //5个null
    val a = new Array[Int](5)    //5个0
    val a = Array("jack","lucy") //直接初始化
    a(0)//访问数组
    
  • 变长数组

    import scala.collection.mutable.ArrayBuffer
    val buff = ArrayBuffer[类型]()
    
    val a = ArrayBuffer[int]()
    a += 1    //添加元素
    a += (3,4,5)
    a ++= Array(6,7,8)
    a.insert(0,0)  //第0个位置填上数字0
    a.remove(0,1)  //删除0,1两个数字
    a.toArray      //变为定长数组
    a.toArray.sum
    a.toArray.max
    a.trimEnd(2)   //移除最后面的两个数
    
  • 数组的遍历

    for(i <- 0 until array_name.length)
    	println(array_name(i))
    for(elem <- array_name)
    	println(elem)
    //更多的将采用map,filter操作
    
  • Map

    val age = Map("Jack" -> 20, "lucy" -> 18) //不可变Map
    val age = scala.collection.mutable.Map("Jack" -> 20, "lucy" -> 18) //可变Map
    val m = scala.collection.mutable.Map[String,Int]()
    //初始化一个Map
    
  • Map操作

    //访问
    age("Jack")   //访问键值为Jack的元素
    m.getOrElse("Jack",0) //有键值取值,没有返回0
    //更新
    age("AA") = 2  
    age += ("BB" -> 3, "CC"->4)
    age -= "AA" 
    //迭代
    for ((k,v) <- m) {
        println("key is " + k + ",value is" + v)
    }
    age.keySet  //键集合
    age.values  //值集合
    
  • 元组

    • ( ) 里包含一系列值
    • 通过 “._” 取值, 下标从1开始
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值