Kotlin 入門學(xué)習(xí)教程總結(jié)

簡介:

最近公司開展了一個(gè)新項(xiàng)目,自己考量了一下決定用kotlin來寫.那么分享一下我的學(xué)習(xí)歷程,希望對(duì)您有所幫助
  • implementation "org.jetbrains.anko:anko:0.10.8" anko是使用kt語言來編寫的一個(gè)android增強(qiáng)庫,封裝了很多東西,使我們的操作更加簡化.
  • kt有自動(dòng)映射功能,xml寫了id,直接可以在kt中使用,無需findViewByid,直接把控件id當(dāng)作對(duì)象使用即可.

數(shù)據(jù)類型

A:數(shù)據(jù)類型跟java一樣(寫法不一樣)分別都有:
Int Long Folat Double Boolean Char String
轉(zhuǎn)換的話--> i.toInt...其他方法一樣
B:數(shù)組(數(shù)組其實(shí)也是大同小異,只不過String的時(shí)候有一些區(qū)別)
IntArray LongArray FolatArray DoubleArray BooleanArray CharArray
使用: var long:LongArray =longArrayOf(1,2,3)
使用StringArray: var string:Array<String> = arrayOf("哈","哈","大","笑")
C:集合的話跟Java都一些不一樣:kt分為只讀跟可變,就跟val跟var一樣(前面是只讀,后面是可變)
Set MutableSet List MutableList Map MutableMap
使用: var list:MutableList = listOf("1","2","3","4")
Map使用有一些不一樣 (2種方式初始化,個(gè)人喜歡第一種,簡單清晰)

val mapList: Map<String, String> = mapOf(Pair("1", "王濤"), Pair("2", "王飛"), Pair("3", "王偉"))`
`val mapList1: Map<String, String> = mapOf("1" to "王濤", "2" to "王飛", "3" to "王偉")

D:循環(huán): for-in forEach 迭代器遍歷(非常不喜歡)

  for (item in mapList) {
               string = "內(nèi)容: ${item.key} --- ${item.value}"
               toast(string)
           }
           mapList.forEach { key, value ->
                string = "${string} 大家:${key} -- ${value}"
      }

控制語句

A:條件分支:if-else基本沒改動(dòng) swtich defult 改成 when else

     tv.text = if(a == 1){"a 等等于 1"} else {"a 不等于 1"}
               tv.text = when(t.text){
                  "1" -> "2"
                  "2" -> "3"
                  else ->"成功了"
               }

B:等式判斷: kt中String判斷也可以使用 == .還有一種方式是 === 三個(gè)等號(hào),自己去研究一下,是跟clone有關(guān)
C:is 和 in: instanceof == is (校驗(yàn)變量是否為某種類型)
in:java 中沒有這個(gè)東西,他是判斷數(shù)組或者集合中,存不存在此參數(shù) (變量名 in 數(shù)組名)

D:條件循環(huán): 比如從20-100循環(huán)偶數(shù) 恐怕之前的循環(huán)就做不到了.所以這邊有條件循環(huán)

for(i in 10 until 22){ 這是10-20 包括10 但是不包括20} 
for(i in 20 downTo 10) { 循環(huán)遞減 從20遞減到10 其中20跟10都包括}
for(i in 10 .. 20 step 2){每次循環(huán)遞增2,其中包括10跟20,可以把..改成until,這樣就只包括10}

E:跳出多層循環(huán): outside@ while(){....break@outside} outside可以隨便起名字 重要的是@符號(hào)

 fun ss() {
        var i = 1
        outSide@  while (i<100000){
            if (i == 50){
                break@outSide
            }
        }
    }

F:swtich去掉了,改成了when,寫法如下

      when (10) {
            1 -> 0
            2 -> 1
            else -> 2
        }

函數(shù)的基本用法

  • A:Java中使用@Override 表示改函數(shù)重載父類的方法,kt使用小寫的 override 在同一行表達(dá)重載操作
  • B:Java中使用 public 表示該函數(shù)是公公方法,kt默認(rèn)函數(shù)是公開,所以省略了public(省略不代表沒有)
  • C:Java中使用 void 表示改函數(shù)沒有返回參數(shù),kt不存在關(guān)鍵字 void(這個(gè)是沒有)
  • D:kt新增fun,類似于Java中的class
  • E:Java的參數(shù)格式是:(變量類型 變量名稱 舉例:String str) kt(變量名稱:變量類型 舉例:str:String)
  • F:kt引入了空安全機(jī)制,如果某個(gè)變量允許為空,就需要在變量類型后面加個(gè)? val string: String? = "123"
       over fun onCreate(...)
            fun getText(str:String,age:Int):String{
                    return string
            }   
       //這樣就不用全部傳入了 只需要傳入age
            fun getText(age:String,str: String = "王濤", inte: Int = 2): String {
                    return "$str 第 $inte 次進(jìn)入"
            }

可變參數(shù)

  • Java中是(String... args) kt中是(vararg args:String)
            fun getVarText(vararg other: String): String {
                var str = ""
                return str
            }

泛型函數(shù)

  • 上面都說傳入基本類型的比如(int,String,Double...),在開中傳入集合,數(shù)組等也是很有必要的
      fun <T> getListVararg(vararg other: T): String {
                var str = ""
                for (item in other) {
                    str = "$str 哈嘍- $item \n"
                }
                return str
            }

內(nèi)聯(lián)函數(shù)
-必須這么寫,將<T>改為<reified T:Number>,同時(shí)必須在fun前面添加關(guān)鍵字inline 他跟上面的泛型函數(shù)的區(qū)別是,不支持多個(gè),并且可以返回 T 類型

        //這是Map
             inline fun <reified T : String> getTextMap(other: Map<T, T>): String {
                var str = ""
                for (item in other) {
                    str = "$str 哈嘍- ${item.key} -- ${item.value} \n"
                }
                return str
            }
            //這是List (返回list<T> 范型函數(shù)沒辦法返回List<T>)
            inline fun <reified T : String> getTextList(other: List<T>): List<T> {
                return other
            }

簡化函數(shù)

  • 我認(rèn)為他就是一個(gè)遞增循環(huán)(自己調(diào)用自己),適合54321這種方式來用簡化函數(shù)
        //如果n==1, 輸出的結(jié)果就是 5*4*3*2*1的結(jié)果
        fun factorial(n:Int):Int = if(n<1)n else n*factorial(n-1) 

同步j(luò)ava

在方法后面加入 @JvmOverloads constructor 這段代碼 他就會(huì)給我去自動(dòng)的同步j(luò)ava
companion object {} == static 同時(shí){}里面可以方靜態(tài)方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,669評(píng)論 9 118
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,115評(píng)論 2 9
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,506評(píng)論 0 13
  • Google在今年的IO大會(huì)上宣布,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 77,186評(píng)論 31 489
  • 又來了,令人不快的眼神和嘴角的笑意: “你連這個(gè)都不知道?” 我的視線停留在他臉上,語氣陡然冷下來:“各自喜歡...
    bikkkke閱讀 301評(píng)論 0 0

友情鏈接更多精彩內(nèi)容