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中定義變量有兩種方式矫夷,分別為
val
和var
; - 在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