Scala语言入门

2022-04-20 09:26:11 浏览数 (1)

前言

学习Scala之前我们先看一个简单的例子

Java

代码语言:javascript复制
List<Product> products = new ArrayList<Product>();
for (Order order : orders) {
  products.addAll(order.getProducts());
}

Scala 的:

代码语言:javascript复制
def products = orders.flatMap(o => o.products)

甚至可以更简洁:

代码语言:javascript复制
def products = orders.flatMap(_.products)

这样我们就可以看出Scala可以写更少的代码来实现同样的功能。

下载

https://www.scala-lang.org/download/2.13.8.html

或者

链接:https://pan.baidu.com/s/1r8qjJ2fE4yqBF82YBIqvHg 提取码:psvm

选择MSI包

注意安装路径不能有空格否则报错

此时不应有 scalabin..libjline-3.21.0.jar。

测试是否可用

代码语言:javascript复制
scala -version

IDEA安装插件

安装后重启IDEA

创建项目

项目上右键

添加Scala SDK

添加我们的测试类

代码如下

代码语言:javascript复制
package cn.psvmc

object Test {
  def main(args: Array[String]): Unit = {
    val str: String = "Hello Scala"
    print(str)
  }
}

语法

get/set

代码语言:javascript复制
class User {
  private var _age = 0;

  // get方法
  def age: Int = _age

  // set方法
  def age_=(a: Int): Unit = {
    _age = a
  }
}

测试

代码语言:javascript复制
object Test {
  def main(args: Array[String]): Unit = {
    var u = new User()
    u.age = 3
    println(u.age)
  }
}

构造器

代码语言:javascript复制
class User {
  private var name = ""
  private var age = 0

  def this(name: String) {
    this()
    this.name = name
  }

  def this(name: String, age: Int) {
    this(name)
    this.age = age
  }

  def info(): Unit = {
    printf("name:%s age is %dn", name, age)
  }
}

测试

代码语言:javascript复制
object Test {
  def main(args: Array[String]): Unit = {
    var u = new User("小明", 18)
    u.info()
  }
}

单例

代码语言:javascript复制
object IDGenerator {
  private var id = 0;

  def newID(): Int = {
    id  = 1
    id
  }
}

测试

代码语言:javascript复制
object Test {
  def main(args: Array[String]): Unit = {
    println(IDGenerator.newID())
    println(IDGenerator.newID())
  }
}

遍历

代码语言:javascript复制
object Test {
  def main(args: Array[String]): Unit = {
    // 遍历List
    val list = List(1, 2, 3)
    for (item <- list) {
      println("item:"   item)
    }

    //遍历Map
    val user = Map("name" -> "小明", "age" -> 18)
    println(user)
    // 方式1
    for ((k, v) <- user) {
      printf("Key:%s Value:%sn", k, v)
    }
    //方式2
    user foreach {
      case (k, v) => printf("Key:%s Value:%sn", k, v)
    }
  }
}

0 人点赞