Kotlin系列--Kotlin不思議载荔,突然的想念你

Google在2017的IO大會(huì)上宣布將Kotlin作為Android開(kāi)發(fā)的官方語(yǔ)言。這一重磅消息凹炸,以春風(fēng)又綠江南岸之勢(shì)戏阅,迅速奪取了大多數(shù)Android開(kāi)發(fā)人員的眼球。那么就讓我們以熱烈的歌聲歡迎已經(jīng)七歲的Kotlin登場(chǎng)(鼓掌)啤它。

Kotlin不思議
突然地想念你
彩繪玻璃前的身影
只有孤單變濃郁
Kotlin不思議
突然那么想念你
我?guī)е鴲?ài)抒情的遠(yuǎn)行

--《馬德里》(有刪改)

image.png

老規(guī)矩奕筐,先奉上Kotlin官方網(wǎng)站中文網(wǎng)站,以備查閱变骡。其余的資料匯總离赫,會(huì)在文章末尾附送,資料之多塌碌,亂花漸欲迷人眼渊胸。由于是初次接觸Kotlin,錯(cuò)誤再所難免誊爹,歡迎留言指正批評(píng)蹬刷。

一:Kotlin基本語(yǔ)法

1:定義函數(shù)
(1):這里定義了一個(gè)兩個(gè)整數(shù)之間的乘法的函數(shù),Int注意首字母要大寫频丘,而且在返回值對(duì)應(yīng)的類型办成,應(yīng)該寫在大括號(hào)的前面,而不是緊跟fun之后搂漠。

fun mul(a:Int,b:Int):Int{
    return a*b;
 }

(2):上面只是一種寫法迂卢,還有另外一種返回值類型自動(dòng)推斷的用法

fun mul(a:Int,b:Int)=a*b

(3):當(dāng)我們不需要函數(shù)返回值時(shí),可以用Unit

fun mul(a:Int,b:Int):Unit{
    println("kotlin綿綿無(wú)期")
}

(4) :Unit 還可以省略,于是就出現(xiàn)了這種和自動(dòng)推動(dòng)有些像的寫法

fun mul(a:Int,b:Int) {
    println("長(zhǎng)恨kotlin非我有")
}

2:定義局部變量
(1):下面這種定義的屬于常量而克,只讀靶壮,不可以修改,使用了關(guān)鍵字val员萍。

val kot:Int = 5  //立即賦值
val lin=2   // 推斷賦值
val love:Int  // 如果沒(méi)有明確賦值腾降,那么類型就不可以省略
love=520 // 然后再單獨(dú)給她賦值

(2):下面這種定義屬于變量,使用關(guān)鍵字var

var  you =5 //自動(dòng)推斷出類型
you+=520

3:字符串模版

var love=520
val temp1="love is $love"

love=525
var temp2="${temp1.replace("is","was")},but now is $love"

上面的這段代碼temp2這個(gè)字符串實(shí)際上就是"love was 520,but now is 525".這里的love被賦值了兩次碎绎,第一次是520螃壤,第二次是525.

4:三元操作符沒(méi)有,可以用if取代

val temp = if(args.size==0) "english" else args[0]

不僅變量可以賦值筋帖,就連方法也可以奸晴,但是這種算不算給方法賦值呢?

fun min(a:Int,b:Int)= if(a>b) b else a

5:for循環(huán)

var args=listOf("han","tang","song")
//args 是數(shù)組日麸,下面分三種方式打印數(shù)組中的name元素
for(name in args){
    println("hello,${name}")
    println("hello,$name")
    println("hello,"+name)
} 
println("hello,$args[0]")
println("hello,${args[0]}")

for(index in args.indices){
      println("name at $index is ${args[index]}")
}
var temp=args.size
while (temp>0){
        println("name at ${temp-1} is ${args[temp-1]}")
        temp--
}

可是為什么"hello ,{args[0]}"就正常寄啼,但是"hello,args[0]"就無(wú)法打印出數(shù)組的第一個(gè)元素,而是打印了數(shù)組的地址呢代箭?

