Scala的函数式风格

Scala的魅力之一就是其函数式编程风格实现。

Scala函数之常规函数


eg. def add ( i:Int, j:Int ) :Int = i + j

(1)def 是函数定义的关键字

(2)add是函数名

(3)小括号内的是参数列表,i:Int是此函数的第一个参数,该参数的名字是i类型是Int,注意Scala是区分大小写的,只能是Int不能写成int;j:Int是第二个参数,参数之间用逗号分隔

(4)参数列表之后是:Int,这表示此函数的返回值的类型,返回值的类型是可以省略的,注意如果返回值类型写成Unit表示void,即没有返回值,如果可以推断出返回值的类型,你也可以不写:Int

(5)然后是=,这个等号是函数体的开始

(6)i+j这里的i+j就是函数的返回值,Scala不需要return,函数体的最后一个表达式就是函数的返回值


Scala函数之匿名函数 


eg. val l=List(1,2,3) l.map(i=>i+9) 

(1)上面代码的第二行map函数的参数就是一个匿名函数,或者是lambda表达式。  

(2)i=>i+9中的=>是参数列表和返回值的分隔符,如果少于两个参数可以不写小括号,后面部分是函数的返回值。

(3)如果函数体包含多行代码可以使用花括号,例如: 

(4)上述匿名函数省略了参数的类型定义和返回值类型的定义,你也可以通过:Type的方式指定类型名。


Scala函数之部分函数


eg. def add(i:Int,j:Int)=i+j 

       val add2=add(2,_:Int) 

       add2(9) 

上面三行代码说明如下 :

(1)第一行定义了一个add函数,实现两个整形数字的相加

(2)第二行是一个常量赋值语句,将add(2,_:Int)赋值给add2,这里的_是一个参数占位符,add2的类型是函数

(3)第三行调用了add2函数

 

Scala函数之调配curried


eg. def devide(i:Int)(j:Int):Int=i/j 

这个函数和上面的函数不同之处在于它的参数列表,是一个参数一个小括号,不是把所有参数都放到一个括号内的。


一些补充:


高阶函数:高阶函数是至少满足下列一个条件的函数:

(1)接受函数作为输入

(2)输出一个函数

在数学中它们也叫做算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。

无类型 lambda 演算,所有函数都是高阶的;在有类型 lambda 演算(大多数函数式编程语言都从中演化而来)中,高阶函数一般是那些函数型别包含多于一个箭头的函数。在函数式编程中,返回另一个函数的高阶函数被称为Curry化的函数。  

在很多函数式编程语言中能找到的 map 函数是高阶函数的一个例子。它接受一个函数 f 作为参数,并返回接受一个列表并应用 f 到它的每个元素的一个函数。


“Lambda 表达式”(lambda expression)是一个匿名函数,即没有函数名的函数。

C#的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:

形参列表=>函数体  

函数体多于一条语句的可用大括号括起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值