zoukankan      html  css  js  c++  java
  • Scala快速入门-基础

    HelloWorld

    从HelloWorld开始,使用scala IDE编辑器。

    • 新建scala project
    • 新建scala object
    • 编写HelloWorld
    • run as scala application
    object HelloWorld {
      
      def main(args: Array[String]){
        println("Hello world")
      }
    }
    

    表达式和值

    scala中,几乎所有的元素都是表达式,以val定义常量,var定义变量

    函数

    可以使用def来定义一个函数。函数体是一个表达式。
    使用Block表达式的时候,默认最后一行的返回是返回值,如果不是递归函数,无需显式指定。
    函数还可以像值一样,赋值给var或val。因此函数也可以作为参数传给另一个函数

    //定义函数,函数参数要指定类型签名
    def square(a: Int) = a * a
    def squareWithBlock(a: Int) = {
        a * a
    }
    //定义匿名函数,匿名函数由参数列表,箭头连接符和函数体组成
    val squareVal = (a: Int) => a * a
    
    def addOne(f: Int => Int, arg: Int) = f(arg) + 1
    
    println("square(2):" + square(2))
    println("squareWithBlock(2):" + squareWithBlock(2))
    println("squareVal(2):" + squareVal(2))
    println("addOne(squareVal,2):" + addOne(squareVal, 2))
    

    执行结果:

    square(2):4
    squareWithBlock(2):4
    squareVal(2):4
    addOne(squareVal,2):5
    

    def log(msg: => String)按名称传递,参数只有在实际使用时才计算

    使用class定义类,使用new生成类,构造函数不是特殊的方法,他们是除了类的方法定义之外的代码

    class Calculator(brand: String) {
      /**
       * A constructor.
       */
      val color: String = if (brand == "TI") {
        "blue"
      } else if (brand == "HP") {
        "black"
      } else {
        "white"
      }
    
      // An instance method.
      def add(m: Int, n: Int): Int = m + n
    }
    val calc = new Calculator("HP")
    calc.color
    

    特质(trait)

    特质类似于java中interface,但trait则可以定义方法体,通过with关键字,一个类可以扩展多个特质:
    在scala中重写一个方法是需要指定override关键词的。如果重写一个方法时,没有加上override关键词,那么scala编译会无法通过。

    trait Friendly {
      def greet() = "Hi"
    }
    
    class Dog extends Friendly {
      override def greet() = "Woof"
    }
    
    class HungryDog extends Dog {
      override def greet() = "I'd like to eat my own dog food"
    }
    
    trait ExclamatoryGreeter extends Friendly {
      override def greet() = super.greet() + "!"
    }
    
    var pet: Friendly = new Dog
    println(pet.greet())
    
    pet = new HungryDog
    println(pet.greet())
    
    pet = new Dog with ExclamatoryGreeter
    println(pet.greet())
    
    pet = new HungryDog with ExclamatoryGreeter
    println(pet.greet())
    

    result:
    Woof
    I'd like to eat my own dog food
    Woof!
    I'd like to eat my own dog food!

    类型

    泛型,可以到用方括号语法引入的类型参数

    object

    scala中没有静态方法和属性,全部由singleton object(单例对象)来替代

    参考文献

    http://zh.scala-tour.com/#/welcome
    http://twitter.github.io/scala_school/zh_cn/index.html
    first step to scala
    A Tour of Scala

    广告

    点击Spark加入群Spark,分享更多Spark相关信息

  • 相关阅读:
    python学习之计算机基础详解
    python学习笔记-day03
    名称空间与作用域
    函数参数的应用
    day14
    day13
    函数的基本使用
    day12
    day 09
    文件操作
  • 原文地址:https://www.cnblogs.com/jacksu-tencent/p/4197134.html
Copyright © 2011-2022 走看看