1. Kotlin的优缺点
Kotlin的优势:
-
Kotlin更安全: Kotlin 支持显式地声明 null,并确保开发人员不会遇到可能导致质量问题的空引用异常;
-
代码简洁:不需要分号、很多相同的功能去用Kotlin实现语法更简洁
-
函数式支持: 高阶函数
-
扩展函数:可以直接不需要修改某个类的源码而给这个类添加新的功能
-
内联函数:使用 Lambda 表达式时,这些内联函数让它比 Java 编写的代码运行得更快;
-
支持线程的并发协同:Kotlin中当取消一个线程执行的时候,并不会阻塞任何其他线程,Java 虽然也允许多线程在后台运行,但它的处理机制更加复杂,在处理长时间运行的网络 I/O 或 CPU 密集型任务方面,Kotlin 比 Java 更具有领先优势;
Kotlin的缺陷:
目前,它还不支持很多功能,比如静态成员、通配符类型、非私有字段、Checked Exception、原始类型以及三元运算符等等。
2. 在java项目添加Kotlin支持
3. if的使用
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
在Kotlin中,if是有结果值的表达式,它和java中的三元运算符?类似。在Kotlin中,除了循环(for,do 和 do/while)以外的大多数控制结构都是表达式。另一方面,java的赋值操作是表达式,在Kotlin中是语句。
4. 变量
-
可以省略变量的类型,编译器会分析初始化器表达式的值,并把它的类型作为变量的类型
-
也可以显示的指定类型
-
如果变量没有初始化器,需要显示的指定它的类型
val b = "hello Kotlin" val c : String = "hello Kotlin" val answer : Int
可变变量和不可变变量
| val(来自value)——不可变引用 | 不能在初始化之后再次赋值,对应于java中的final变量 |
| var(来自variable)——可变引用 | 变量的值可以被改变。 |
注意:
-
应该尽可能的使用val关键字来声明所以的Kotlin变量。尽在必要时换为var
-
val指向的对象可能是可变的。
//这是被允许的 val languages = arrayListOf("java") languages.add("Kotlin")
5. 字符串模板
Kotlin让你可以在字符串字面值中引用局部变量,只需在变量名前加上字符$
//相当于java中的字符串拼接(“hello”+name+"!")
val name = "liming"
println("hello , $name!")
还可以引用更复杂的表达式
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
println("the max of two number is ${max(1,2)}")
6. when
when是一个有返回值的表达式,如下写一个直接返回when表达式的表达式体函数,
对应于java中的switch语句,但你不用在每个分支上都写break语句,如果匹配成功,只有对应的分支会执行。
fun getMnemonic(color : Color) =
when (color) {
Color.BLUE -> "red"
Color.INDIGO -> "indigo"
Color.GREEN,Color.ORANGE,Color.RED ->"green" //也可以把多个值合并到一个分支
else -> "else" //相当于switch的default
}
注:Kotlin的when结构比java中的switch强大的多。when允许使用任何对象作为分支条件。
fun mix(c1 : Color, c2 : Color) =
when( setOf(c1,c2) ) {
//setOf是一个函数,可以创建一个Set,它会包含所有指定的函数实参的对象
setOf(Color.RED,Color.ORANGE) -> Color.ORANGE
setOf(Color.INDIGO,Color.GREEN) -> Color.YELLOW
else -> throw Exception("Dirty color")
}
此外还可以使用不带参数的when
fun mixOptimized(c1 : Color, c2:Color) =
when{
c1 == Color.YELLOW && c2 == Color.GREEN -> 1
else -> 2
}
7. is的使用
is用来检查判断一个变量是否是某种类型,和java中的instanceOf类似,并且在用is检查过一个变量是否是某种类型后,后面就不再需要转换它的类型,可以就把它当作你检查过的类型使用。(事实上是编译器为你执行了类型转换)
8. 迭代
在Kotlin中迭代的实现也是靠while和for,其中while的用法和java中基本相同,for循环不同。
区间: 本质上就是两个值之间的间隔。表示如下:
//定义区间
val oneToTen = 1..10
注意:
- 这个区间包含开始值和结束值。
- 不仅可以创建数字区间,还可以创建字符区间。,或者支持实例比较操作的类,如String类型
使用:
-
猜字游戏(when和for循环结合使用)
fun main(args : Array<String>){ for(i in 1..100){ println(fizzBuzz(i)) } } fun fizzBuzz(i : Int) = when{ i % 15 == 0 -> "FizzBuzz" i % 3 == 0 -> "Fizz" i % 5 == 0 -> "Buzz" else -> "$i" } -
进阶使用:从100开始倒着计数并且只计偶数
for( i in 100 downTo 1 step 2){ //100 downTo 1是递减数列,步长为-1.step把步长的绝对值设为2 println(fizzBuzz(i)) }注意:step必须是正的
-
迭代不包含结束值的半区间写法
for( x in 0 until 100){ println(fizzBuzz(x)) } -
迭代map
val binaryReps = TreeMap<Char,String>() //定义map集合 for(c in 'A'..'Z'){ val binary = Integer.toBinaryString(c.toInt()) binaryReps[c] = binary //向map集合添加元素 } for( (letter,binary) in binaryReps){ //map的迭代 println("$letter = $binary") }注意:
- 可以使用map[key]读取值,并使用map[key] = value设置它们,而不需要调用get和set方法。
- binaryReps[c] = binary等价于它的java版本binaryReps.put(c,binary)
- 可以使用 (letter,binary) in binaryReps 这样的扩展语法在迭代集合的同时跟踪当前项的下标
9. “in”和“!in”的使用
使用 in 运算符来检查一个值是否在区间内,使用 !in 来检查这个值是否不在区间内。
fun isLetter(c : Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c : Char) = c !in '0'..'9'
注:
- c in ‘a’…‘z’ 在底层被换成 ‘a’ <= c && c <= ‘z’
- in 检查也适用于集合。
本文介绍了Kotlin编程语言的基础知识,包括其优点如安全性、代码简洁性和函数式特性,如高阶函数、扩展函数和内联函数。此外,还详细讲解了在Java项目中添加Kotlin支持的方法,以及Kotlin的特定语法,如if表达式、变量声明、字符串模板、when表达式、is类型检查、迭代和区间操作,以及in和!in运算符的使用。通过这些内容,读者可以快速掌握Kotlin的基本概念和用法。
—— Kotlin的基础常识&spm=1001.2101.3001.5002&articleId=115917017&d=1&t=3&u=066d0045a42e453da38daee5c795263a)
238

被折叠的 条评论
为什么被折叠?



