zoukankan      html  css  js  c++  java
  • scala学习笔记3

    一、条件表达式

    在scala中if/else表达式有值,这个值就是跟在if或者else之后的表达式的值。

    scala> val x = 10
    x: Int = 10
    
    scala> val s = if (x>0) 1 else -1
    s: Int = 1

    在scala中每个表达式都有一个类型。举例来说,表达式if(x>0) 1 else -1的类型是Int,因为两个分支的类型都是Int.

    混合表达式的类型是两个分支的类型的公共超类型。例如if(x>0) 1 else "aaa"的类型是Any(Any是Int和String类型的超类型)

    如果else部分缺失了,那么if语句有可能没有值。例如if(x>0) 1

    这种问题的解决方案是引入一个Unit类,写作().不带else的if语句就等同于 if (x>0) 1 else ()

    二、函数式编程

    在面向对象编程中,我们把对象传来传去,在函数式编程中,我们要做的是吧函数传来传去,而这个说成术语,我们把他叫做高阶函数。

    在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处。

    三、scala数据类型

    Byte Short Int Long Float Double Char String Boolean 

    Unit表示无值,和其他语言中void等同

    Null空值或者空引用

    Nothing所有其他类型的子类型,表示没有值

    Any所有类型的超类,任何实例都属于Any类型

    AnyRef所有引用类型的超类

    scala拥有和java一样的数据类型,和java的数据类型的内存布局完全一致,精度也完全一致。

    上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型。在scala是可以对数字等基础类型调用方法的。

    在scala中单行字符串和java中的表达方式完全一样,例如"hello world",另外scala中还有类似于python的多行字符串表示方式,用三个双引号表示分隔符

    四、懒加载变量

    scala方法的最后一行会被return

    scala> val lazyVal = { println("i am too lazy"); 1}
    i am too lazy
    lazyVal: Int = 1

    懒加载的情况:

    scala> lazy val lazyVal = { println("i am too lazy"); 1}
    lazyVal: Int = <lazy>

    scala> val x = lazyVal
    i am too lazy
    x: Int = 1

    五、总结

     

    六、Null,None,Nil,Nothing

    Null:Trait,其唯一实例为null,是AnyRef的子类,不是AnyVal的子类

    Nothing:Trait,所有类型(包括AnyRef和AnyVal)的子类,没有实例

    None:Option的两个子类之一,另一个是Some,用于安全的函数返回值

    unit:五返回值的函数的类型,和java的void对应

    Nil:长度为0的list 

  • 相关阅读:
    HTML学习 day04
    HTML学习 day03
    HTML学习 day02
    原生Js监听普通dom尺寸变化
    JavaScript-获取地址栏参数
    Window 下 MySQL 环境的安装
    JavaScript 中的12种循环遍历方法
    前端PS常用切图技巧
    requirejs教程(一):基本用法
    seajs教程(一):基本用法
  • 原文地址:https://www.cnblogs.com/dongdone/p/5704418.html
Copyright © 2011-2022 走看看