功能

Java不允许在类之外定义函数,而Kotlin和Java都允许在类之外声明函数。

芬兰湾的科特林

f(x: Int): Int{返回x*x + 2*x - 1}让结果= f(13)

Kotlin还提供了一种快捷形式,称为带表达式体的函数,它对简单函数很有用:

fun f(x:Int):Int = x*x + 2*x - 1

斯威夫特

函数f(x: Int) -> Int{返回x*x + 2*x - 1}让结果= f(x:13)

Swift中的参数有一个标签和一个名字。调用函数时,必须为每个参数使用标签。在上面的示例中,x既是唯一参数的标签又是名称。如果你愿意,你可以使用这个语法为参数指定单独的标签和名称:

函数g(输入y: Int) -> Int{返回y*y - 1}让结果= g(输入:42)

标签也可以为空,允许调用者传递参数而不必为其使用标签。

函数g(_ y: Int) -> Int{返回y*y - 1}让结果= g(42)

默认值

这两种语言都允许您声明参数的默认值,这些参数将在函数调用中丢失时使用。

芬兰湾的科特林

fun incr(x: Int, deltax: Int = 1): Int {return x + deltax} var result = incr(42) //结果是43 result = incr(result,2) //结果是45

斯威夫特

function incr(_ x: Int, deltax: Int = 1) -> Int {return x + deltax} var result = incr(42) //结果是43 result = incr(result,deltax:2) //结果是45

Lambda表达式

Lambda表达式最近在现代编程中得到了广泛的赢博体育。Kotlin和Swift都为lambda表达式提供了强大的支持,并使它们易于使用。

在Kotlin和Swift中,函数都是一级语言元素,这意味着它们可以作为其他函数的结果返回,并作为参数传递给函数。

将函数作为参数传递的一个用例是使自定义函数变得更容易。函数定制的一个典型示例是一个过滤函数,它接受两个参数,一个是数据元素列表,另一个是决定是否在结果列表中保留给定元素的函数。下面您将看到如何在Kotlin和Swift中实现这样一个函数的示例。

芬兰湾的科特林

fun filter(list: list <Int>,keep:(Int)->Boolean): list <Int> {var result = mutableelistof <Int>() for(x in list) {if (keep(x)) {result.add(x)}} return result. tolist ()} fun keepPositive(x:Int): Boolean = x >= 0 val originalList = listOf(2,-1,3,4,-6) val filteredList = filter(originalList,keepPositive)

斯威夫特

func filter(list:[Int],keep:(Int)->Bool) -> [Int] {var result = [Int]() for(x in list) {if keep(x) {result.append(x)}}返回结果}func keepPositive(_ x:Int) ->Bool{返回x >= 0} let originalList = [2,1,3,4,-6] let filteredList = filter(list:originalList,keep:keepPositive))

Lambda表达式提供了一种简单的方法来定义和使用函数。下面是一个不同过滤函数的例子,在调用filter()时,我们使用lambda表达式来消除定义过滤函数的需要:

芬兰湾的科特林

let even = filter(originalList,{x->x%2==0})

斯威夫特

Swift中的Lambda表达式被称为闭包。

let even = filter(list:originalList,keep:{x在x%2==0})

这两种语言还提供了一种特殊的快捷语法,称为尾随lambda,用于传递给函数的最后一个参数是lambda表达式的情况:

芬兰湾的科特林

let even = filter(originalList) {x->x%2==0}

斯威夫特

let even = filter(list:originalList) {x中的x%2==0}

最后,两种语言提供的另一种快捷形式是一个更短的lambda表达式,我们不必为lambda声明参数。

芬兰湾的科特林

在lambda只有一个参数的情况下,Kotlin使用关键字it来表示lambda表达式的唯一参数。

let even = filter(originalList){它%2==0}

斯威夫特

Swift使用占位符$1、$2等来表示lambda的参数。

let even = filter(list:originalList) {$1%2==0}