Android—手把手Kotiln零基礎(chǔ)教學(含視頻教程)

Android—Kotiln基礎(chǔ)教程(一)

前言

眾所周知Kotlin已經(jīng)成為Android開發(fā)必不可少的開發(fā)語言访娶!

我將帶你從零基礎(chǔ)開始學習Kotlin,從基礎(chǔ)語法的掌握到對協(xié)程的精通,讓你完完全全的從Java百分百轉(zhuǎn)移到Kotlin大軍來叠国!
【2021最新版】Kotlin語言教程——Kotlin入門到精通全系列_嗶哩嗶哩_bilibili
注:在Kotlin基礎(chǔ)教程中圈盔,將會以IDEA作為編譯器渣刷。

本篇內(nèi)容僅僅是語法的初探,不會刻意深入廉嚼。先掌握最基礎(chǔ)的玫镐,然后再循序漸進學習Kotlin。

1. HelloWord

學習一門語言怠噪,滿滿的儀式感還是要有的恐似。

fun main() {

    var hello="Hello word";

    println (hello)

    println( hello.javaClass.name)

    hello="Hello my word"

    println("this is my first kotlin project: $hello")

    val age: Int = 10;

    //age=12 會直接提示語法錯誤!

    val size =12

    println("age-------> $age")
}

我們先看運行效果傍念,再來分析這段代碼

Connected to the target VM, address: '127.0.0.1:61364', transport: 'socket'
Hello word
java.lang.String
this is my first kotlin project: Hello my word
age-------> 10
Disconnected from the target VM, address: '127.0.0.1:61364', transport: 'socket'

這里我們看到:

  • 在Kotlin中定義變量有兩種方式矫夷,分別為valvar
  • 在Kotlin中憋槐,定義變量可采用 var/val 變量名:變量類型=屬性值 格式來定義變量双藕;
  • 也可采用 var/val 變量名=屬性值,通過對應屬性值的類型來確認變量類型阳仔;
  • 通過var定義的變量可以修改對應變量的屬性值忧陪;
  • 而通過val定義的變量則不能修改對應變量的屬性值(與java的final類似);
  • 代碼語句后面可以不用寫分號;
  • 在拼接字符串使用變量的時候近范,需要使用特殊符號$+變量名嘶摊;

這里說到對應變量可以在拼接字符串的時候使用,那么能不能在拼接字符串的時候使用簡單邏輯呢评矩?

2. 條件語句判斷

2.1 if..else..

fun main() {
    val orgin = "Jack"
    val dest = "Rose"
    println("$orgin love $dest")
    val flag = false
    /**
     * ${} 語法 可以在 字符串里面做簡單邏輯處理
     */
    println("Answer is:${if (flag) "我可以" else "你是好人"}")
}

從這里看出在拼接字符串的時候使用了${}語法叶堆,里面就是一個很簡單條件語句判斷。運行看看效果:

Connected to the target VM, address: '127.0.0.1:65152', transport: 'socket'
Jack love Rose
Answer is:你是好人
Disconnected from the target VM, address: '127.0.0.1:65152', transport: 'socket'

從這運行效果上看:當使用了${}語法斥杜,那么對應大括號里面就可以使用簡單的條件語句判斷虱颗。

這里使用了if..else..語法沥匈,那么Java里面的switch..case語法呢?在Kotlin里面是怎樣的忘渔?

2.2 when(xxx){..}

使用示例一:

fun main{
    val school="小學"
    val level:Any=when(school){
        "學前班"->"幼兒"
        "小學"->"少兒"
        "中學"->"青少年"
        "大學"->"成年"
        else ->{
            print("未知")
        }
    }
    println(level)
}

先看看運行效果:

Connected to the target VM, address: '127.0.0.1:49681', transport: 'socket'
少兒
Disconnected from the target VM, address: '127.0.0.1:49681', transport: 'socket'

這里的when可以理解成java的switch高帖;而對應的"學前班",可以理解成對應的case "學前班"辨萍,"幼兒"可以理解成對應case后的邏輯代碼;else可以理解為對應的default锈玉。

