1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Kotlin初學(xué)者指南

      建站服務(wù)器 你好,世界

      Kotlin是一種靜態(tài)類型語言,在JVM上運行,并且與現(xiàn)有Java代碼具有100%的互操作性。 對于大多數(shù)Java開發(fā)人員來說,下面的程序應(yīng)該非常熟悉:

      創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供青山湖網(wǎng)站建設(shè)、青山湖做網(wǎng)站、青山湖網(wǎng)站設(shè)計、青山湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、青山湖企業(yè)網(wǎng)站模板建站服務(wù),十余年青山湖做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
      包com。bugsnag。科特林;
      

      公共課App{
      
      publicstaticvoidmain(String[]args){
      
      系統(tǒng)。出。println(“HelloWorld!”);
      
      }
      
      }
      

      以下將在 Kotlin中 打印“Hello World” :

      funmain(args:Array){
      
      println(“HelloWorld!”)
      
      }
      

      一些差異是顯而易見的,例如缺少分號以及我們的代碼是多么簡潔。

      科特林與 Java的

      為了了解Kotlin,讓我們仔細(xì)看看它的功能以及它們與Java的比較。

      無安全性

      我們將首先探索Kotlin最有用的功能之一 - 它支持null安全性。 在Java中,任何對象都可以 null 。 這意味著必須在整個代碼庫中添加運行時檢查以防止 NullPointerException 崩潰,這通常被 語言設(shè)計者 稱為 十億美元的錯誤 。

      靜態(tài)類用戶{
      
      字符串名稱;
      
      }
      

      publicvoidprintUsername(Useruser){
      
      如果(用戶。名字!=空){
      
      FOO(用戶。名。長度());
      
      }
      
      }
      

      在Kotlin中,對象的引用必須是可空的或非空的:

      classUser(varname:String?)//name屬性可以為null
      
      classUser(varname:String)//name屬性不能為null
      

      如果開發(fā)人員試圖將可以為空的對象傳遞給第二個類,則會發(fā)生編譯時錯誤。

      安全呼叫運營商

      以下對大多數(shù)Java開發(fā)人員來說非常熟悉。 所述 user 參數(shù)可以是 null ,所以需要運行時檢查以確保 NPE 避免。

      voidprintUsername(Useruser){
      
      如果(用戶。的getName()!=空){
      
      FOO(用戶。的getName()長度());
      
      }else{
      
      foo(null);//提供一個null整數(shù)
      
      }
      
      }
      

      voidfoo(整數(shù)長度){}
      

      Kotlin可以通過 Safe Call 操作員 簡化這一過程 。 如果 name 不為null,則其長度將作為參數(shù)傳遞。 否則,將傳遞空引用。

      funprintUsername(user:User){
      
      FOO(用戶。名字?。長度)如果user.name為空//返回null
      
      }
      

      funfoo(length:Int?){}
      

      或者,如果在值為null時執(zhí)行代碼沒有意義,我們可以使用 let

      funfoo(nullableUser:User?){
      
      nullableUser?。let{printUsername(nullableUser)}//只打印非空用戶名
      
      }
      
      funprintUsername(user:User){}//User是非空引用
      

      類定義

      與Java相比, Kotlin 類 非常簡潔。 下面的類定義了三個字段,getter和setter超過30行!

      classUser{
      
      最終字符串名稱;
      
      intage=18;
      
      字符串地址;
      

      publicUser(Stringname,intage,Stringaddress){
      
      這個。name=name;
      
      這個。年齡=年齡;
      
      這個。地址=地址;
      
      }
      

      publicStringgetName(){
      
      返回名稱;
      
      }
      

      publicintgetAge(){
      
      回歸年齡;
      
      }
      

      publicvoidsetAge(intage){
      
      這個。年齡=年齡;
      
      }
      

      publicStringgetAddress(){
      
      返回地址;
      
      }
      

      publicvoidsetAddress(Stringaddress){
      
      這個。地址=地址;
      
      }
      
      }
      

      在Kotlin中,我們可以使用一行代碼實現(xiàn)相同的功能。

      classUser(valname:String,varage:Int=18,varaddress:String?)
      

      不可變引用也更容易。 這只是從 var 關(guān)鍵字 切換 到的問題 val

      您可能已經(jīng)注意到,對于Kotlin,可以為參數(shù)提供默認(rèn)值。 這意味著 可以在Kotlin中消除 Java模式,例如 Builder模式 。 這也可以大大減少語法糖所需的代碼量,例如公共API中的方法鏈。

      數(shù)據(jù)類

      如果我們類的主要目的是保存數(shù)據(jù),例如來自API的JSON有效負(fù)載,事情會變得更加簡潔。 在Kotlin中,這些被稱為 數(shù)據(jù)類 。

      dataclassUser(valname:String,varage:Int=18,varaddress:String?)
      

      只需添加 data 關(guān)鍵字會自動生成 equals() hashCode() toString() ,并 copy() 為我們的類實現(xiàn)。 省略了此類的等效Java實現(xiàn),以節(jié)省讀者的理智和帶寬成本。

      類型推斷

      Kotlin使用類型推斷,這進(jìn)一步增加了它的簡潔性。 考慮一下這個Java類:

      classAbstractSingletonProxyFactoryBean{}
      

      publicvoidfoo(){
      
      AbstractSingletonProxyFactoryBeanbean=newAbstractSingletonProxyFactoryBean();
      
      }
      

      而Kotlin中的等價物看起來像這樣:

      classAbstractSingletonProxyFactoryBean
      

      funfoo(){
      
      valbean=AbstractSingletonProxyFactoryBean()//自動推斷類型
      
      }
      

      功能

      類型推斷滲透到整個語言中。 在需要時可以是顯式的或隱式的,如下面定義相同函數(shù)的兩種方法所示:

      intadd(inta,intb){
      
      返回a+b;
      
      }
      

      funadd(a:Int,b:Int):Int{//顯式返回類型
      
      返回a+b
      
      }
      

      funadd(a:Int,b:Int)=a+b//推斷的返回類型
      

      屬性

      Kotlin Properties 簡直太棒了。 考慮以下Java類,它使用訪問器方法定義單個字段:

      classBook{
      
      字符串作者;
      

      StringgetAuthor(){
      
      回歸作者;
      
      }
      

      voidsetAuthor(Stringauthor){
      
      這個。作者=作者;
      
      }
      
      }
      

      書書=新的圖書();
      
      書。setAuthor(“KurtVonnegut”);
      
      系統(tǒng)。出。的println(書。getAuthor());
      

      通過定義聲明 author 屬性 的類,可以在Kotlin的四行中實現(xiàn)等效功能 。 我們將自動生成我們的getter和setter:

      classBook(varauthor:String?)
      
      valbook=書()
      
      書。author=“KurtVonnegut”
      
      println(書。作者)
      

      自定義訪問者

      如果getter和setter需要自定義行為,則可以覆蓋默認(rèn)行為。 例如:

      classPerson(varfirstName:String,varlastName:String){
      

      varfullName:String
      
      get()=“${firstName}${lastName}”
      
      set(value){
      
      valsplit=value。拆分(“”)
      
      firstName=split[0]
      
      lastName=split[1]
      
      }
      
      }
      

      如果我們需要驗證字段或?qū)⑵湎拗茷槟承┹斎耄? 也可以使用 支持字段 :

      set(value){
      
      如果(“圣誕老人”。等于(值))字段=“蠔HO”
      
      }
      

      互通性

      Kotlin的另一個優(yōu)點是可以從同一個項目中的Java代碼中調(diào)用它,反之亦然。

      公共類MyJavaClass{
      
      publicStringauthorName;
      

      publicbooleanisTruthyValue(){
      
      返回true;
      
      }
      
      }
      

      以下Kotlin函數(shù)實例化一個新的Java對象,并使用常規(guī)的Kotlin語法訪問其方法和字段。 如果您想通過向現(xiàn)有Java代碼庫添加少量Kotlin來將腳趾浸入水中,這將非常方便。

      funmain(args:Array){
      
      valobj=MyJavaClass()
      
      的println(OBJ。AUTHORNAME)
      
      的println(OBJ。isTruthyValue)
      
      }
      

      還值得一提的是,Kotlin可以 反編譯回Java ,因此如果您的團(tuán)隊不喜歡該語言或遇到技術(shù)障礙,那么完全可以遷移回來。

      實用方法

      所有Java開發(fā)人員都會非常熟悉實用程序或幫助程序類。 靜態(tài)方法將執(zhí)行Java標(biāo)準(zhǔn)庫中不可用的一些有用操作,并將在代碼庫中調(diào)用:

      classStringUtils{
      
      staticStringsortStringChars(Stringinput){
      
      char[]chars=輸入。toCharArray();
      
      數(shù)組。排序(字符);
      
      returnnewString(chars);
      
      }
      
      }
      
      StringUtils。sortStringChars(“azbso”);//返回“abosz”
      

      在Kotlin中, 擴展 允許將其他功能添加到現(xiàn)有類中, 無需擴展或包裝該類。 例如,以下內(nèi)容將向 該類 添加一個 sortStringChars 函數(shù) String

      有趣的字串。sortStringChars():String{
      
      valchars=這個。toCharArray()
      
      數(shù)組。排序(字符)
      
      returnString(chars)
      
      }
      

      funmain(args:Array){
      
      “azbso”。sortStringChars()//返回“abosz”
      
      }
      

      這導(dǎo)致語法更易讀 - 但要注意。 強大的力量帶來了 巨大的責(zé)任 。

      功能編程

      Kotlin完全支持lambda表達(dá)式。 有限的Java 8支持剛剛 添加到Android中 ,這使得Kotlin的功能編程功能特別受歡迎。

      //為名稱以“J”開頭的所有作者篩選一個列表
      
      valinput=listOf(“JK羅琳”,“查爾斯達(dá)爾文”)
      
      valauthors=輸入。過濾器{作者->作者。startsWith(“J”)}
      
      println(作者)//JK羅琳
      

      也可以 在Collections上 使用諸如 filter map 直接 構(gòu)造 ,這在大多數(shù)Android設(shè)備上目前都不支持。

      funmain(args:Array){
      
      valinput=listOf(“JK羅琳”,“查爾斯達(dá)爾文”,“”)
      
      valauthors=輸入。過濾{!它。isEmpty()}//刪除空值
      
      。map{Author(it)}//將字符串映射到作者對象
      
      。sortedBy{it。name}//按作者名排序
      

      println(authors)//按字母順序打印作者
      
      }
      

      Reactive Streams最近在Android世界中流行起來, RxKotlin 庫 也為Kotlin提供了支持 。

      valcereals=listOf(“KellogsCoroutines”,“CocoaPods”,“LockyCharms”)
      

      谷物。toObservable()
      

      //在后臺線程上執(zhí)行一些密集/復(fù)雜的計算
      

      。subscribeBy(onNext={
      
      println(it)//觀察主線上的每個谷物并打印出來
      
      })
      

      Kotlin Native和Javascript

      Kotlin主要針對JVM,但也可以 使用LLVM工具鏈 轉(zhuǎn)換為Javascript 或編譯為本機代碼。 這兩個目標(biāo)在開發(fā)階段還處于初期階段,但對于希望在整個堆棧中使用一種語言進(jìn)行編程的人來說,這顯示了很大的希望。

      Kotlin Native特別有趣,因為Swift 看起來與Kotlin非常相似 ,這意味著有朝一日可能會在Android和iOS應(yīng)用程序中使用相同的本機代碼庫。

      另一個值得一提的是 Gradle Script Kotlin ,它將靜態(tài)類型的所有好處帶到現(xiàn)有的Gradle DSL和 Spring Boot ,后者為Kotlin提供官方支持 1.5

      潛在的下行

      那么Kotlin的缺點是什么?

      在Android上,應(yīng)用程序大小是一個潛在的問題。 Kotlin目前 為您的應(yīng)用程序大小 增加了大約 1Mb, 并使用了大約7,000種方法,盡管其中大部分都可以被 Proguard 剝離 。 對于傳統(tǒng)的Java桌面應(yīng)用程序來說,這不是什么大不了的事,但對于擁有更多資源限制的移動設(shè)備,這對某些團(tuán)隊來說可能是一個交易破壞者。

      Kotlin并沒有和Java一樣長,因此,識別不良做法和代碼味道要困難得多。 Java有22年的良好實踐和linting工具可供借鑒,而Kotlin卻沒有。 例如,擴展函數(shù)是一個非常強大的功能,但可以輕松地用于應(yīng)該使用類和抽象的地方。

      更人性化的因素是盡管Kotlin與Java非常相似; 學(xué)習(xí)一門新語言總會有一段時間,這會導(dǎo)致生產(chǎn)力暫時下降。

      特別是如果團(tuán)隊中的每個人都在過去十年中成為Java專家,他們可能不愿意放棄并以他們不熟悉的語言重新開始。 外部客戶可能對Kotlin感到不太滿意,因為有人認(rèn)為它與Java一樣久不存在,并且更為未知。

      為什么Kotlin擊敗Java

      讓我們總結(jié)一下Kotlin的一些主要優(yōu)點:

      科特林是 比Java更簡潔

      Lambdas和功能構(gòu)造已經(jīng)開箱即用多年

      100%與現(xiàn)有Java代碼的互操作性

      Kotlin實際上消除了最常見的Java錯誤之一,可怕的 NullPointerException

      IntelliJ IDEA提供出色的工具支持

      這種語言是從頭開始編寫的,因此,它 就像是每天都在其中編程的人設(shè)計的語言

      我們認(rèn)為,由于這些原因,Kotlin在Android上擊敗了Java。 在傳統(tǒng)的Java桌面應(yīng)用程序中,由于Java 8包含可比較的語言功能,例如lambda,流和其他,因此它是一個更接近的競爭。 但是,我們?nèi)匀幌嘈臟otlin的簡潔性在這種情況下獲勝。

      關(guān)于Kotlin入門的建議

      在一篇博客文章中總結(jié)一下編程語言是不可能的,所以如果你或你的團(tuán)隊有興趣使用Kotlin,我們的建議只是試一試!

      最常見的兩條路線是在Kotlin中編寫單元測試或?qū)F(xiàn)有的Utils類轉(zhuǎn)換為Kotlin。 IntelliJ IDEA還提供了一個方便的自動轉(zhuǎn)換快捷方式,可將現(xiàn)有Java代碼遷移到Kotlin。 雖然這不一定會給你最慣用的Kotlin,但它是一種在你熟悉的代碼庫中學(xué)習(xí)語法的好方法。

      最重要的是不斷評估每個人是否對Kotlin的采用水平感到滿意,并確定任何痛點或隱藏的陷阱。

      Kotlin是Java的一個非常好的替代品,如果做得好,它有可能提高開發(fā)人員的快樂,降低代碼庫的復(fù)雜性,并提高業(yè)務(wù)的生產(chǎn)力。


      網(wǎng)頁標(biāo)題:Kotlin初學(xué)者指南
      鏈接URL:http://www.ef60e0e.cn/article/cppjhe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
          1. <ul id="0c1fb"></ul>

            <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
            <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

            太康县| 峨眉山市| 建始县| 若尔盖县| 汾西县| 中宁县| 内江市| 和田市| 望城县| 曲周县| 恩平市| 无为县| 浦江县| 抚顺市| 科技| 澄江县| 都江堰市| 康保县| 玛曲县| 宜阳县| 洛隆县| 海安县| 隆回县| 江永县| 渭源县| 射阳县| 郎溪县| 宣化县| 浪卡子县| 阜新市| 开化县| 伊川县| 辰溪县| 方城县| 莱州市| 民和| 淅川县| 天镇县| 重庆市| 永仁县| 万山特区|