Scala入门

What ?

  • 函数式编程(erlang,也是)
  • 基于jvm
  • 面向函数的编程语言
  • 运行于JVM,与java代码混编
  • 类型推测(自动推测类型)
  • 并发和分布式(Actor)
  • 特质,特征(类似 java 中 interfaces 和 abstract 结合)
  • 模式匹配(类似 java switch
  • 高阶函数

<!-- more -->

基本类型

  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • string
  • boolean
  • unit 表示 无值 相当于 void
  • null 空引用
  • nothing 所有其它类型的子类型 无任何东西
  • any 所有类型的超类
  • anyref 所有引用类型的超类
  • anyval 所有值类型的超类

变量常量声明

  • var
  • val
    • 常量不可再赋值

Where ?

Why?

  • 为何学习scala
  • 用Scala写的软件

    • jstorm
  • 语言与产品
    • Scala - spark kafka
    • Go - Docker
    • Erlang - RabbitMQ
    • clojure - Storm

How?

环境搭建

  • brew install Scala brew install scalaenv scalaenv install
  • intellj ideal 安装 Scala 插件
  • jdk

语法

  • 集合

    • list
      • map
      • foreach
      • distinct
      • sortby
      • slice
      • /: = foldLeft
      • reduce = redeceLeft
      • filter
      • take
    • 元组 tuple
  • 伴生对象

    • object
    • 静态方法
    • 静态变量
    • 相当于单例
  • 伴生类

    • class
    • 非静态方法
    • 非静态变量
  • 特征特性 trait

  • case class 模式匹配

  • 隐式转换 impliit

    • 方法
    • 参数
  • 高阶函数

    函数的 参数 依然是个 函数

  • 柯里化

    函数参数 用 括号分割,

类和对象

注意点:

  • 建议类名首字母大写 ,方法首字母小写,类和方法 命名建议符合驼峰命名法。
  • scala 中的 object 是单例对象,相当于 java 中的工具 类,可以看成是定义静态的方法的类。object 不可 以传参数。另:Trait 不可以传参数
  • scala 中的 class 类默认可以传参数,默认的传参数就 是默认的构造函数。 重写构造函数的时候,必须要调用默认的构造函数。
  • class 类属性自带 getter ,setter 方法。
  • 使用 object 时,不用 new,使用 class 时要 new ,并且 new 的时候,class 中除了方法不执行,其他都执行。
  • 如果在同一个文件中,object 对象和 class 类的名称 相同,则这个对象就是这个类的伴生对象,这个类 就是这个对象的伴生类。可以互相访问私有变量。

条件

  • if
  • if else
  • if else if else

循环

  1. to 和 until
  2. for
    • for (i <- 1 to 10)
    • 返回值yield
      • var tmp = for ( i <- 1to 10) yield i
    • 嵌套循环
    • for (i <- 1 to 10; j <- 1 to 10)
    • 条件过滤
      • for(i <- 1 to 10; if(布尔表达式))
  3. while
    • do {循环体} while(布尔表达式)
    • while(布尔表达式){循环体}

函数的定义

  • 有参函数
  • 无参函数
  • 递归函数
  • 嵌套函数
  • 匿名函数
  • 偏函数
  • 高阶函数
  • 柯理化函数

注意点:

  • 函数定义语法 用 def 来定义
  • 可以定义传入的参数,要指定传入参数的类型
  • 方法可以写返回值的类型也可以不写,会自动推断,有 时候不能省略,必须写,比如在递归函数中或者函数的 返回值是函数类型的时候。
  • scala 中函数有返回值时,可以写 return,也可以不写 return,会把函数中最后一行当做结果返回。当写 return 时,必须要写函数的返回值。
  • 如果返回值可以一行搞定,可以将{}省略不写
  • 传递给方法的参数可以在方法中使用,并且 scala 规定 方法的传过来的参数为 val 的,不是 var 的。
  • 如果去掉方法体前面的等号,那么这个方法返回类型必 定是 Unit 的。这种说法无论方法体里面什么逻辑都成 立,scala 可以把任意类型转换为 Unit.假设,里面的逻 辑最后返回了一个 string,那么这个返回值会被转换成 Unit,并且值会被丢弃。

字符串

集合

  • 数组
  • list
  • set
  • map
  • 元组

特征trait

模式

Juforg wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!