6:null 檢查
最讓人們稱道Kotlin之一的就是null check了吧墩划,如果不做null檢查,就會(huì)報(bào)錯(cuò)嗡综。當(dāng)某個(gè)變量允許為null時(shí)走诞,必須在聲明的類型后面添加一個(gè)?。

fun parseInt(temp:String ):Int?{
    try{
        return temp.toInt()
    }catch(e:NumberFormatException){
        println("here is a argument isnt Int")
    }
    return null
}

7:is用來(lái)做類型判斷
當(dāng)用is類型判斷之后蛤高,可以直接使用該變量蚣旱,而不再需要強(qiáng)制轉(zhuǎn)換。

if(name is String){
    val tempLength=name.length
}
//或者
if(name !is String){
      return null
}else{
    return name.length
}

8:when取代了switch

fun describe(obj: Any): String =
when (obj) {
    1          -> "One"
    "Hello"    -> "Greeting"
    is Long    -> "Long"
    !is String -> "Not a string"
    else       -> "Unknown"
}

fun main(args: Array<String>) {
    println(describe(1))
    println(describe("Hello"))
    println(describe(1000L))
    println(describe(2))
    println(describe("other"))
}

9:String字符串和 Array數(shù)組都有l(wèi)ength 屬性可以查看長(zhǎng)度戴陡。

if(name is String){
    val tempLength=name.length
}

**10 官方的一個(gè)例子塞绿,比較難理解 **
(1)怎么在main方法里面,還可以定一個(gè)方法恤批?
(2) println("'obj' string length is{getStringLength(obj) ?: "... err, not a string"} ")這句話怎么理解异吻?

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在該條件分支內(nèi)自動(dòng)轉(zhuǎn)換成 `String`
        return obj.length
    }

    // 在離開(kāi)類型檢測(cè)分支后,`obj` 仍然是 `Any` 類型
    return null
}


fun main(args: Array<String>) {
    fun printLength(obj: Any) {
        println("'$obj' string length is ${getStringLength(obj) ?: "... err, not a string"} ")
    }
    printLength("Incomprehensibilities")
    printLength(1000)

11:區(qū)間迭代
使用 in 運(yùn)算符來(lái)檢測(cè)某個(gè)數(shù)字是否在指定區(qū)間內(nèi):

fun main(args: Array<String>) {
    for (x in 1..10 step 2) {
        print(x)
    }
    for (x in 9 downTo 0 step 3) {
        print(x)
    }
}
// 135799630


fun main(args: Array<String>) {
    val list = listOf("a", "b", "c")

    if (-1 !in 0..list.lastIndex) {
        println("-1 is out of range")
    }
    if (list.size !in list.indices) {
        println("list size is out of valid list indices range too")
    }
}
//-1 is out of range
//list size is out of valid list indices range too

12:使用集合

fun main(args: Array<String>) {
    val items = setOf("apple", "banana", "kiwi")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}
//apple is fine too


fun main(args: Array<String>) {
    val fruits = listOf("banana", "avocado", "apple", "kiwi")
    fruits
    .filter { it.startsWith("a") }
    .sortedBy { it }
    .map { it.toUpperCase() }
    .forEach { println(it) }
}
//APPLE
//AVOCADO

二:Kotlin在Android中的使用喜庞。

Kotlin基礎(chǔ)的學(xué)習(xí)與Android開(kāi)發(fā)的兩相結(jié)合诀浪,我感覺(jué)效率會(huì)快點(diǎn),所以呢延都,下面就試一下Kotlin在Android中的應(yīng)用雷猪。由于我的Android studio目前版本是穩(wěn)定版2.3 ,而官方的需要3.0才能支持Kotlin的使用晰房,但是我們可以在版本2.3上通過(guò)插件的形式求摇,來(lái)率先感受一下射沟。下面是安裝插件的過(guò)程,系統(tǒng)環(huán)境是Mac os与境,工作環(huán)境是Android studio 2.3验夯。


image.png

當(dāng)我們選中來(lái)Kotlin之后,就可以點(diǎn)擊右邊的Install綠色按鈕進(jìn)行安裝摔刁,安裝可能會(huì)需要0到正無(wú)窮大的時(shí)間挥转,關(guān)鍵還是看網(wǎng)速,正常取值范圍應(yīng)該在1到10分鐘之間吧共屈。安裝成功之后扁位,就可以重啟Android Studio。

image.png

重啟完成之后趁俊,就可以點(diǎn)擊項(xiàng)目包,開(kāi)始創(chuàng)建Kotlin語(yǔ)言的的Activity了刑然。


image.png

當(dāng)我們創(chuàng)建了一個(gè)KotlinActivity寺擂,那么這個(gè)項(xiàng)目,就不再是普通的Android項(xiàng)目了泼掠,而是一個(gè)擁有Kotlin的被稱作官方語(yǔ)言的項(xiàng)目了怔软。此時(shí)我們會(huì)在新建的KotlinActivity上面發(fā)現(xiàn)一個(gè)提示,要求我們配置Kotlin择镇。


image.png

當(dāng)我們點(diǎn)擊Configure配置完成Kotlin之后挡逼,就sync project同步一下項(xiàng)目。此時(shí)就會(huì)出現(xiàn)**Refreshing projectName Gradle Project **腻豌,那么我們就可以起來(lái)活動(dòng)一下家坎,倒杯水,看看窗外風(fēng)景吝梅,慢慢等待虱疏。。

花開(kāi)花落苏携,春去秋來(lái)

gradle終于更新完成做瞪。此時(shí)可以一睹KotlinActivity的芳容了。

class Main2Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
    }
}

