kotlin让开发更简洁
https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650823035&idx=1&sn=2db4eea9eb569bf375f847f36b1229fa&chksm=80b78de5b7c004f3c3f0a54b535671971f91708def1faecb4b1a4628bb7efb9d00392f11beca&mpshare=1&
0 !!
强制换换
1 $用来字符串拼接
示例:
val juxing = juxing(10, 20)
print("矩形的宽:${juxing.with} 高:${juxing.height}")
2 kt中能用val就用val;Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型,比如没有int只有Int.
2.1 kt的类推导机制使得kt只需要有val,var;而不再需要声明成int string等;但是Kotlin的类型推导机制并不总是可以正常工作的,比如说如果我们对一个变量延迟赋值的话,Kotlin就无法自动推导它的类型了。这时候就需要显式地声明变量类型才行,Kotlin提供了
对这一功能的支持,语法如下所示:
val a: Int = 10
3 var和val区别:
var 可变变量
val 不可变变量,不是常量记忆:final
以下示例改为val就会编译提示语法错误:Val cannot be reassigned(再指定)
fun main() {
var a: Int = 10
a = a * 10
println("a = " + a)
}
标准
var a: Int = 10
a *= 10
println("a = $a")
扩展:
既然val关键字有这么多的束缚,为什么还要用这个关键字呢?干脆全
部用var关键字不就好了。其实Kotlin之所以这样设计,是为了解决Java中final关键字没有被
合理使用的问题。
在Java中,除非你主动在变量前声明了final关键字,否则这个变量就是可变的。然而这并不
是一件好事,当项目变得越来越复杂,参与开发的人越来越多时,你永远不知道一个可变的变
量会在什么时候被谁给修改了,即使它原本不应该被修改,这就经常会导致出现一些很难排查
的问题。因此,一个好的编程习惯是,除非一个变量明确允许被修改,否则都应该给它加上
final关键字。
但是,不是每个人都能养成这种良好的编程习惯。我相信至少有90%的Java程序员没有主动在
变量前加上final关键字的意识,仅仅因为Java对此是不强制的。因此,Kotlin在设计的时候就
采用了和Java完全不同的方式,提供了val和var这两个关键字,必须由开发者主动声明该变量
是可变的还是不可变的。
那么我们应该什么时候使用val,什么时候使用var呢?这里我告诉你一个小诀窍,就是永远优
先使用val来声明一个变量,而当val没有办法满足你的需求时再使用var。这样设计出来的程
序会更加健壮,也更加符合高质量的编码规范。
升华:
既然如此kt语法可进一步优化为默认不写就是val,需要的时候再改为var
4 声明一个方法
fun addNum(param1:Int,param2:Int):Int{
return param1+param2
}
fun maxNum(param1: Int,param2: Int):Int{
return max(param1,param2)
}
调用
fun main() {
var a= 10
a *= 10
println("a = $a")
println("add result:"+addNum(3,4))
}
扩展:
当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写
在函数定义的尾部,中间用等号连接即可。比如我们刚才编写的largerNumber()函数就只有
一行代码,于是可以将代码简化成如下形式:
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
自动类推导机制
fun maxNumSimple(param1: Int,param2: Int)= max(param1,param2)
5 if用法
fun largerNumber(num1: Int, num2: Int): Int {
return if (num1 > num2) {
num1
} else {
num2
}
}
fun largerNumSimple(num1: Int,num2: Int)=if (num1>num2){num1}else{num2}
fun largerNumSimple1(num1: Int,num2: Int)=if (num1>num2)num1 else num2
6 when条件语句:用来简化大量if条件语句的情况
Kotlin中的when语句有点类似于Java中的switch语句,但它又远
比switch语句强大得多。
if
fun getScore(name: String) = if (name == "Tom") {
86
} else if (name == "Jim") {
77
} else if (name == "Jack") {
95
} else if (name == "Lily") {
100
} else {
0
}
when
fun getScoreWhen(name: String)=when(name){
"Tom" ->86
"Jim" ->77
"Jack" ->95
"Lily" ->100
else -> 0
}
7 for循环
0-10
for (i in 0..10)
println(i)
0-9
for (i in 0 until 10)
println(i)
每次间隔2
for (i in 0 until 10 step 2)
println(i)
对应的降序区间
10-0
for (i in 10 downTo 0 )
println(i)
8 面向对象
创建Person类
class Person {
var name=""
var age=0
fun eat(){
println(name+age+"岁,"+"need eat food.")
}
}
调用
val person = Person()
person.name="小红"
person.age=20
person.eat()
结果
小红20岁,need eat food
9 继承:被继承类需要用open关键字声明
现在Student和Person这两个类之间是没有任何继承关系的,想要让Student类继承Person
类,我们得做两件事才行。
第一件事,使Person类可以被继承。可能很多人会觉得奇怪,尤其是有Java编程经验的人。一
个类本身不就是可以被继承的吗?为什么还要使Person类可以被继承呢?这就是Kotlin不同的
地方,在Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于Java中给类声明了final
关键字。之所以这么设计,其实和val关键字的原因是差不多的,因为类和变量一样,最好都是
不可变的,而一个类允许被继承的话,它无法预知子类会如何实现,因此可能就会存在一些未
知的风险。Effective Java这本书中明确提到,如果一个类不是专门为继承而设计的,那么就应
该主动将它加上final声明,禁止它可以被继承。
10 单例类
在Kotlin中创建一个单例类的方式极其简单,只需要将class关键字改成object关键字即可。
现在我们尝试创建一个Kotlin版的Singleton单例类,右击com.example.helloworld包
→New→Kotlin File/Class,在弹出的对话框中输入“Singleton”,创建类型选择“Object”,点
击“OK”完成创建,初始代码如下所示:
object Singleton {
}
添加方法
object Singleton {
fun singletonTest() {
println("singletonTest is called.")
}
}
调用
Singleton.singletonTest()
https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650823035&idx=1&sn=2db4eea9eb569bf375f847f36b1229fa&chksm=80b78de5b7c004f3c3f0a54b535671971f91708def1faecb4b1a4628bb7efb9d00392f11beca&mpshare=1&scene=23&srcid=05194DUD787DZkMiI5SlEPy1#rd
更多推荐


所有评论(0)