# Scala 函数
函数是一组一起执行一个任务的语句。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。
Scala 有函数和方法,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。更重要的一点是 Scala 函数名可以由以下特殊字符:**+, ++, ~, &,-, -- , \, /, :** 等。
## 函数声明
Scala 函数声明格式如下:
```
def functionName ([参数列表]) : [return type]
```
如果你不写等于号和方法主体,那么方法会被隐式声明为"抽象(abstract)",包含它的类型于是也是一个抽象类型。
## 函数定义
方法定义由一个def 关键字开始,紧接着是可选的参数列表,一个冒号":" 和方法的返回类型,一个等于号"=",最后是方法的主体。
Scala 函数定义格式如下:
```
def functionName ([参数列表]) : [return type] = {
function body
return [expr]
}
```
以上代码中 **return type** 可以是任意合法的 Scala 数据类型。参数列表中的参数可以使用逗号分隔。
以下函数的功能是将两个传入的参数相加并求和:
```
object add{
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
```
如果函数没有返回值,可以返回为 **Unit**,这个类似于 Java 的 **void**, 实例如下:
```
object Hello{
def printMe( ) : Unit = {
println("Hello, Scala!")
}
}
```
## 函数调用
Scala 提供了多种不同的函数调用方式:
以下是调用方法的标准格式:
```
functionName( 参数列表 )
```
如果函数使用了实例的对象来调用,我们可以使用类似java的格式 (使用 **.** 号):
```
[instance.]functionName( 参数列表 )
```
以上实例演示了定义与调用函数的实例:
```
object Test {
def main(args: Array[String]) {
println( "Returned Value : " + addInt(5,7) );
}
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
```
执行以上代码,输出结果为:
```
$ scalac Test.scala
$ scala Test
Returned Value : 12
```
Scala也是一种函数式语言,所以函数是 Scala 语言的核心。以下一些函数概念有助于我们更好的理解 Scala 编程:
| 函数概念解析接案例 |
| --- | --- |
| [函数传名调用(Call-by-Name)](/scala/functions-call-by-name.html) | [指定函数参数名](/scala/functions-named-arguments.html) |
| [函数 - 可变参数](/scala/functions-variable-arguments.html) | [递归函数](/scala/recursion-functions.html) |
| [默认参数值](/scala/functions-default-parameter_values.html) | [高阶函数](/scala/higher-order-functions.html) |
| [内嵌函数](/scala/nested-functions.html) | [匿名函数](/scala/anonymous-functions.html) |
| [偏应用函数](/scala/partially-applied-functions.html) | [函数柯里化(Function Currying)](/scala/currying-functions.html) |
- Scala 教程
- Scala 简介
- Scala 安装
- Scala 基础语法
- Scala 数据类型
- Scala 变量
- Scala 访问修饰符
- Scala 运算符
- Scala IF...ELSE 语句
- Scala 循环
- Scala while 循环
- Scala do...while 循环
- Scala do...while 循环
- Scala break 语句
- Scala 函数
- Scala 函数传名调用(call-by-name)
- Scala 指定函数参数名
- Scala 函数 - 可变参数
- Scala 递归函数
- Scala 高阶函数
- Scala 函数嵌套
- Scala 匿名函数
- Scala 偏应用函数
- Scala 函数柯里化(Currying)
- Scala 闭包
- Scala 字符串
- Scala 数组
- Scala Collection
- Scala List(列表)
- Scala Set(集合)
- Scala Map(映射)
- Scala 元组
- Scala Option(选项)
- Scala Iterator(迭代器)
- Scala 类和对象
- Scala Trait(特征)
- Scala 模式匹配
- Scala 正则表达式
- Scala 异常处理
- Scala 提取器(Extractor)
- Scala 文件 I/O