標籤:scala 函數式編程 大資料
-
Scala將函數當作一等公民;一個函數可以像一個變數一個被使用;
-
函數可以作為輸入參數傳給另一個函數;
-
函數可以定義為一個匿名函數字面量,就像字串字面量;
-
函數可以被賦給一個變數;
-
可以在一個函數內定義函數;
-
函數可以作為另外一個函數的傳回值;
-
在Scala中,使用關鍵字def定義函數;格式如下:
def 函數名(參數1:資料類型,參數2:資料類型):輸出類型 = { 函數體 }
-
例:
def add(firstInput:Int,secondInput:Int):Int = {
val sum = firstInput + secondInput;
return sum;
}
-
上例的簡潔版本如下(省略了輸出類型,scala會自動進行類型推斷):
def add(firstInput:Int,secondInput:Int) = firstInput + secondInput
-
Scala支援不同類型的函數,包括:
-
方法.一個對象的成員函數稱為方法.該方法可以訪問所屬對象的所有欄位;
-
本地函數.在另一個函數或方法內部定義的函數稱為"本地函數";它能訪問外部函數的變數和輸入參數.本地函數只對它所定義的外部函數可見.
-
高階方法(higher-order method).一個將一個函數作為輸入參數的方法,稱為"higher-order method".類似的,一個high-order function是將另一個函數作為輸入的函數.高階方法和高階函數協助減少代碼重複.此外,使用它們還可以寫出更簡潔的代碼;
下面是一個簡單的高階函數:
def encode(n:Int,f:(Int)=>Long):Long = {
val x = n * 10;
f(x);
}
這段代碼輸入兩個參數,返回一個Long類型的值.第一個輸入參數類型是Int.第二個輸入參數類型是一個函數f,此函數f需要一個Int類型輸入參數,並返回一個Long類型值.
-
函數字面量.函數字面量指的是一個未命名或匿名函數.在程式中可以像使用一個字串變數一樣使用它.它還可以作為一個輸入參數傳遞給一個高階方法或高階函數.另外,它也可以被賦給一個變數.下面是一個函數字面量的例子:
(x:Int) => {
x + 100;
}
字面量函數的定義是使用一個小括弧,裡面是輸入參數,後跟一個右箭頭和一個函數體.
上面代碼的一個簡寫版本是: (x:Int) => x + 100;
-
之前定義的高階函數encode可以使用一個函數字面量作為輸入參數,如下所示:
val code = encode(10,(x:Int) => x + 100);
本文出自 “Snail的開發之路” 部落格,請務必保留此出處http://snailbigdata.blog.51cto.com/10952836/1765137
每天學習一點Scala05_函數