那么到底都是什么地方出現(xiàn)了變化了呢右冻?AndroidMenifest.xml一切正常装蓬。activity_main2.xml一切正常。App的build.gradle文件中似乎發(fā)生了一些變化

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
……
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

在project的build.gradle中也發(fā)生了一些變化

buildscript {
    ext.kotlin_version = '1.1.2-3'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

系統(tǒng)提示編譯版本和IDE自帶的kotlin_version不一致纱扭,于是就手動(dòng)改了版本號(hào)1.1.2-4改成了1.1.2-3牍帚。然后gradle又開(kāi)始下載了。乳蛾。履羞。

花謝花開(kāi)峦萎,秋去春來(lái)

gradle更新完成之后,我們就可以在KotlinActivity中嘗試寫一下代碼了忆首。

附錄

Kotlin學(xué)習(xí)資料大全爱榔,附送學(xué)習(xí)視頻首發(fā)
一文讓你全面深入了解Kotlin,附優(yōu)秀的開(kāi)源Kotlin的Android項(xiàng)目和視頻

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糙及,一起剝皮案震驚了整個(gè)濱河市详幽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浸锨,老刑警劉巖唇聘,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柱搜,居然都是意外死亡迟郎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門聪蘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宪肖,“玉大人,你說(shuō)我怎么就攤上這事健爬】厍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵娜遵,是天一觀的道長(zhǎng)蜕衡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)设拟,這世上最難降的妖魔是什么慨仿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮纳胧,結(jié)果婚禮上镶骗,老公的妹妹穿的比我還像新娘。我一直安慰自己躲雅,他們只是感情好鼎姊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著相赁,像睡著了一般相寇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钮科,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天唤衫,我揣著相機(jī)與錄音,去河邊找鬼绵脯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腺占。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妙黍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瞧剖?” 一聲冷哼從身側(cè)響起拭嫁,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抓于,沒(méi)想到半個(gè)月后做粤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捉撮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年怕品,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巾遭。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肉康,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恢总,到底是詐尸還是另有隱情,我是刑警寧澤睬愤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布片仿,位于F島的核電站,受9級(jí)特大地震影響尤辱,放射性物質(zhì)發(fā)生泄漏砂豌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一光督、第九天 我趴在偏房一處隱蔽的房頂上張望阳距。 院中可真熱鬧,春花似錦结借、人聲如沸筐摘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咖熟。三九已至,卻和暖如春柳畔,著一層夾襖步出監(jiān)牢的瞬間馍管,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工薪韩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留确沸,地道東北人捌锭。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像罗捎,于是被迫代替她去往敵國(guó)和親观谦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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