• 第一行代码(第三版)学习笔记



    Android是以前学习的知识,本人非常热爱android开发,所以即使现在也偶尔看看相关技术。了解到Android现在多用Kotlin开发,故利用闲暇看看《第一行代码》(第3版)kotlin版。
    本博客记录一下在Android开发中,Kotlin和Java不同之处,如有不当,还请各位指出。

    第2章 快速入门Kotlin编程

    2.1 kotlin取代Java成为Android第一开发语言的原因

    (1)Kotlin语法简洁,同样功能,kotlin可能会比java减少50%的代码量;
    (2)语法更加高级,使开发效率提升;
    (3)kotlin在语言安全性上下了工夫,几乎杜绝了空指针这个全球崩溃率最高的异常;
    (4)与Java100%兼容,使得Kotlin可以直接调用Java编写的代码,可以无缝使用Java三方库。

    2.2 如何运行Kotlin代码

    注:在线kotlin编程网址
    https://try.kotlinlang.org

    2.3 编程之本: 变量和函数

    2.3.1 变量

    (1)val: 申明一个不可变的变量,这种变量在初始赋值后就不能重新赋值了,对应Java中的final变量;
    (2)var: 申明一个可变的变量

    (3)Kotlin的推导机制与显示声明类型
    推导机制:

    fun main() { 
     	val a = 10		//会自动推导a为Int型 
     	println("a = " + a) 
    }
    
    • 1
    • 2
    • 3
    • 4

    但如果先申明变量,后面再来赋值,则要进行显示声明类型,如:

    val a: Int = 10
    
    • 1

    (4)Java与Kotlin基本类型对照表
    如果你学过Java 并且足够细心的话,你可能发现了Kotlin中Int的首字母是大写的,而Java 中int的首字母是小写的。不要小看这一个字母大小写的差距,这表示Kotlin完全抛弃了Java 中的基本数据类型,全部使用了对象数据类型。在Java 中int是关键字,而在Kotlin中Int变成了一
    个类,它拥有自己的方法和继承结构。
    在这里插入图片描述

    2.3.2 函数

    函数的申明如下:

    fun largerNumber(num1: Int, num2: Int): Int { 
     	return max(num1, num2) 
    }
    
    • 1
    • 2
    • 3


    当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。比如我们刚才编写的largerNumber()函数就只有一行代码,于是可以将代码简化成如下形式:

    fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
    
    • 1

    由于max()函数返回的是一个Int值,而我们在largerNumber()函数的尾部又使用等号连接了max()函数,因此Kotlin可以推导出largerNumber()函数返回的必然也是一个Int值,这样就不用再显式地声明返回值类型了,代码可以进一步简化成如下形式:

    fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
    
    • 1

    2.4 程序的逻辑控制

    2.4.1 if语句

    Kotli n中的if语句和Java 中的if语句几乎没有任何区别,但kotlin中可以通过语法糖进行简化,如:

    fun largerNumber(num1: Int, num2: Int): Int { 
    	 var value = 0 
    	 if (num1 > num2) { 
    	value = num1 
    	 } else { 
    	value = num2 
    	 } 
    	 return value 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可以简化为:

     val value = if (num1 > num2) { 
    	num1 
    	 } else { 
    	num2 
    	 } 
    	 return value 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    进一步简化:

    fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) { 
    	 num1 
    	} else { 
    	 num2 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    再进一步:

    fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
    
    • 1

    2.4.2 when条件语句

    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 
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用when写,更简单,如下:

    fun getScore(name: String) = when (name) { 
    	 "Tom" -> 86 
    	 "Jim" -> 77 
    	 "Jack" -> 95 
    	 "Lily" -> 100 
    	 else -> 0 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    也可以写成无参数形式:

    fun getScore(name: String) = when {
    	name.startsWith("Tom")  -> 86
    	name == "Jim" -> 77
    	else -> 0
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意,Kotlin中判断字符串或对象是否相等可以直接使用==关键字,而不用像Java 那样调用equals()方法。

    when的特点:
    (1)when语句和if语句一样,也是可以有返回值的,因此我们仍然可以使用单行代码函数的语法糖;
    (2)when语句允许传入一个任意类型的参数,然后可以在when的结构体中定义一系列的条件,格式是:

    匹配值 -> { 执行逻辑 }

    (3)除了精确匹配之外,when语句还允许进行类型匹配,如下:

    fun checkNumber(num: Number) { 
    	 when (num) { 
    		is Int -> println("number is Int") 
    		is Double -> println("number is Double") 
    		else -> println("number not support") 
    	 } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.4.3 循环语句

    (1)while循环
    其中while循环不管是在语法还是使用技巧上都和Java 中的while循环没有任何区别。
    (2)for循环

  • 相关阅读:
    C语言程序编译过程中自动添加编译时间等相关信息
    Rliger | 完美整合单细胞测序数据(部分交集数据的整合)(三)
    电脑文件自动上传百度网盘,自动备份
    小程序的开发之路③
    css样式中 before、after 里面的 content 乱码
    Redis 哨兵机制
    【排障记录】扩展坞USB 3.0能用而2.0不能用
    【JAVAEE基础学习】--文件上传&下载案例-1.0
    图卷积神经网络的数学原理——谱图理论和傅里叶变换初探
    UnoCss(原子化css引擎) 让你的开发更轻松愉快
  • 原文地址:https://blog.csdn.net/qq_41915623/article/details/125513861