使用示例二:

fun main{
    var age=12
    age++
    when (age) {
        in 0..8 -> {
            println("少兒,年齡為:$age")
        }
        in 8..18 -> {
            println("青少年拉背,年齡為:$age")
        }
        else -> {
            println("成年,年齡為:$age")
        }
    }
}

代碼都挺簡單的椅棺,這次換成了表達式犁罩,是否在某個區(qū)間內(nèi)。直接看運行效果:

Connected to the target VM, address: '127.0.0.1:50707', transport: 'socket'
青少年两疚,年齡為:13
Disconnected from the target VM, address: '127.0.0.1:50707', transport: 'socket'

通過這倆個小demo可以看出:在when閉包里,可以使用簡單的表達式來進入不同的業(yè)務邏輯丐巫。

到這為止,已經(jīng)講解了變量定義以及最基礎(chǔ)的條件語句判斷勺美,那么接下來就該輪到方法了递胧。

3. 方法的定義與使用

3.1 示例一:


fun main{
    var helloStr: String = hello("Tom")
    println(helloStr)
    /**
     * 調(diào)用方法時,如果方法有多個參數(shù)赡茸,則可以無序指定 傳值
     */
    helloStr = hello(age = 18, name = "bob")
    println(helloStr)
    add(12, 13.5F)
}

private fun hello(name: String, age: Int = 12): String {
    return "Hi,My Name is $name ,My Age is $age"
}

private fun add(a: Int, b: Float) {
    println("a+b= ${a + b} ")

}

還是依舊先看運行效果:

Connected to the target VM, address: '127.0.0.1:53401', transport: 'socket'
Hi,My Name is Tom ,My Age is 12
Hi,My Name is bob ,My Age is 18
a+b= 25.5 
Disconnected from the target VM, address: '127.0.0.1:53401', transport: 'socket'

從這段代碼可知:

  • 最基礎(chǔ)定義方法的語法:fun+方法名+(各種形參):方法返回值{}
  • 在定義方法的時候遗菠,可以給對應的形參賦初始值操作,當有初始值時舷蒲,使用時可以不用傳對應的形參參數(shù)友多;
  • 在使用對應方法的時候,默認按照形參定義順序依次賦值域滥,當然也能指定賦值纵柿。

3.2 示例二:

var letter = "Mississippi"
fun main{
    var total = "Mississippi".count()
    println(total)
    val totals = letter.count { letter -> letter == 's' }
    println(totals)
}

運行效果

Connected to the target VM, address: '127.0.0.1:54286', transport: 'socket'
11
4
Disconnected from the target VM, address: '127.0.0.1:54286', transport: 'socket'

從這運行效果可以看出:

  • .count()名副其實的計數(shù)
  • .count {}意思就是只會計數(shù)閉包內(nèi)容為true的次數(shù)

敲黑板了F舸隆!接下來重點了Tò稀着倾!

3.3 示例三:

fun main{
    val bb: (age: Int, name: String, sex: Int) -> String = { age: Int, name: String, sex: Int ->
        val holiday = "New Year."
        var str = "Happy $holiday"
        "$str your age= $age ;your name= $name ;your sex= ${if (sex==2) "男" else "女"}" 
    }
    println(bb(12, "張三", 2))
}

按照上面的知識點,對于不懂Kotlin的你闊能會思考:val不是用來定義變量用的么卡者?咋下面怎么變成了方法的調(diào)用?what are you 弄啥呢崇决?這寫法是什么意思?

上面我們說到:定義變量的時候 恒傻,可以指定var/val:后面對應的變量類型。那么我們按照這個語法將后面的這代碼

(age: Int, name: String, sex: Int) -> String = { age: Int, name: String, sex: Int ->
        val holiday = "New Year."

        var str = "Happy $holiday"

        "$str your age= $age ;your name= $name ;your sex= ${if (sex==2) "男" else "女"}"
}

