• 2.Scala-基础


    第2章 Scala 基础

    2.1 声明值和变量

      Scala 声明变量有两种方式,一个用 val,一个用 var。
      val / var 变量名 [: 变量类型] = 变量值
      val 定义的值是不可变的,类似于一个常量。
      
      Scala REPL 默认为匿名变量分配 val。
      var 声明的变量是可变的。

    注:var 和 val 关键字只标识引用本身是否可以指向另一个不同的对象,它们并未
    表明其所引用的对象是否可变。为了减少可变性引起的 bug,应该尽可能地使
    用不可变变量。变量类型可以省略,解析器会根据值进行推断。val 和 var 声
    明变量时都必须初始化。

    2.2 常用类型

    Scala 有 8 种数据类型:Byte、Char、Short、Int、Long、Float、Double
    以及 Boolean。
       Boolean: true 或者 false
       Byte: 8 位, 有符号
       Short: 16 位, 有符号
       Int: 32 位, 有符号
       Long: 64 位, 有符号
       Char: 16 位, 无符号
       Float: 32 位, 单精度浮点数
       Double: 64 位, 双精度浮点数
     
      跟 java 中的数据类型不同,Scala 并不区分基本类型和引用类型,所以这
    些类型都是对象,可以调用相对应的方法。String 直接使用的是
    java.lang.String. 不过,由于 String 实际是一系列 Char 的不可变的集合,
    Scala 中大部分针对集合的操作,都可以用于 String,具体来说,String 的这
    些方法存在于类 scala.collection.immutable.StringOps 中。 由于 String 在需要
    时能隐式转换为 StringOps,因此不需要任何额外的转换,String 就可以使用
    这些方法。
     
      每一种数据类型都有对应的 Rich* 类型,如 RichInt、RichChar 等,为基
    本类型提供了更多的有用操作。

     

      由定义在 Predef 中的隐式转换完成将相应类型转换成 Rich*,然后调用
    Rich*的相对应方法。【隐式转换后面会讲】
      在 Scala 中通过方法进行类型转换,不像 Java 的强制类型转换。
    注:Scala 中没有强制转化,需要通过方法进行类型的转化。
     
      Scala 中,所有的值都是类对象,而所有的类,包括值类型,都最终继承
    自一个统一的根类型 Any。统一类型,是 Scala 的又一大特点。更特别的是,
    Scala 中还定义了几个底层类(Bottom Class),比如 Null 和 Nothing。
     
     
      1) Null 是所有引用类型的子类型,而 Nothing 是所有类型的子类型。Null 类
        只有一个实例对象,null,类似于 Java 中的 null 引用。null 可以赋值给任
    意引用类型,但是不能赋值给值类型。
      2) Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你
        这个方法不会正常返回,而且由于 Nothing 是其他任意类型的子类,他还
    能跟要求返回值的方法兼容。
      3) Unit 类型用来标识过程,也就是没有明确返回值的函数。 由此可见,Unit
        类似于 Java 里的 void。Unit 只有一个实例,(),这个实例也没有实质的意
    义。  

    2.3 算术和操作符重载

      +-*/%可以完成和 Java 中相同的工作,但是有一点区别,他们都是方
    法。你几乎可以用任何符号来为方法命名。
     
        a.方法(b) 等于 a 方法 b
    注:Scala 中没有++、--操作符,需要通过+=、-=。

    2.4 调用函数和方法

    除了方法,Scala 还提供了函数,比如数学函数。
     
    调用函数:
    需要引入函数包 import 包名._  _是通配符,等同于 java 中的*

     

     
    调用静态方法:
    Scala 中没有静态方法,一般通过单例对象或者伴生对象进行实现。

     
    调用对象方法:
    对象实例调用方法

     

    2.5 apply、update 方法

    apply 方法是调用时可以省略方法名的方法。用于构造和获取元素
        “Hello”(4) 等同于 “Hello”.apply(4)
        Array(1,2,3) 等同于 Array.apply(1,2,3)
    在 StringOps 中你会发现一个 def apply(n: Int): Char 方法定义。
    update 方法也是调用时可以省略方法名的方法,用于元素的更新,
        arr(4) = 5 等同于 arr.update(4,5) 

    2.6 option 类型

      Scala 为单个值提供了对象的包装器,表示为那种可能存在也可能不存在
    的值。他只有两个有效的子类对象,一个是 Some,表示某个值,另外一个是
    None,表示为空,通过 Option 的使用,避免了使用 null、空字符串等方式来
    表示缺少某个值的做法。 
    scala> val map1 = Map("name" -> "Lion", "age" -> "22")
    map1: scala.collection.immutable.Map[String,String] = Map(name -> Lion, age -> 22)
    
    scala> map1.get("name")
    res0: Option[String] = Some(Lion)
    
    scala> println(res0.get)
    Lion
    
    scala> map1.get("sex")
    res2: Option[String] = None
    
    scala> map1("name")
    res3: String = Lion
  • 相关阅读:
    windows下安装nginx
    java 32位MD5加密的大写字符串
    eclipse运行maven的jetty插件内存溢出
    Phpstorm Alt+Enter 自动导入类
    CSS 再学习,文本处理
    1406 data too long for column 'content' at row 1
    tp5.1报错 页面错误!请稍后再试
    lnmp升级php
    Tp5,Service使用
    CSS再学习 之背景色 背景图片
  • 原文地址:https://www.cnblogs.com/LXL616/p/11105169.html
Copyright © 2020-2023  润新知