Android—Kotiln基础教程(一)
前言
众所周知Kotlin已经成为Android开发必不可少的开发语言!
我将带你从零基础开始学习Kotlin,从基础语法的掌握到对协程的精通,让你完完全全的从Java百分百转移到Kotlin大军来!
【2021最新版】Kotlin语言教程——Kotlin入门到精通全系列_哔哩哔哩_bilibili
注:在Kotlin基础教程中,将会以IDEA作为编译器。
本篇内容仅仅是语法的初探,不会刻意深入。先掌握最基础的,然后再循序渐进学习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")
}
}
}
代码都挺简单的,这次换成了表达式,是否在某个区间内。直接看运行效果:
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
闭包里,可以使用简单的表达式来进入不同的业务逻辑。
到这为止,已经讲解了变量定义以及最基础的条件语句判断,那么接下来就该轮到方法了。
3. 方法的定义与使用
3.1 示例一:
fun main{
var helloStr: String = hello("Tom")
println(helloStr)
/**
* 调用方法时,如果方法有多个参数,则可以无序指定 传值
*/
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'
从这段代码可知:
- 最基础定义方法的语法:
fun+方法名+(各种形参):方法返回值{}
; - 在定义方法的时候,可以给对应的形参赋初始值操作,当有初始值时,使用时可以不用传对应的形参参数;
- 在使用对应方法的时候,默认按照形参定义顺序依次赋值,当然也能指定赋值。
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()
名副其实的计数 - 而
.count {}
意思就是只会计数闭包内容为true
的次数
敲黑板了!!接下来重点了!!
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
不是用来定义变量用的么?咋下面怎么变成了方法的调用?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
感觉像是方法的定义,只不过这里不是(各种形参):方法返回值
,而是(各种形参)->方法返回值
。
如果说它真的是方法的定义,那么它的方法名是什么?等等!!!难道是刚刚定义的bb?而后面的方法就是变量bb的变量类型?后面大括号里的内容就是方法的实现?哦!!!
茅塞顿开的你,运行了代码:
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'
看了看运行效果,果然,还真是按自己想象的结果来的。
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之间取随机数
val hour: Int = (1..24).shuffled().last()
println(showDisCount(goodsName, hour))
}
这次你又看到了刚刚那种写法,能够一眼就能确定getDiscountWords
就是一个方法,并且返回值为String
,对应闭包里面的内容就是这个方法的实现。
现在来到showOnBoard
这个方法里面。我们看到第一个形参类型为String;第二个就形参发现居然是这种类型变量名:(各种形参)->方法返回值
,那么我们就该想到,第二个参数形参类型为方法,所以println(showDisCount(goodsName, hour))
这段代码,将会调用上面传入的getDiscountWords
方法。
现在带着这样的分析,看看这个运行效果:
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'
哈哈哈,完美运行。
结束语
最后给大家分享一个Kotlin入门到精通的全系列教程【2021最新版】Kotlin语言教程——Kotlin入门到精通全系列_哔哩哔哩_bilibili
【2021最新版】Kotlin语言教程——Kotlin入门到精通全系列_哔哩哔哩_bilibili