《第一行代码》第三版笔记一

目录

第一章

1.1、四大组件

1.2、Log日志工具

第二章

2.1、变量

2.2、函数

2.3、逻辑控制

2.3.1、if语句

2.3.2、when语句

2.3.3、for循环

2.4、类与对象

2.5、继承与构造函数

2.6、接口

2.7、数据类单例类

2.8、集合

 2.8.1、集合的函数式API

2.9、空指针检查

2.10、字符串内嵌

2.11、函数的参数默认值


第一章

1.1、四大组件
        Activity(活动)、 Service(服务) BroadcastReceiver(广播)、 ContentProvider(内容提供者)
1.2、Log日志工具
  • Log.v() 用于打印最为繁琐,意义最小的日志信息,内容最详细,日志级别最低;
  • Log.d() 用于打印调试信息,日志级别比Lod.v高一级;
  • Log.i() 用于打印一些比较重要的数据,对应info,比debug高一级;
  • Log.w() 用于打印一些警告信息,对应warm,比info高一级;
  • Log.e() 用于打印错误信息,对应级别warm,比warm高一级

输出日志语法:

Log.d(tag, "msg")

第一个参数tag,用于对打印信息进行过滤;第二个参数msg,用于想要打印的内容。

第二章

2.1、变量

        val 表示不可变的变量

        var 表示可变的变量

val a = 10  // 声明一个不可变量10,kotlin类型推到机制,这里不用写Int,kotlin也能知道

        当kotlin无法进行类型推导时,需要显式的声明变量类型。例如在对一个变量延迟赋值时,kotlin就无法自动推导它的类型,这时需要显式的声明:

        val a : Int = 10

        Kotlin数据类型:Int、Long、Short、Float、Double、Boolean、Char、Byte

2.2、函数

        fun关键字定义方法。

        语法规则:

fun methodName(param1: Int, param2: Int): Int {
        return 0
}

        参数的声明格式是“参数名:参数类型”,若不接收参数则直接用()

示例:

fun largerNumber(num1: Int, num2: Int): Int {
        return max(num1, num2)  // max()是kotlin的内置函数
} 
        这段代码表示接收两个参数,返回这两个参数里面的最大值。当一个函数中只有一行代码时,Kotlin允许不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可:
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
        再根据kotlin的类型推导机制,可进一步简化:
fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
2.3、逻辑控制

       程序的执行语句主要分为3种:顺序语句、条件语句和循环语句。顺序语句即代码一行一行的往下执行。Kotlin的条件语句和循环语句大致同Java。

2.3.1、if语句
        if语句大致同Java的if语句,不过Kotlin中的if可以有返回值。
fun largerNumber(num1: Int, num2: Int): Int {
        val value = if (num1 > num2) {
                num1
        } else {
                num2
        }
        return value
}

         简化:

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
                num1
        } else {
                num2
 }
        进一步简化:
fun largerNumber(num1: Int, num2: Int) = if (num1>num2) num1 else num2
2.3.2、when语句
        when语句同if,也是有返回值,可以传入一个任意类型的参数,格式是:
匹配值 -> { 执行逻辑 }
        当代码只有一行时,{ }可以省略。
fun checkNumber(num: Number) {
        when (num) {
                is Int -> println("number is Int")  // is关键字是类型匹配的核心
                is Double -> println("number is Double")
                else -> println("number not support")
        }
}
        when不带参数的用法:
fun getScore(name: String) = when {
        name.startsWith("Tom") -> 86
        name == "Jim" -> 77
        name == "Jack" -> 95

        name == "Lily" -> 100
        else -> 0
}
        在Kotlin中判断字符串之后是否相等可以直接使用 == (Java当中字符串比较为equals() )
2.3.3、for循环
        ..  是创建区间的关键字,表示两端都是闭的区间 。示例:
for (i in 0..10) {
    println(i)
}
        until 关键字创建一个左闭右开的升序区间。例如: val range = 0 until 10
        step 关键字用于指定步长。例如: 
   for (i in 0 until 10 step 2) {
        println(i)
   }
       
downTo 关键字表示创建一个两端都是闭的降序区间。例如:
    for (i in 10 downTo 1) {
        println(i)
    }
2.4、类与对象

        class 关键字创建类。例如: class Person{ }

        val p = Person()   //实例化Person