當做是變量bb的變量類型睁枕,接著我們又看這個(age: Int, name: String, sex: Int) -> String感覺像是方法的定義扑庞,只不過這里不是(各種形參):方法返回值譬重,而是(各種形參)->方法返回值罐氨。

如果說它真的是方法的定義,那么它的方法名是什么栅隐?等等!W馇摹!難道是剛剛定義的bb?而后面的方法就是變量bb的變量類型泣棋?后面大括號里的內(nèi)容就是方法的實現(xiàn)?哦Q煊臁!寄摆!

茅塞頓開的你,運行了代碼:

Connected to the target VM, address: '127.0.0.1:57927', transport: 'socket'
Happy New Year. your age= 12 ;your name= 張三 ;your sex= 男
Disconnected from the target VM, address: '127.0.0.1:57927', transport: 'socket'

看了看運行效果婶恼,果然,還真是按自己想象的結(jié)果來的勾邦。

3.4 示例四:

fun main{
    val getDiscountWords: (goodsName: String, hour: Int) -> String = { goodsName: String, hour: Int ->
        val currentYear = 2027
        "$currentYear 年 ,雙11 ${goodsName} 促銷倒計時:${hour} 小時"
    }
    showOnBoard("餐廳紙", getDiscountWords);
}

fun showOnBoard(goodsName: String, showDisCount: (String, Int) -> String) {
    //1-24之間取隨機數(shù)
    val hour: Int = (1..24).shuffled().last()
    println(showDisCount(goodsName, hour))
}

這次你又看到了剛剛那種寫法包归,能夠一眼就能確定getDiscountWords就是一個方法铅歼,并且返回值為String,對應閉包里面的內(nèi)容就是這個方法的實現(xiàn)椎椰。

現(xiàn)在來到showOnBoard這個方法里面。我們看到第一個形參類型為String慨飘;第二個就形參發(fā)現(xiàn)居然是這種類型變量名:(各種形參)->方法返回值,那么我們就該想到休弃,第二個參數(shù)形參類型為方法,所以println(showDisCount(goodsName, hour))這段代碼塔猾,將會調(diào)用上面?zhèn)魅氲?code>getDiscountWords方法稽坤。

現(xiàn)在帶著這樣的分析,看看這個運行效果:

Connected to the target VM, address: '127.0.0.1:59158', transport: 'socket'
2027 年 尿褪,雙11 餐廳紙 促銷倒計時:10 小時
Disconnected from the target VM, address: '127.0.0.1:59158', transport: 'socket'

哈哈哈,完美運行杖玲。

結(jié)束語

最后給大家分享一個Kotlin入門到精通的全系列教程【2021最新版】Kotlin語言教程——Kotlin入門到精通全系列_嗶哩嗶哩_bilibili


【2021最新版】Kotlin語言教程——Kotlin入門到精通全系列_嗶哩嗶哩_bilibili

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夺欲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌些阅,老刑警劉巖斑唬,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缤谎,居然都是意外死亡褐着,警方通過查閱死者的電腦和手機坷澡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門频敛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斟赚,你說我怎么就攤上這事差油∞志” “怎么了蓄喇?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刃鳄。 經(jīng)常有香客問我,道長铲汪,這世上最難降的妖魔是什么罐柳? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮张吉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己创南,他們只是感情好省核,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布稿辙。 她就那樣靜靜地躺著气忠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旧噪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天宦赠,我揣著相機與錄音米母,去河邊找鬼勾扭。 笑死爱咬,一個胖子當著我的面吹牛尺借,可吹牛的內(nèi)容都是我干的精拟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼栅表,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怪瓶?” 一聲冷哼從身側(cè)響起践美,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陨倡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兴革,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蜜唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年庶艾,在試婚紗的時候發(fā)現(xiàn)自己被綠了袁余。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咱揍。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朱转,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤怪与,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站遍愿,受9級特大地震影響耘斩,放射性物質(zhì)發(fā)生泄漏沼填。R本人自食惡果不足惜括授,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薛夜。 院中可真熱鬧,春花似錦梯澜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恢恼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牵署。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工喧半, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挺据。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像扁耐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子块仆,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容