Scala

时间:2024-04-25 07:36:15

简介

概述

  1. Scala是Martin Ordersky(马丁.奥德斯科/基)于2001年开始设计的一门支持面向对象(Object-oriented)和函数式编程(Functional Programming)的多范式语言
  2. Scala的官网:www.scala-lang.org
  3. Scala目前为止有3个大版本:Scala1.X~3.X。目前Scala1.X已经停止使用,Scala3.x兼容Scala2.x的所有特性,但是Scala3.x从2021年才推出的版本,也因此,目前大数据中的主流框架Spark、Flink等基本上是基于Scala2.x实现的,所以上课阶段使用Scala2.x
  4. Scala语言即支持脚本方式来运行,也支持编译之后执行。Scala也是通过JVM来编译的,所以Scala代码编译完成之后依然产生的是.class文件,也因此Scala定义的逻辑可以在Java中执行,同样,Java中所有的类都可以被Scala调用
  5. 安装Scala之前,需要先安装JDK1.8

特点

  1. Scala是一门多范式编程语言,支持面向对象和函数式编程两种方式。目前市面上的编程语言可以分为四类:面向对象、面向过程、函数式、泛型式
  2. Scala是一门静态类型(强类型)的编程语言,在编译的时候就需要确定数据类型,定义之后类型不能更改
  3. Scala是一门基于JVM的编程语言,所以和Java是互通的
  4. 相对于Java代码而言,Scala会更加的优雅和简洁

基本语法

注意问题

  1. 在Scala中,认为换行就是新的一行语句,所以省略分号不写
  2. 主函数必须定义到伴生对象object中
  3. Scala的注释方式和Java的注释方式是一模一样的,支持单行注释、多行注释和文档注释
  4. 在Scala中,一共有39个关键字,其中大部分关键字是Java是重合的,例如packageclassfor等,但是Scala同时提供了自有的关键字,例如objectdefyieldvarvalimplicit

标识符命名规则

  1. 由字母、数字和下划线组成
  2. 数字不能开头
  3. 不能使用关键字
  4. 严格区分大小写
  5. 可以使用符号作为标识符,但是如果使用符号作为标识符,那么整个标识符必须全部使用符号
  6. 可以使用反引号来将任意字符串标记为标识符

变量和常量

  1. 变量的定义规则

    var 变量名:数据类型 = 数据
    
  2. 常量的定义规则

    val 常量名:数据类型 = 数据
    
  3. 在Scala中,推荐使用常量

  4. 因为Scala是一门强类型语言,所以变量/常量在赋值之后,数据类型就不能发生变化,因此Scala中,可以根据值自动推导数据类型,所以定义变量/常量的时候,数据类型可以省略

  5. 除非值的类型和声明类型不完全一致,此时才需要显式声明

  6. 不同于Java的地方在于,不支持变量先声明后赋值

控制台输入输出

  1. 在Scala中,推荐使用scala.io.StdIn来从控制台获取数据

  2. 在Scala中,可以使用print或者println来进行输出。println是输出并换行

  3. 如果需要输出多个数据,可以使用+来进行字符串的拼接

    println("name:" + name + ", age:" + age + ", gender:" + gender)
    
  4. Scala中还提供了占位符的方式来输出数据

    printf("name:%s, age:%d, gender:%s\n", name, age, gender)
    
  5. Scala中还提供了数据的引用形式

    println(s"name:$name, age:$age, gender:$gender")
    
  6. 如果需要保留小数位(精确),那么此时需要以f作为开头

    println(f"total:${price * weight}%3.2f")
    
  7. 字符串中支持转义字符

    // 字符串中支持转义字符
    println("hello\tworld")
    // 原样输出字符串
    println(raw"hello\tworld")
    
  8. 输出多行组成的字符串

    val sql =
          """
             |select name,
             |   sum(score)
             |from students
             |group by name;
          """.stripMargin
    println(sql)