Scala语言基础:开启你的 Flink 之旅

引言:为什么选择Scala?

大家好,我是心海!

Scala(Scalable Language)是一门融合面向对象与函数式编程的现代语言。它像瑞士军刀一样灵活——既能编写简洁的脚本,又能构建复杂的分布式系统。想象你正在组装乐高积木:Scala提供标准积木块(面向对象),同时允许你自定义连接器(函数式特性),让创作随心所欲。

当然,如果你已经有了 python 或者 Java 的编程语言基础,那学起来会更加轻松!

目录

 一、变量:数据的容器

二、函数:执行特定任务的代码块

 三、集合操作:数据处理利器

3.1 三大集合类型

 3.2 实战示例

 四、匿名函数:没有名字的函数

五、高阶函数:操作其他函数的函数

 六、 类和对象:构建程序的蓝图和实例

七、样例类(Case Class):简洁的数据载体

八、隐式转换(Implicit Conversions):让代码更灵活

九、类别系统

结语:开启Flink之旅

 


 一、变量:数据的容器

变量就像一个个贴着标签的盒子,我们可以把数据放进这些盒子里,并通过标签找到它们。在 Scala 中,我们有两种主要的变量类型:val 和 var

  • val:声明后不可变,推荐默认使用,如宇宙中的物理常数

  • var:可变,谨慎使用,如同随时可能修改的日程表

val name = "Alice"  // 不可变,像刻在石碑上的名字
var age = 25        // 可变,像白板上的数字
// name = "Bob"     // 编译错误!
age = 26            // 允许修改

 类型推断 Scala 拥有强大的类型推断能力,很多时候你可以省略变量的类型声明,让编译器自动帮你推断。

val name = "Alice" // 编译器会自动推断 name 是 String 类型
var age = 30 // 编译器会自动推断 age 是 Int 类型

二、函数:执行特定任务的代码块

函数是组织代码的基本单元。它可以接收输入(参数),执行一系列操作,并返回输出(返回值)。

定义函数:

def add(a: Int, b: Int): Int = {
  a + b
}
  • 参数类型必须声明

  • 返回值类型可省略(但推荐显式声明)

在 Scala 中,我们使用 def 关键字来定义函数。

def greet(name: String): String = {
s"Hello, $name!"
}

val greeting = greet("Bob")
println(greeting) // 输出 Hello, Bob!

代码解析:

  • def greet: 声明一个名为 greet 的函数。

  • (name: String): 定义一个名为 name 的参数,类型为 String。

  • : String: 指定函数的返回值类型为 String。

  • = { ... }: 函数体,包含要执行的代码。

  • s"Hello, $name!": 使用字符串插值(string interpolation)构建返回的字符串。s 前缀允许我们在字符串中使用 $变量名 的方式嵌入变量的值。

省略返回值类型: 如果函数体比较简单,Scala 也可以进行返回值类型推断,你可以省略 : String。
 

def add(a: Int, b: Int) = a + b
val sum = add(5, 3)
println(sum) // 输出 8


 

 三、集合操作:数据处理利器

3.1 三大集合类型

Scala 提供了强大且易用的集合库,可以帮助我们高效地处理列表(List)、映射(Map)、集合(Set)等数据结构。

集合类型 特点 示例
List 有序可重复 List(1,2,3,3)→ 1,2,3,3
Set 无序唯一 Set(1,2,2,3) → 1,2,3
Map 键值对 Map("a"->1,"b"->2)

 

  • List(列表):有序的元素集合,允许重复。

    val numbers: List<Int> = List(1, 2, 2, 3, 4)
    println(numbers.head) // 输出第一个元素:1
    println(numbers.tail) // 输出除第一个元素外的列表:List(2, 2, 3, 4)
    println(numbers.length) // 输出列表的长度:5
    

  • Map(映射):存储键值对的集合,键是唯一的。

    val ages: Map<String, Int> = Map("Alice" -> 30, "Bob" -> 25, "Charlie" -> 35)
    println(ages("Alice")) // 输出 Alice 的年龄:30
    println(ages.get("David")) // 输出 Option(None),因为 "David" 不存在
    println(ages.keys) // 输出所有键:Set(Alice, Bob, Charlie)
    println(ages.values) // 输出所有值:Iterable(30, 25, 35)

  • Set(集合):不包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值