美文网首页
scala基础语法

scala基础语法

作者: invincine | 来源:发表于2018-08-21 19:44 被阅读0次

    1.变量

    val:常量 & var:变量

    val定义之后值不可变

    scala> val name = "joey"
    name: String = joey
    
    scala> name
    res0: String = joey
    
    scala> name = "karol"
    <console>:8: error: reassignment to val
           name = "karol"
                ^
    
    scala> name
    res1: String = joey
    

    var定义后值可变

    scala> name
    res1: String = joer
    
    scala> var age = 17
    age: Int = 17
    
    scala> age
    res2: Int = 17
    
    scala> age = 18
    age: Int = 18
    
    scala> age
    res3: Int = 18
    
    定义多个变量:
    scala> var num1,num2 : Double = 0
    num1: Double = 0.0
    num2: Double = 0.0
    

    2.数据类型:

    Scala中没有Java中的原生类型,以下数据类型全部都是对象

    和Java相同的八大数据类型,但第一个字母都是大写

    Byte,Short,Int,Long,Float,Double,Char,Boolean

    和Java不同的数据类型

    String,Nothing,Unit,Any,Null

    注:

    Nothing:表示没有值

    Unit:表示没有返回值,相当于void

    Null:空值或空引用

    Any:任何类型


    3.String类型的声明

    val str = "我是字符串"
    
    若字符串中有特殊符号,可用转义
    val str2 : String = "我是/"字符串/""
     
    也可以使用三个双引号,里面可以包含所有符号,包括换行符
    val str3 : String = """ 我是"字符串""""
    

    4.自动类型推断
    scala可根据变量的赋值类型来自动推断变量的类型
    如上例中:
    var age = 18
    根据18为Int类型,自动推断age为Int类型
    val name = "joey"
    根据"joey"为String,自动推断name为String类型

    也可以像java一样定义变量的类型,写法略有不同:

    scala> var money : Float = 100
    money: Float = 100.0
    
    scala> money
    res4: Float = 100.0
    
    scala> money = 101
    money: Float = 101.0
    
    若不定义money的类型,会自动推断为Int:
    scala> val money = 100
    money: Int = 100
    若想要自动推断为Float,需要这样定义:
    scala> val money = 100f
    money: Float = 100.0
    
    

    5.类型的判断与转换
    常用的两个API:isInstanceOf && asInstanceOf

    isInstanceOf类型判断,返回Boolean:
    scala> val x : String = "255"
    x: String = 255
    
    scala> x.isInstanceOf[Int]
    res10: Boolean = false
    
    asInstanceOf类型转换,与java强转类似:
    scala> val x : Long = 255
    x: Long = 255
    
    scala> x.asInstanceOf[Int]
    res13: Int = 255
    如果不能强转的类型之间,会报ClassCastException,如:
    scala> "333".asInstanceOf[Int]
    java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    

    除了这两个API之外,每种数据类型都会有toString,toInt之类的方法


    6.lazy关键字
    使用lazy关键字声明的变量,仅在第一次调用时,才初始化该变量,分配相应堆栈空间
    使用场景多为读取一些大文件,或者产生IO的变量
    如:

    import scala.io._
    lazy val line = fromFile("D:/data/....").mkString
    执行到此时,不会初始化line变量,也不会进行IO操作
    print(line)
    当第一次调用line时,才会初始化变量,执行相关操作
    

    7.scala的操作符
    scala的操作符基本上和Java的一样,优先级也和java的一样
    有几点特殊的地方:
    a.不支持java中的三元操作符(?:),也不支持++/--
    b.scala的操作符实质上就是对象的函数,如:

    scala> val a = 1
    a: Int = 1
    
    scala> a + 1
    res19: Int = 2
    
    scala> a.+(1)
    res20: Int = 2
    

    所以反过来,类的函数也可以当作操作符来使用

    scala> 1.to(4)
    res23: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4)
    
    scala> 1 to 4
    res24: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4)
    
    scala> 1.max(5)
    res25: Int = 5
    
    scala> 1 max 5
    res26: Int = 5
    

    c.scala几乎所有的操作符都是左连接(从左到右),只有":"结尾的操作符是右连接,如:

    1 :: 2 :: 3 ::Nil
    

    8.scala的表达式
    每行以换行符作为结尾,也可以加上";"
    scala的表达式的返回值就是最后一行的执行结果,如:

    scala> val x = {
         | print("hello")
         | }
    hellox: Unit = ()
    
    scala> val x = {
         | print("hello")
         | "hello"
         | }
    hellox: String = hello
    
    scala> val x = {
         | print("hello")
         | 234
         | }
    hellox: Int = 234
    

    相关文章

      网友评论

          本文标题:scala基础语法

          本文链接:https://www.haomeiwen.com/subject/xsvdiftx.html