Scala for Backend Engineering & Functional Programming · 课时

作为一等值的函数

学习如何定义函数并将其作为参数传递、从其他函数返回,以及存储在变量中。

第 1 / 3 课11 个步骤

作为一等值的函数 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

函数作为一等值

欢迎学习函数式编程核心知识!在 Scala 中,函数不仅仅是命令;它们是一等值。

这意味着您可以像处理其他数据类型(例如数字或字符串)一样处理函数。这是函数式编程的核心概念!

将函数赋给变量

就像可以将数字赋给 val 一样,您也可以将函数赋给它。在这里,greet 会成为一个保存函数的变量。

请尝试运行这个简单的示例:

object Main {
  def main(args: Array[String]): Unit = {
    val greet = (name: String) => s"Hello, $name!"
    println(greet("Alice"))
  }
}

匿名函数(Lambda)

上一场景中的 (name: String) => s"Hello, $name!" 部分是一个匿名函数,也称为Lambda 表达式。

它是一个没有名称的函数,通常会在需要的位置直接定义。对于快速完成特定任务,它们非常方便。

object Main {
  def main(args: Array[String]): Unit = {
    val add = (x: Int, y: Int) => x + y
    println(s"5 + 3 = ${add(5, 3)}")

    val subtract = (a: Int, b: Int) => a - b
    println(s"10 - 4 = ${subtract(10, 4)}")
  }
}

将函数作为方法参数

函数式编程最强大的特性之一,是将函数作为参数传递给其他函数。这类函数称为高阶函数。

下面的 applyOperation 函数接受两个数字和另一个函数 op。随后,它会使用 op 来组合这两个数字。

object Main {
  def applyOperation(x: Int, y: Int, op: (Int, Int) => Int): Int = {
    op(x, y)
  }

  def main(args: Array[String]): Unit = {
    val add = (a: Int, b: Int) => a + b
    val result = applyOperation(5, 3, add)
    println(s"Result of addition: $result")
  }
}

理解函数类型

请注意上一场景中的类型签名 op: (Int, Int) => Int。

  • (Int, Int):表示该函数接受两个 Int 参数。
  • => Int:表示该函数返回一个 Int。

每个函数都有描述其输入和输出的类型。这有助于 Scala 确保类型安全!

简洁地传递函数

您不必总是先定义一个命名函数。需要函数参数的位置可以直接传入匿名函数。

这样可以让代码更加紧凑、易读,尤其适用于简单操作。

object Main {
  def applyOperation(x: Int, y: Int, op: (Int, Int) => Int): Int = {
    op(x, y)
  }

  def main(args: Array[String]): Unit = {
    val result1 = applyOperation(10, 2, (a: Int, b: Int) => a * b)
    println(s"Multiplication: $result1")

    // Scala can often infer types, making it even shorter!
    val result2 = applyOperation(20, 4, (a, b) => a / b)
    println(s"Division: $result2")
  }
}

函数作为返回值

函数还可以返回其他函数。这听起来可能有些不可思议,但对于创建灵活、可配置的代码非常有用。

在这里,makeMultiplier 会返回一个新函数,该函数将其输入乘以特定的因子。

object Main {
  def makeMultiplier(factor: Int): Int => Int = {
    (x: Int) => x * factor
  }

  def main(args: Array[String]): Unit = {
    val multiplyByTwo = makeMultiplier(2)
    val multiplyByFive = makeMultiplier(5)

    println(s"5 * 2 = ${multiplyByTwo(5)}")
    println(s"10 * 5 = ${multiplyByFive(10)}")
  }
}

理解闭包

当 makeMultiplier 返回一个函数时,该返回的函数会“记住”它创建时的 factor 值。这称为闭包。

即使 makeMultiplier 已经执行完毕,multiplyByTwo 函数仍然“知道”它的因子是 2。

一等函数的优势

为什么将函数作为一等公民来处理如此重要?

  • 灵活性:通过传入不同的函数,可以轻松替换行为。
  • 可复用性:构建可以处理您提供的任意函数的通用函数。
  • 简洁性:能够编写更短、更具表达力的代码,尤其是在使用匿名函数时。
  • 函数式风格:这是函数式编程的基石,可以实现强大的编程模式。

检验您的知识

让我们检查一下您对函数作为一等值的理解。

object Main {
  def execute(x: Int, op: Int => Int): Int = op(x)

  def main(args: Array[String]): Unit = {
    val square = (n: Int) => n * n
    val result = execute(5, square)
    println(result)
  }
}

函数作为值:回顾

做得很好!您已经学习了 Scala 中函数作为一等值这一基本概念。

  • 函数可以赋给变量。
  • 函数可以作为参数传递给其他函数。
  • 函数可以作为结果从其他函数返回。
  • 这使高阶函数和闭包等强大模式成为可能。

这一能力是编写灵活、可复用且富有表达力的 Scala 函数式代码的关键。接下来,我们将深入学习更高级的高阶函数和柯里化!

免费开始

用 AI 导师学习 Scala — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
39
课程
143

常见问题解答

「作为一等值的函数」课时是免费的吗?

是的 — 「作为一等值的函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。

「作为一等值的函数」这节课中我会学到什么?

学习如何定义函数并将其作为参数传递、从其他函数返回,以及存储在变量中。 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「作为一等值的函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 作为一等值的函数
  2. 高阶函数与柯里化
  3. 不可变性与副作用
← 返回 Scala for Backend Engineering & Functional Programming