<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ### Kotlin相比于Java | 相比于java | 描述??????????????????| | ------- | ------------------- | | 新增??????| 表達式函數可以去掉方法大括號,代碼更清爽 | ### 表達式函數體 #### **轉換為表達式函數體** 說到函數,還記得我們前面講過的4種函數類型吧?“**函數一共就有4種類型,無參無返回值、無參有返回值、有參無返回值、有參有返回值**”。參考代碼: ~~~ //無參無返回值 fun myFun1() { ??? println("outerFun") } ? //無參有返回值 fun myFun2(): String { ??? return"innerFun" } ? //有參無返回值 fun myFun3(content: String) { ???println(content) } ? //有參有返回值 fun myFun4(content: String): String { ??? return content } 當然,沒有返回值的函數,也可以明確指定返回值類型為Unit。 //無參無返回值 fun myFun1():Unit{ ??? println("outerFun") } ? //有參無返回值 fun myFun3(content: String) :Unit { ??? println(content) } ~~~ 針對上面的4個方法,我們把鼠標放到代碼第3行,函數體里面的【println("outerFun") 】,然后按alt+Enter快捷鍵,就會看到如下提示,參考截圖: ![](https://box.kancloud.cn/1514f2d9eb8717f677d6c6e2df5d8884_633x223.gif) 我們選中`“Convert to expression body”`,對4個方法進行轉換,得到如下結果如下 ![](https://box.kancloud.cn/275784e8f384c7536c905e7127fac4d4_685x379.png) #### **表達式函數體定義** 那什么是表達式函數體呢?現在應該已經很明白了,就是**函數體之前放在大括號里面,現在可以放在等號右邊**。 是不是所有的函數都能用表達式函數體呢?不是。**函數體只有一行代碼的時候,才能用表達式函數體**。上面的4個函數正好都能轉換為表達式函數體,不過是碰巧上面4個方法的函數體內容就只有一行。**如果方法體不止一行,就沒法轉換為表達式函數體**,參考代碼: ![](https://box.kancloud.cn/b9542eaa39208bbf05e69f12b90564ae_682x169.png) 我們發現,這個時候就沒有`“Convert to expression body”`提示了。 #### **表達式函數體作用** 表達式函數體作用是什么呢? 1. 針對函數體只有一行代碼的情況,多了一種表達形式。 2. 針對函數體只有一行代碼的情況,代碼顯得更加清爽,沒有了大括號。 3. 表達式函數體支持返回類型自動推斷。顯得比較智能。 針對第3點優點,參考代碼: ![](https://box.kancloud.cn/0cc42d8cd05d4a0b94ff17c73fa4d769_690x193.png) 上面2個方法都是編譯通過的。 所以,【**Kotlin相比于Java,使用表達式函數體,簡化函數方法體只有一行代碼情況下函數的定義**】 ### 單表達式函數 當函數返回單個表達式時,可以省略花括號并且在`=`符號之后指定代碼體即可: ``` fun double(x: Int): Int = x * 2 ``` 當返回值類型可由編譯器推斷時,顯式聲明返回類型是[可選](http://www.kotlincn.net/docs/reference/functions.html#顯式返回類型)的: ``` fun double(x: Int) = x * 2 ``` * [ ] **為什么有些函數可以不聲明返回類型**? 作為一門靜態類型語言, Kotlin 不是要求每個表達式都應該在編譯期具有類型嗎?事實上,每個變量和表達式都有類型,每個函數都有返回類型。但是**對表達式體函數來說,編譯器會分析作為函數體的表達式,并把它的類型作為函數的返回類型,即使沒有顯式地寫出來。這種分析通常被稱作類型推導。** >[danger]注意,只有表達式體函數的返回類型可以省略。對于有返回值的代碼塊體函數,必須顯式地寫出返回類型和return 語句。這是刻意的選擇。真實項目中的函數一般很長且可以包含多條return 語句,顯式地寫出返回類型和return 語句能幫助你快速地理解函數能返回的是什么。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看