1.定义包名:与java定义包名一样,在源文件的开头定义包名:
package my.demo
import java.util.*
2.定义函数:与java定义函数的区别在于:kotlin在定义函数的时候要加个fun关键词,函数的返回值前后不同,java的在前面,kotlin的在后面
java: private int getResult(int a,int b){
return a+b;
}
kotlin: private getResult(a:Int,b:int):Int{
return a+b
}
如果一个函数只有一个并且是表达式函数体并且是返回类型自动推断的话,可以直接这样写:
fun getResult(a:Int,b:Int) = a+b //这里的函数没有写返回值,以为kotlin会自动判断返回值类型
如果函数返回一个无意义的值,相当于Java的void,则可以这样写:
fun getResult(a:Int,b:Int):Unit{
print(a+b)
}
Unit 的返回类型可以省略
定义局部变量:kotlin声明变量与java声明变量不一样,java变量类型在前,变量名在后,而kotlin则相反,变量名在前,变量类型在后,中间加冒号,并且kotlin可以自动判断变量的类型
声明局部变量(常量使用val关键字)
val a:Int =1
val b = 1 // 自动判断Int类型
声明变量 (变量使用var关键字)
var x = 5 //自动推断出是int类型
3.kotlin的注释与java一样,支持单行注释和块注释
// 单行注释
/* 这是一个
块注释 */
使用字符串模板:使用${变量},如变量为args:Array<String>,使用的时候可以这样写
fun main(args:Array<String>){
if(args.size == 0)return
print("First argument:${args[0]}")
}
而不用在去加号加起来,gradle里面也是支持的
fun main(args:Array<String>)
{
if(args.size == 0) return
print("First argument:"+arg[0])
}
使用if表达式的时候这样写:
fun max(a:Int,b:Int):Int{
if(a>b){
return a
}else{
return b
}
}
如果一个函数只有一个并且是表达式函数体并且是返回类型自动判断的话,可以这样写:
fun getResult(a:Int,b:Int) = a+b
那么加上if表达式的话,可以这样写:
fun max(a:Int ,b:Int )=if(a>b) a else b
4:使用可空变量和空置检查
当一个变量,函数可能出现空值得时候,应该指出该引用可空,如:
fun getResult(a:Int, b:Int):Int?{// 设置函数返回类型可空
print(a + b)
return null
}
使用类型检查和自动转换
is运算符是检查一个表达式是否是某个类型的实例,如果为不可变局部变量或属性进行类型检查,则无需显式转换
fun getStringLength(obj:Any):Int?{
if( obj is String){
// 'obj'在这个分支中自动转换为String类型
return obj.lenth
}
//'obj'任然是‘Any’类型
return null
}
或者
fun getStringLength(obj:Any):Int? {
if(obj !is String ) return null
// 'obj'在这个分支中自动转换为String类型
}
也可以这样
fun getStringLength(obj:Any):Int?{
if( obj is String && obj.length >0){
return obj.length
}
return null
}
5.使用for循环
fun main(args :Array<String>){
for( arg in args){
print(arg)
// in操作符可以判断是否arg是否在args里面
}
}
或者这样写
for ( i in arg.indices){
print(args[i])
}
6:使用while循环
fun main (args:Array<String>){
var i = 0
while (i < args.size){
print(args[i++])
}
}
7: 使用when表达式:
when表达式就相当于java的switch表达式
fun cases (obj:Any){
when (obj){
1 ->print("one") //如果obj的值为1
“hello”->print("Greeting")// 如果obj的值为hello
else ---> print("Unknown")// 默认,相当于switch 的default
}
}
8:使用ranges
使用in运算符检查数字是否在范围内
if(x in 1..y-1){//1..y-1表示1到y-1的范围
print("OK")
}
for (i in
1 until
100) { ... }
// 半开范围,不包括100,相当于[1,100)
for (x in
2..
10 step
2) { ... }
// 每次夸2,内容为2,4,6,8,10
for (x in
10 downTo
1) { ... }
// 返序
if (x in
1..
10) { ... }
使用!in 运算符检查数值是否在范围外
if(x!in 0..array.lastIndex){
print("Out")
}
8:使用集合:
循环输出一个集合里面的值或者判断集合里面是否包含某个变量
for(name in names){//将会调用names.contains(name)方法
println(name)
}
使用lambda表达式过滤和映射集合
// it表示name
names
.filter { it.startsWith(
"A") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }