kotlin的学习记录

前言

我之前是兴趣使然,因为接触到了移动开发(Android),用的是Java,现在也是想与时俱进。

一、Kotlin是什么?

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。

Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
特点:

简洁: 大大减少样板代码的数量。
安全: 避免空指针异常等整个类的错误。
互操作性: 充分利用 JVM、Android 和浏览器的现有库。
工具友好: 可用任何 Java IDE 或者使用命令行构建。
Kotlin 程序文件以 .kt为后缀名

二、学习引入

1.第一个Kotlin程序
代码如下(示例):

package hello                      //  可选的包头 
fun main(args: Array<String>) {    // 包级可见的函数,接受一个字符串数组作为参数
   println("Hello World!")         // 分号可以省略,换行
   print("Hello World!")           //不换行
}
2.基本语法
函数定义 :使用关键字 fun,参数格式为:参数 : 类型

定义常量与变量: 可变变量定义:var 关键字 不可变变量定义:val 关键字

注释: // 这是一个单行注释 /* 这是一个多行的 块注释。 */

字符串模板

NULL检查机制
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理

区间
区间表达式由具有操作符形式 … 的 rangeTo 函数辅以 in 和 !in 形成。

//1.函数定义
	fun sum(a: Int, b: Int): Int {   // Int 参数,返回值 Int
	    return a + b
	}
	//表达式作为函数体,返回类型自动推断:
	fun sum(a: Int, b: Int) = a + b	
	public fun sum(a: Int, b: Int): Int = a + b   // public 方法则必须明确写出返回类型	
	//无返回值的函数(类似Java中的void):
	fun printSum(a: Int, b: Int): Unit { 
	    print(a + b)
	}	
	// 如果是返回 Unit类型,则可以省略(对于public方法也是这样):
	public fun printSum(a: Int, b: Int) { 
	    print(a + b)
	}
	//函数的变长参数可以用 vararg 关键字进行标识:	
	fun vars(vararg v:Int){
	    for(vt in v){
	        print(vt)
	    }
	}	
	// 测试
	fun main(args: Array<String>) {
	    vars(1,2,3,4,5)  // 输出12345
	}
	//lambda(匿名函数)表达式使用实例:		
	fun main(args: Array<String>) {
	    val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
	    println(sumLambda(1,2))  // 输出 3
	}
	
//4.字符串模块
	//$ 表示一个变量名或者变量值
	//$varName 表示变量值	
	//${varName.fun()} 表示变量的方法返回值:	
	var a = 1
	// 模板中的简单名称:
	val s1 = "a is $a" 	
	a = 2
	// 模板中的任意表达式:
	val s2 = "${s1.replace("is", "was")}, but now is $a"

// 5. NULL检查机制

	//类型后面加?表示可为空
	var age: String? = "23" 
	//抛出空指针异常
	val ages = age!!.toInt()
	//不做处理返回 null
	val ages1 = age?.toInt()
	//age为空返回-1
	val ages2 = age?.toInt() ?: -1
	//当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null。
	//当 str 中的字符串内容不是一个整数时, 返回 null:
	
	fun parseInt(str: String): Int? {
	  // ...
	}

//6.区间
	for (i in 1..4) print(i) // 输出“1234
	for (i in 4..1) print(i) // 什么都不输出
	if (i in 1..10) { // 等同于 1 <= i && i <= 10
	    println(i)
	}
	// 使用 step 指定步长
	for (i in 1..4 step 2) print(i) // 输出“13”
	for (i in 4 downTo 1 step 2) print(i) // 输出“42”
	// 使用 until 函数排除结束元素
	for (i in 1 until 10) {   // i in [1, 10) 排除了 10
	     println(i)
该处使用的url网络请求的数据。

三、Kotlin 基本数据类型

1. Kotlin 的基本数值类型包括
Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。
2.比较
在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。

3. 类型转换
// 3. 类型转换
//每种数据类型都有下面的这些方法,可以转化为其它的类型:
	toByte(): Byte
	toShort(): Short
	toInt(): Int
	toLong(): Long
	toFloat(): Float
	toDouble(): Double
	toChar(): Char
4. 位操作符
//4.位操作符
//对于Int和Long类型,还有一系列的位操作符可以使用,分别是:
	shl(bits) – 左移位 (Java’s <<)
	shr(bits) – 右移位 (Java’s >>)
	ushr(bits) – 无符号右移位 (Java’s >>>)
	and(bits) – 与
	or(bits) – 或
	xor(bits) – 异或
	inv() – 反向
5. 字符
和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号 ’ 包含起来的。比如普通字符 ‘0’,‘a’。

6. 布尔
Boolean :true 和 false。若需要可空引用布尔会被装箱。
内置的布尔运算有:|| – 短路逻辑或 && – 短路逻辑与 ! - 逻辑非

7. 数组
数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。

数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。如下所示,我们分别是两种方式创建了两个数组:

//7.数组
fun main(args: Array<String>) {
    //[1,2,3]
    val a = arrayOf(1, 2, 3)
    //[0,2,4]
    val b = Array(3, { i -> (i * 2) })

    //读取数组内容
    println(a[0])    // 输出结果:1
    println(b[1])    // 输出结果:2
}
//如上所述,[] 运算符代表调用成员函数 get() 和 set()。
//注意: 与 Java 不同的是,Kotlin 中数组是不协变的(invariant)。
//除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,
//省去了装箱/操作,因此效率更高,其用法同Array一样:
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
8.字符串
String 可以通过 trimMargin() 方法来删除多余的空白。
Kotlin 支持三个引号 “”" 扩起来的字符串,支持多行字符串,比如:

fun main(args: Array<String>) {
    val text = """
    多行字符串
    多行字符串
    """
    println(text)   // 输出有一些前置空格
}
fun main(args: Array<String>) {
    val text = """
    |多行字符串
    |菜鸟教程
    |多行字符串
    |Runoob
    """.trimMargin()
    println(text)    // 前置空格删除了
}

总结

以上就是今天的内容,仅仅是提取,供自己平时参考为用

posted @ 2021-10-08 12:59  cactus9  阅读(11)  评论(0编辑  收藏  举报