1. 程式人生 > >scala定義函式的幾種方式

scala定義函式的幾種方式

    scala是面向物件的語言,同時也是函數語言程式設計語言。函式在scala中是一等公民,它和變數一樣,既可以作為其他函式的引數,也可以將函式賦值給一個變數。

    在scala中定義函式有很多方式,不熟悉scala的同學初看之時難免被搞得暈頭轉向。這裡,我試圖按照函式是否有返回值來總結一下函式定義的規律,僅供參考。

    一、有返回值的函式定義:

    1、標準形式(就是函式形參,返回型別,return語句全有)

    def addInt(a:Int, b:Int):Int = {

        var total:Int = a + b

        return total

    }

    括號裡是形參,冒號後面是返回型別,大括號裡是函式體。

    注意,有返回值的函式定義在大括號前必須有等號,不能省略。

    2、省略返回型別和return

    當有返回值的時候,可以不顯式寫出返回型別,scala會自動判斷。同時return也可以省略。上面的函式可以簡寫成:

    def addInt(a:Int, b:Int) = {

        a + b

    }

    scala自動返回函式體中最後一個表示式的值並判斷型別。這裡再多說一句,在java中例如x=1這樣的表示式返回的是1,而在scala中賦值語句返回的是空值。所以,如果你想返回值,不要以賦值語句作為最後一條語句。

    3、省略大括號

    當函式體只有一行語句的時候,可以省略大括號。上面的函式可以再簡寫成:

    def addInt(x:Int, y:Int)  = a + b

    怎麼樣,是不是比java簡潔很多。

    上面3種情況是有返回值的,下面說說無返回值的,更簡單。

    二、無返回值的函式定義

    1、顯式標識無返回值

    def retrunNone(a:Int,b:Int):Unit = {

        print(a + b)

    }

    Unit關鍵字表示函式無返回值。

  2、省略Unit

    和有返回值類似,這裡也可以省略Unit,讓scala自己去知道這個函式無返回值。那麼它是怎麼知道的呢?就是省略等號。當函式定義沒有等號的時候,scala認為這個函式無返回值。

    def retrunNone(a:Int,b:Int){

        print(a + b)

    }

    最後,我們說說也是經常會看到的一種函式定義——匿名函式。

    匿名函式顧名思義,就是沒有名字的函式。它可以作為函式的引數,也可以直接賦值給變數。

    val addInt = (x:Int,y:Int)=> x + y  //將一個函式賦值給變數,呼叫的時候addInt(1,2)

    def myFun(f : (Int,Int) => Int, x:Int, y:Int) = f(x,y) 

    上面這個函式定義了一個匿名函式作為函式的引數,這個匿名函式有兩個Int的引數,返回型別是Int。

    呼叫的時候我們可以將任何滿足匿名函式條件的函式傳入,比如addInt。

    那麼就是myFun(addInt, 1, 2),返回的是3。

    好了,函式定義就先說這麼多,歡迎關注後續文章。