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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