Kotlin基础

1.kotlin的简介

Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JavaScript程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。

2.kotlin的基础语法

函数定义

函数定义使用关键字fun,参数格式为: 参数:类型

fun sum2(x: Int, y: Int): Int {
    return x + y;
}

表达式作为函数体,返回值类型自动推断

fun sum(x: Int, y: Int) = x + y;

public 方法必须明确返回值类型,否则会报错

public fun sum3(x: Int, y: Int): Int = x + y;

无返回值的函数(Unit类似于java中的void,但是不等同于void)

fun sum4(x: Int, y: Int): Unit {
    println(x + y)
}
可变长参数函数

函数的变长参数可以用 vararg 关键字进行标识, 此时参数是以数组的形式展示

// 打印参数
fun vararg(vararg variable: String) {
    for (vars in variable) {
        println(vars)
    }
}
lamdba表达式
val list: MutableList<String> = ArrayList()
list.add("a")
list.add("b")
list.add("c")
list.add("d")
list.forEach(
    Consumer { l: String ->
        println(l)
    }
)
定义常量和变量

可变变量定义: 使用var关键字

var 标识符:类型=初始化值

不可以变量定义: 使用val关键字

val 标识符:类型=初始化值

常量和变量都可以没有初始值,但是在引用前必须初始化
编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断

/**
 * @定义常量和变量
 *   可变变量定义:    使用var关键字
 *   不可以变量定义:   使用val关键字
 *   var 标识符:类型=初始化值
 *   val 标识符:类型=初始化值
 *
 * 常量和变量都可以没有初始值,但是在引用前必须初始化
 * 编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断
 */

var a: Int = 1
var b = 1
println(a)
println(b)//系统会自动推断变量类型为Int
val c: Int// 初始化时候必须提供变量类型
c = 2// 明确赋值
println(c)
var x = 5
x += 2 // 变量是可以被修改
println(x)
字符串模板

$ 表示一个变量名或者变量值
$varName表示变量值
$(varName.fun())表示变量的方法返回值

/**
 * @字符串模板
 * $ 表示一个变量名或者变量值
 * $varName表示变量值
 * $(varName.fun())表示变量的方法返回值
 */

// 1.$varName表示变量值
var s = "wangliang";
var s1 = "i am $s";
println(s1) // 打印出 i am wangliang
// 2.$(varName.fun())表示变量的方法返回值
var s2 = "i  am ${s.replace("wangliang", "wl")}";
println(s2)
Null检查机制

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

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

    // 类型后面加?表示可以为空
    var age: String? = null
    // 抛出空指针异常
//    var ages=age!!.toInt()
//    // 不作处理 返回null
//    val ages1=ages?.toInt()
    // age为空返回-1
    val ages2 = age?.toInt() ?: -1
    println(ages2)
类型检测及自动类型转换
/**
 * @类型检测以及自动类型的转换
 * 我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。
 */
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        return obj.length;
    }
    return null;
}
区间
/**
 * @区间
 * 1.区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。
 * 2.区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。
 */

// 输出 "1234"
for (i in 1..4) print(i)
println()
// 什么都不输出
for (i in 4..1) print(i)
println()
// 输出 "4321"
for (i in 4 downTo 1) print(i)
println()
// if 和区间的配合使用
val i=4;
val l=3;
if (i in l..10){ // 等同于 i>=l && i<=10
    println(i)
}
// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出 "13"
println()
for(i in 4 downTo 1 step 2) print(i) // 输出 "42"
println()
for(i in 1 until  10) print(i) // 打印除了10
println()
上一篇:0001. 假定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了尾部的*号之外,将字符中的其它的*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供


下一篇:scala methods