欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala学习笔记1——Scala基础

程序员文章站 2024-02-18 12:15:04
...

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开始
相关标签: Scala Scala入门