Scala—函数用法详解(scala函数初步)

Scala

Scala-函数初步

1. 函数基本语法

Scala 中的函数是一种独立的代码块------接受一些输入(称为参数),并返回一个输出

scala 复制代码
def 函数名(参数列表): 返回类型 = {
  // 函数体
  // 返回值
}
  • def:用来定义函数。
  • 函数名:函数的名称。
  • 参数列表:函数接收的输入参数,可以有多个,用逗号分隔。
  • 返回类型:函数的返回值类型,必须显式声明。
  • 函数体:包含函数执行的代码逻辑。

Demo🤣🤣🤣:

定义 add 函数,接受两个整数参数 ab,返回它们的和,返回类型是 Int


2. 函数和方法的区别

  • 函数 :函数通常是指一段独立的代码,接受输入并返回输出。Scala 中的函数在定义时是独立的代码块。
    • 函数是独立的,可以作为值传递。
    • 函数是纯的,没有副作用
    • 函数可以嵌套定义

  • 方法方法是附属于对象或类的函数 。它通常是某个类的成员 ,并且可以访问类的字段和其他成员。Scala 中的所有方法都是函数,但并非所有函数都是方法。
    • 方法是类的一部分,定义在类或对象中。
    • 方法可以访问类的状态,可以有副作用。
    • 方法可以进行重载和重写

Demo🤣🤣🤣:

Tips:

(1)Scala语言可以在任何的语法结构中声明任何的语法

Demo🤣🤣🤣:

在对象中定义函数:

scala 复制代码
// 在对象中定义函数
object MyFunctions {
  def add(a: Int, b: Int): Int = {
    a + b
  }
}

val result = MyFunctions.add(3, 4) // 结果是 7

在类中定义方法:

scala 复制代码
// 在类中定义方法
class Calculator {
  def add(a: Int, b: Int): Int = {
    a + b
  }
}

val calc = new Calculator
val result = calc.add(3, 4) // 结果是 7

(2)函数没有重载和重写的概念;方法可以进行重载和重写
  • 重载(Overloading) 是指方法名相同,但参数不同的方法。Scala 支持方法的重载。
  • 重写(Overriding) 是指在子类中重新定义父类的方法,覆盖父类的方法。Scala 也支持方法的重写,但需要使用 override 关键字。

Demo🤣🤣🤣:

方法重载:

scala 复制代码
class MathOperations {
  def add(a: Int, b: Int): Int = a + b

  def add(a: Double, b: Double): Double = a + b
}

val mathOps = new MathOperations
val intResult = mathOps.add(3, 4) // 结果是 7
val doubleResult = mathOps.add(3.5, 4.5) // 结果是 8.0

方法重写:

scala 复制代码
class Animal {
  def speak: String = "Animal speaks"
}

class Dog extends Animal {
  override def speak: String = "Dog barks"
}

val dog = new Dog
val result = dog.speak // 结果是 "Dog barks"

函数没有重载和重写的概念

scala 复制代码
// 定义一个函数
val add: (Int, Int) => Int = (a, b) => a + b

// 不能重载函数
// val add: (Double, Double) => Double = (a, b) => a + b // 这将导致编译错误

(3)Scala中函数可以嵌套定义

在 Scala 中,函数可以嵌套定义,即在一个函数内部定义另一个函数。

Demo🤣🤣🤣:


特性 函数 方法
定义位置 可以在类或对象外部定义 定义在类或对象内部
是否与类实例相关联 不依赖于类实例(可以独立存在) 依赖于类的实例,必须通过实例调用(除非是静态方法)
是否可以重载 不支持重载 支持重载(可以定义多个相同名称、不同参数的方法)
是否可以重写 不支持重写 支持重写(子类可以覆盖父类方法)
嵌套定义 可以嵌套函数 不支持直接嵌套方法(方法通常依赖于类的结构)
用途 更适合用于函数式编程或与类无关的逻辑操作 更适合在面向对象编程中进行状态管理和类行为定义

3. 函数定义

(1)无参,无返回值:

(2)无参,有返回值:

(3)有参,无返回值:

(4)函数4:有参,有返回值:

(5) 函数5:多参,无返回值:

(6)函数6:多参,有返回值:


4. 函数参数

(1)默认参数

如果参数有默认值,可以在函数定义时指定默认值,在调用函数时可以省略这个参数:

(2)命名参数

在调用函数时,通过命名参数来明确指定某个参数的值,顺序可以不一致:

(3) 可变参数

在定义函数时,使用 * 来表示可变参数。可变参数------允许传递任意数量的参数。

* 符号表示,函数体内可以将其视为一个数组:

  • 可变参数必须是函数参数列表中的最后一个参数。
  • 可变参数可以接收零个或多个参数

5. Scala函数至简原则

Scala 提倡函数至简原则(Function Simplicity Principle),即在函数设计上保持简洁和直观。

  • (1)return 可以省略,Scala 会使用函数体的最后一行代码作为返回值

在 Scala 中,函数体的最后一行代码会被隐式地作为返回值,通常不需要显式使用 return 关键字。

  • (2)如果函数体只有一行代码,可以省略花括号

如果函数体只有一行代码,可以省略花括号,代码更加简洁。

  • (3)返回值类型如果能够推断出来,可以省略(:和返回值类型一起省略)

Scala 具有类型推断能力,如果编译器能够推断出返回值类型,可以省略返回值类型。

  • (4)如果有 return,则不能省略返回值类型,必须指定

如果函数体中使用了 return 关键字,必须显式指定返回值类型。


  • (5)如果函数明确声明 unit,那么即使函数体中使用 return 关键字也不起作用

如果函数的返回类型声明为 Unit,即使使用 return 关键字,也不会影响函数的行为。

  • (6)Scala 如果期望是无返回值类型,可以省略等号

如果函数的返回类型是 Unit,可以省略等号 =

  • (7)如果函数无参,但是声明了参数列表,那么调用时,小括号可加可不加

如果函数没有参数,但在定义时声明了空的参数列表,调用时可以省略或保留小括号。

  • 8)如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略

如果函数没有参数列表,定义时可以省略小括号,调用时也必须省略小括号。

  • (9)如果不关心名称,只关心逻辑处理,那么函数名(def)可以省略

如果只关心逻辑处理而不关心函数名称,可以使用匿名函数(Lambda 表达式)。


整理不易 列位 三连支持一下哈~🤣🤣🤣

相关推荐
一路冰雨3 分钟前
Qt打开文件对话框选择文件之后弹出两次
开发语言·qt
松树戈11 分钟前
JS推荐实践
开发语言·javascript·ecmascript
瑞雨溪14 分钟前
java中的this关键字
java·开发语言
MapleLea1f37 分钟前
26届JAVA 学习日记——Day14
java·开发语言·学习·tcp/ip·程序人生·学习方法
小汤猿人类38 分钟前
SpringTask
开发语言·python
爪哇学长1 小时前
解锁API的无限潜力:RESTful、SOAP、GraphQL和Webhooks的应用前景
java·开发语言·后端·restful·graphql
老赵的博客1 小时前
QT 自定义界面布局要诀
开发语言·qt
p-knowledge1 小时前
建造者模式(Builder Pattern)
java·开发语言·建造者模式
网络安全(king)1 小时前
【Python】【持续项目】Python-安全项目搜集
开发语言·python·安全
工业甲酰苯胺1 小时前
Python脚本消费多个Kafka topic
开发语言·python·kafka