<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### Kotlin初體驗 ![](https://img.kancloud.cn/05/b1/05b131acd53d371ea6a8a8aeaa77d5f8_1210x263.png) 聲明了一個簡單的數據類, 它包括了兩個屬性: name 和age 。age 屬性默認為null (如果沒有指定〉。在創建“ 人”的列表時,你省略了Alice 的年齡,所以這里年齡使用了默認值null 。然后你調用了maxBy 函數來查找列表中年紀最大的那個“人”。傳遞給這個函數的lambda 表達式需要一個參數,使用it 作為這個參數的默認名稱。如果age 屬性為null, Elvis 運算符(? : )會返回零。因為Alice 的年齡沒有指定, Elvis 運算符使用零代替了它,所以Bob 幸運地成了年紀最大的人。 ### 靜態類型 Kotlin 和Java 一樣是一種靜態類型的編程語言。這意味著所有表達式的類型在編譯期已經確定了,而編譯器就能驗證對象是否包含了你想訪問的方法或者宇段。 這與動態類型的編程語言形成了鮮明的對比, 后者在口TM 上的代表包括Groovy 和JRuby。這些語言允許你定義可以存儲任何數據類型的變量,或者返回任何數據類型的函數,并在運行時才解析方法和字段引用。這會減少代碼量并增加創建數據結構的靈活性。但它的缺點是,在編譯期不能發現像名字拼寫錯誤這樣的問題,繼而導致運行時的錯誤。 另一方面,與Java 不同的是, Kotlin 不需要你在源代碼中顯式地聲明每個變量的類型。很多情況下,變量類型可以根據上下文來自動判斷,這樣就可以省略類型聲明。這里有一個可能是最簡單的例子: ``` val x = 1 ``` 在聲明這個變量時,由于變量初始化為整型值, Kotlin 自動判斷出它的類型是Int。編譯器這種從上下文推斷變量類型的能力被稱作類型推導。 下面羅列了一些靜態類型帶來的好處: * 性能一一方法調用速度更快,因為不需要在運行時才來判斷調用的是哪個方法。 * 可靠性一一編譯器驗證了程序的正確性,因而運行時崩潰的概率更低。 * 可維護性一一陌生代碼更容易維護,因為你可以看到代碼中用到的對象的類型。 * 工具支持一一靜態類型使IDE 能提供可靠的重構、精確的代碼補全以及其他特性。 ### 函數式和面向對象 作為一個Java 開發者,你一定對面向對象編程的核心概念爛熟于胸,但函數式編程對你來說卻可能很新鮮。函數式編程的核心概念如下: * 頭等函數一一把函數( 一小段行為)當作值使用,可以用變量保存它,把它當作參數傳遞,或者當作其他函數的返回值。 * 不可變性一一使用不可變對象,這保證了它們的狀態在其創建之后不能再變化。 * 無副作用一一使用的是純函數。此類函數在輸入相同時會產生同樣的結果,并且不會修改其他對象的狀態, 也不會和外面的世界交互。 * [ ] **函數式編程風格的代碼能給你帶來什么好處?** * 首先,簡潔。函數式風格的代碼比相應的命令式風格的代碼更優雅、更簡練,因為把函數當作值可以讓你獲得更強 大的抽象能力,從而避免重復代碼。 假設你有兩段類似的代碼,實現相似的任務(例如,在集合中尋找一個匹配的元素)但具體細節略有不同(如何判斷元素是匹配的)。可以輕易地將這段邏輯中公共的部分提取到一個函數中,并將其他不同的部分作為參數傳遞給它。這些參數本身也是函數,但你可以使用一種簡潔的語法來表示這些匿名函數,它被稱作lambda表達式: ![](https://img.kancloud.cn/52/b0/52b095239c64969ae061d983cbbc78c2_926x83.png) * 函數式編程風格的代碼帶來的第二個好處是多線程安全。多線程程序中最大的錯誤來源之一就是,在沒有采用適當同步機制的情況下,在不同的線程上修改同一份數據。如果你使用的是不可變數據結構和純函數,就能保證這樣不安全的修改根本不會發生,也就不需要考慮為其設計復雜的同步方案。 * 最后,函數式編程意味著測試更加容易。沒有副作用的函數可以獨立地進行測試,因為不需要寫大量的設置代碼來構造它們所依賴的整個環境。 Kotlin 擁有豐富的特性集從一開始就支持函數式編程風格,包括: * 函數類型,允許函數接受其他函數作為參數,或者返回其他函數。 * lambda 表達式,讓你用最少的樣板代碼方便地傳遞代碼塊 * 數據類,提供了創建不可變值對象的簡明語法 * 標準庫中包括了豐富的API 集合,讓你用函數式編程風格操作對象和集合 Kotlin 允許你使用函數式編程風格但并沒有強制你使用它。當你需要的時候,可以使用可變數據,也可以編寫帶副作用的函數,而且不需要跳過任何多余的步驟。然后, 毫無疑問的是,在Kotlin 中使用基于接口和類層次結構的庫就像Java 一樣簡單。當編寫Kotlin 代碼的時候,可以結合使用面向對象編程和函數式編程風格,并使用最合適的工具來對付亟待解決的問題。 ### 學好kotlin, 就是全棧工程師 * Web前端 * Web后端 * Android移動端 * Server腳本 * 桌面游戲 ### Kotlin優勢 * 全面支持Lambda表達式 * 數據類(Data classes) * 函數字面量和內聯函數(Function literals & inline functions) * 函數擴展(Extension functions) * 空安全(Null safety) * 智能轉換(Smart casts) * 字符串模板(String templates) * 主構造函數(Primary constructors) * 類委托(Class delegation) * 類型推斷(Type inference) * 單例(Singletons) * 聲明點變量(Declaration-site variance) * 區間表達式(Range expressions) **課程地址**:[\[Android\] kotlin從零基礎到進階](https://ke.qq.com/course/227950) ### **學習方法** **學習一門語言最快的方法就像學習開車開車一樣,就是踩油門,走............,坐在那里一直研究發動機的構造,是學不會開車的。**
                  <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>

                              哎呀哎呀视频在线观看