2.5、继承与构造函数

        Kotlin中任何一个非抽象类(abstract)默认都是不可以被继承的。

        open 在类前面加上open关键字表示这个类可以被继承。例如:open class Person { }

        : 继承关键字。例如: calss Student : Preson() { }

        constructor 声明一个次构造函数。

2.6、接口

        interface 关键字定义一个接口。例如:interface Study{ }

        实现接口也是用 :

        函数的可见性修饰符:public、privateprotected、internal。在Kotlinpublic修饰符是默认项。

public        所有类可见(默认)        

private       当前类可见

protected   当前类、子类可见

internal      同一模块中的类可见

2.7、数据类单例类

        data 关键字定义一个数据类。例如:data class Num(val a: String, val b: Double)

        object 关键字定义一个单例类。例如:object a{ }

        单例类调用语法:类名.方法名() 例如:

object Singleton {
    fun singletonTest() {
    println("singletonTest is called.")
    }
}
Singleton.singletonTest()
2.8、集合

        ListSet、Map

        List的主要实现类是ArrayList和LinkedList, Set 的主要实现类是 HashSet Map 的主要实现类是 HashMap。

        listOf()表示创建一个不可变集合,mutableListOf()表示创建一个可变集合;

        setOf()表示创建一个不可变集合,mutableSetOf()表示创建一个可变集合;Set集合不可以存放重复元素,是无序的。

        mapOf()表示创建一个不可变集合,mutableMapOf()表示创建一个可变集合;Map是一种键值对形式的数据结构

 2.8.1、集合的函数式API

        Lambda表达式的语法结构:{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}

需求:如何在一个水果集合里面找到单词最长的那个水果?

val list = listOf("Apple", "Banana", "Orange", "Pear")
var maxLengthFruit = ""
for (fruit in list) {
        if (fruit.length > maxLengthFruit.length) {
                maxLengthFruit = fruit
        }
}
println("max length fruit is " + maxLengthFruit)

        maxBy函数的工作原理是根据传入的条件来遍历集合,从而找到该条件下的最大值。简化:

val list = listOf("Apple", "Banana", "Orange", "Pear")
val maxLengthFruit = list.maxBy( { fruit: String -> fruit.length } )

        当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到函数括号的外面,对此简化:

val maxLengthFruit = list.maxBy(){ fruit: String -> fruit.length } 

         如Lambda参数是函数的唯一一个参数的话,还可以将函数的括号省略,对此进一步简化:

val maxLengthFruit = list.maxBy{ fruit: String -> fruit.length } 

        由于Kotlin的类型推导机制,Lambda表达式中的参数列表在大多数情况下不必声明参数类型,当Lambda表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以使用 it 关键字来代替:

val maxLengthFruit = list.maxBy{ it.length }

        map函数,用于将集合中的每个元素都映射成一个另外的值,映射的规则在Lambda表达式中指定,最终生成一个新的集合。例如把集合中所有的水果名都变成大写:

 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
 val newList = list.map { it.toUpperCase() }

        filter函数,过滤集合中的数据。可以单独使用,也可配合map函数一起使用。比如要保留5个字母以内的水果且水果名都要大写:

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.filter { it.length <= 5 } // 先过滤再转成大写提高效率
                   .map { it.toUpperCase() }  

         any函数用于判断集合中至少存在一个元素满足指定条件,all函数用于判断集合中是否有函数满足条件。

2.9、空指针检查

        表示可为空

        ?. 表示对象不为空时正常调用,为空时则什么都不做。例:a?.doSomething()

        ?: 左右两边都接收一个表达式,如果左边表达式的结果不为空就返回左边表达式的结果,否则返回右边表达式的结果。例: val c = a ?: b

        let  处理全局变量的判空问题。语法如下:

obj.let { obj2 ->
 // 编写具体的业务逻辑
}
2.10、字符串内嵌

        字符串内嵌使用 $ 

        语法:

"hello, ${obj.name}. nice to meet you!"

当只有一个变量时可以将两边的大括号省略:

"hello, $name. nice to meet you!"
2.11、函数的参数默认值
// 给str参数设置默认值hello
fun printParams(num: Int, str: String = "hello") {
     println("num is $num , str is $str")
}

        当出现类型不匹配时使用键值对传参

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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值