Kotlin学习笔记——lambda

参考文献——kotlin之Lambda编程
来自简书作者——程自舟

Kotlin lambda语法

1
2
3
4
5
6
7
8
9
10
11
12
13
btn.setOnClickListener ((View v) -> {
toast("click")
})
btn.setOnclickListener {
toast("click")
}
btn.setOnLongClickListener {
toast("Long Click")
true//lambdda的返回值,不写return
}
{a:Int, b:String -> String
(a + b.toDouble()).toString()
}

完整写法

1
2
3
4
5
6
7
8
9
{a:Int, b:String, c:Long/*输入参数列表*/ -> String/*返回值类型*/
/*lambda body*/
var temp:Double = a + b.toDouble()
if (c == 0L) {
"error"
} else {
(temp.toDouble() + c).toString()
}//返回值(不要写return)
}

省略参数的写法

阅读更多

Kotlin学习笔记——基础语法篇之函数

函数的一般形式

1
2
3
4
5
fun mathodName(/*para list*/) : String/*return value type*/ {
/*
function body
*/
}

与C、C++或java的不同

  1. 如果要重载,在fun前面加override
  2. 如果想让子类重载,要加open关键词(类也一样)
  3. 可以定义全局函数,函数不是必须写在类里
  4. 可以有默认参数,且默认参数不必放在最后几个
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fun TextView.println(str:CharSequence) {
    append("\n${str}")
    }
    fun TextView.print(str:CharSequence) {
    append(str)
    }//这个东西是扩展函数,后面说
    fun func(str:String = "哈哈哈",i:Int, j:Double) {//str的默认参数"哈哈哈"
    val text:TextView = findViewById(R.id.text)
    text.print("$str")
    text.println("$i")
    text.println("$j")
    }
  • 此时,在调用时,如果第一个不采用默认参数,则按照顺序传递三个参数,否则按照以下形式传递参数
    1
    func(i = 10, j = 20.5)
  1. 可变参数,在参数列表中,参数名称前用vararg(var = varable, arg = 参数)修饰
    1
    2
    3
    4
    5
    6
    7
    fun appendString(tag:String, vararg info:String?) : String {
    var str:String = "${tag}"
    for (item in info) {
    str = "${str}\n${item}"
    }
    return str
    }
阅读更多

Kotlin学习笔记——基础语法篇之控制语句

if…else…

用法

Kotlin中if...else...基本用法与C/C++java中相同

例子

1
2
3
4
5
6
7
8
button.setOnClickListener {
if (flag) {
text.text = "I love you, at the first sight of you."
} else {
text.text = "I love three things in this world.Sun, moon and you. " +
"Sun for morning, moon for night, and you forever."
}
}

而Kotlin的if else可以有返回值

阅读更多

Kotlin学习笔记——基础语法篇之特殊运算符

参考文献——Kotlin学习之运算符
来自简书作者——Hunter_Arley

等值判断

运算符 解释 重载函数
a == b 判断ab是否结构相等,相当于java中a.equals(b)或b.equals(a) a?.equals(b)?:b===null
a != b 判断ab是否结构不等,相当于java中!a.equals(b)或!b.equals(a) !(a?.equals(b)?:b===null)
=== 判断是否结构相等且引用相同
  • ps: Kotlin中的==用来比较两个元素是否相同,比如字符串的内容,整数,浮点数的值,而不比较引用是否相同,而===表示比较内容是否相同,且引用是否相同

新增运算符

运算符 解释 重载函数
is 判断变量是否为某个类型
a in b 检查元素a是否在b中 b.contains(a)
阅读更多

Kotlin学习笔记——基础语法篇之数据类型

一、基本数据类型

Kotlin的数据类型

数据类型名称 Kotlin的数据类型
整型 Int
长整型 Long
浮点型 Float
双精度浮点型 Double
布尔型 Boolean

声明变量

1
2
3
4
5
6
7
8
9
10
11
var integer:Int//一般用法var/val + 标识符 + : + 类型名,var表示变量
val integer1:Int = 0//val表示常量,相当于java中的final,c++中的const
var str = "this is a string"
//没有":String",此时只要保证编译器可以知道变量的类型,则编译器可以完成类型推断
var flt:Float = 5f//f表示数据为float类型
var tobar:Toolbar? = findViewById<Toolbar>(R.id.toolbar)
/*
类型名后+'?'表示该变量为可空变量,kotlin为了防止java中NullPointerException,
默认所有的变量都是不可空(不能为null的),如果要让变量为空,需要+'?',
此时,编译器会强制程序员对所有可空变量进行非空判断
*/

Kotlin的类型转换

阅读更多

Kotlin学习笔记——基础语法篇之类和对象

类的构造

Kotlin类的写法

  1. Kotlin类的构造函数分为主构造函数和二级构造函数
  2. 主构造函数的特点——函数名为init,参数要写在类名后面(下面举例),一般用于初始化
  3. 如果要在java中调用kotlin的类,要在类名前面加上@JvmOverloads(让java能够识别默认参数),并且补充constructor关键字
  4. 主构造函数的参数写在类名后,如果没有@JvmOverloads修饰,constructor关键字可省略(不是指二级构造函数的constructor,是类名后面的)
  5. 二级构造函数用constructor关键字
  6. 二级构造函数的特点——可有可无,相互独立,如果有主构造函数,先调用主构造函数

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Animal (type:String = "动物", name:String) {
//没有@JvmOverloads修饰,可以省略constructor
//等价以下写法
//class Animal constructor(type:String = "动物", name:String) {
var Type:String = ""
var Name:String = ""
var Age:Int = 0
var Sex:String = ""
init {
Type = type
Name = name
}
constructor(type:String = "动物", name:String, age:Int, sex:String) : this(type, name){
Age = age
Sex = sex
}

}

类的成员

阅读更多