读《第一行代码 第3版》第2章知识点简单总结

Kotlin语言简介

Kotlin是由JetBrains公司开发与设计的,早在2011年JetBrains就公布了Kotlin的第一个版本,并在2012年将其开源。

2016年,kotlin发布了1.0正式版。

 

Kotlin语言的优点

1.kotlin的语法更加简洁(对于同样的功能,使用kotlin开发的代码量可能会比使用Java开发的减少50%甚至更多)。

2.Kotlin的语法更加高级,使得开发效率大大提升。

3.几乎杜绝了空指针。

4.Kotlin和Java是100%兼容的。

 

变量val和var关键字

val(value的简写)用来声明一个不可变的变量。

var(variable的简写)用来声明一个可变的变量。

例如:

fun main() {
    val a = 10
    println("a = $a")

    var b = 10
    b *= 10
    println("b = $b")//a等于a乘以10的积
}

运行结果:

读《第一行代码 第3版》第2章知识点简单总结_第1张图片

注意:Kotlin每一行代码的结尾不用加分号。

 

Java和Kotlin数据类型对照表

Java基本数据类型 Kotlin对象数据类型 数据类型说明
int

Int

整型
long Long 长整型

short

Short 短整型
float Float 单精度浮点型
double Double 双精度浮点型
boolean Boolean 布尔型
char Char 字符型
byte Byte 字节型

 

 

 

 

 

 

 

 

 

建议:优先使用val,当val没有办法满足你的需求时再使用var。

 

max()函数找出两个数中的最大值

/**
 * max()函数:kotlin提供的一个内置函数
 * 作用:返回两个参数中最大的数
 */
fun largerNumber(num1: Int, num2: Int): Int {
    return max(num1, num2)
}

使用如:

println(largerNumber(num1 = 666, num2 = 999))//max()函数找出两个数中的最大值

打印:

 

min函数找出两个数中的最小值

//min()函数
fun minNumber(num1: Int, num2: Int): Int = min(num1, num2)

使用如:

println(minNumber(num1 = -10, num2 = -20))//min函数找出两个数中的最小值

打印:

 

if条件语句比大小效果相当于max()函数

/**
 * if条件语句
 */
fun largerNumberIf(num1: Int, num2: Int): Int {
    return if (num1 > num2) {
        num1
    } else {
        num2
    }
}

使用如:

println(largerNumberIf(num1 = 886, num2 = 688))//if条件语句比大小效果相当于max()函数

打印:

 

单if简化比大小效果相当于max()函数

/**
 * if条件语句简化
 */
fun largerNumberIfSimplify(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

使用如:

println(largerNumberIfSimplify(num1 = 123, num2 = 321))//单if简化比大小效果相当于max()函数

打印:

 

when条件语句

/**
 * when条件语句
 */
fun getScore(name: String) = when {
    name.startsWith("Tom") -> 86//以tom开头的都会打印86
    name == "Jim" -> 77
    name == "Jack" -> 95
    name == "Lily" -> 100
    else -> 0
}

使用如:

println(getScore("Tom a"))

打印:

 

kotlin中的for循环

for (i in 0..10){//kotlin中的for循环
        println(i)
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第2张图片

 

for循环中until关键字(左闭右开)和step关键字(步长)实现i=i+2效果

 for (i in 0 until 10 step 2){//for循环中until关键字(左闭右开)和step关键字(步长)实现i=i+2效果
        println(i)
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第3张图片

 

for循环中downTo关键字(降序)和step关键字(步长)实现10到1的双数打印

for (i in 10 downTo 1 step 2) {//for循环中downTo关键字(降序)和step关键字(步长)实现10到1的双数打印
        println(i)
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第4张图片

 

继承与实现

/**
 * Student类继承Person类实现Study接口
 */
class Student(sno: String, grade: Int, name: String, age: Int) : Person(name, age), Study {

    init {//init结构体执行逻辑操作
        println("My name is $name,I am $age years old.")
        println("My sno is $sno,grade is $grade.")
    }

    override fun readBooks() {
        println("$name is reading.")
    }

    override fun doHomework() {
        println("$name is doing homework.")
    }
}
/**
 * Person类
 */
open class Person(val name: String, val age: Int) {//加上open关键字才可以被其他类继承

}
/**
 * Study接口
 */
interface Study {
    fun readBooks()
    fun doHomework()
}

使用如:

val student = Student("202001", 1, "Jack", 18)
    student.readBooks()
    student.doHomework()

打印:

读《第一行代码 第3版》第2章知识点简单总结_第5张图片

 

数据类中的data关键字

新建一个Cellphone为名的Kotlin类并加上data关键字如下:

package com.example.kt_demo

/**
 * data关键字
 */
data class Cellphone(val brand: String, val price: Double)

使用如:

 val cellphone1 = Cellphone("Samsung", 1299.99)
 val cellphone2 = Cellphone("Samsung", 1299.99)
 println(cellphone1)
 println("cellphone1 equals cellphone2 " + (cellphone1 == cellphone2))

打印:

读《第一行代码 第3版》第2章知识点简单总结_第6张图片

 

/**
 * for-in 和 listof()函数结合使用
 * 注意:listof()创建的是一个不可变的集合
 */
 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
 for (fruit in list) {
     println(fruit)
 }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第7张图片

/**
     * 创建可变集合用mutableListOf()函数
     */
    val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
    list.add("Watermelon")
    for (fruit in list) {
        println(fruit)
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第8张图片

/**
     * mapOf()函数和for-in循环
     */
    val map = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3, "Pear" to 4, "Grape" to 5)
    for ((fruit, number) in map) {
        println("fruit is $fruit,number is $number")
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第9张图片

/**
     * 利用Lambda表达式遍历找出最长的水果名
     */
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val maxLengthFruit = list.maxBy { it.length }
    println(maxLengthFruit)

打印:

/**
     * 通过Lambda表达式映射把集合中的字母变大写
     */
    val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val newList = list.map { it.toUpperCase() }
    for (fruit in newList) {
        println(fruit)
    }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第10张图片

 /**
     * filter()函数获取5个字母以内的水果名
     */
     val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
     val newList = list.filter { it.length<=5 }.map { it.toUpperCase() }
     for (fruit in newList){
         println(fruit)
     }

打印:

读《第一行代码 第3版》第2章知识点简单总结_第11张图片

 

any()函数和all()函数

/**
 * any()函数和all()函数
 */
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any { it.length <= 5 }
val allResult = list.all { it.length <= 5 }
println("anyResult is $anyResult, allResult is $allResult")

any()表示集合中是否存在5个字母以内的单词,all()函数表示集合中是否所有单词都在5个字母以内。

打印:

 

函数参数默认值

fun printParams(num: Int, str: String = "hello") {
    println("num is $num , str is $str")
}

fun printParams2(num: Int = 100, str: String) {
    println("num is $num , str is $str")
}

使用如:

 /**
     * 函数参数默认值
     */
    printParams(123)
    printParams2(str = "world")

打印:

读《第一行代码 第3版》第2章知识点简单总结_第12张图片

 

详情请参考《第一行代码 第3版》

你可能感兴趣的:(Android)