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 

  • 相关阅读:
    第1件事 产品经理工作的8个核心步骤
    产品心经:产品经理应该知道的60件事
    漫画中国式项目管理摘录
    敏捷落地的会议和工具
    UML的9种图例解析
    UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)-转
    UML类图与类的关系详解
    eclipse-4.4.2安装Groovy插件(其他版本eclipse可参考)
    Eclipse 安装Groovy插件
    Groovy安装与入门实例
  • 原文地址:https://www.cnblogs.com/dongdone/p/5704418.html
Copyright © 2011-2022 走看看