kotlin学习笔记(1)--基础语法

1.常量,变量

常量的定义(只读) val <标识符> : <类型> = <初始化值>
变量的定义 var <标识符> : <类型> = <初始化值>
常量与变量都可以没有初始化值,但是在引用前必须初始化

val a: Int = 1
val b = 1 // 系统自动推断变量类型为Int
val c: Int // 如果不在声明时初始化则必须提供变量类型
c = 1 // 明确赋值

var x = 5 // 系统自动推断变量类型为Int
x += 1 // 变量可修改

2.函数的定义

函数定义使用关键字 fun,参数格式为:参数 : 类型
fun sum(a: Int, b: Int): Int { // Int 参数,返回值 Int
        return a + b
}

1.表达式作为函数体,返回类型自动判断
fun sum(a: Int, b: Int) = a + b
public fun sum(a: Int, b: Int): Int = a + b // public 方法则必须明确写出返回类型

2.无返回值的函数(Unit类似java中void)
//Unit可省略,public方法也是
fun printSum(a: Int, b: Int): Unit {
        print(a + b)
}

3.预设参数
fun function(str:String = "hello Kotiln"){
    println("预设参数");
}

4.可变长参数函数(参数个数不定)
用关键字vararg实现
例:
fun vars(vararg v:Int){
      for(vt in v){
           print(vt)
      }
}
fun main(args: Array){
       //输出1,2,3,4,5
       vars(1,2,3,4,5)
}

5.匿名函数(lambda表达式)
例:
fun main(args: Array){
        val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
        //输出3
        println(sumLambda(1,2))
}
fun main(args: Array) {
    var res={x:Double,y:Double->x*y}
    println("两个double类型之积:2.5*2.0=${res(2.5,2.0)}")
}

声明函数类型:
fun multiply(x:Double,y:Double)=x*y
fun main(args: Array) {
    var res=::multiply
    println("两个double类型之积:2.5*2.0=${res(2.5,2.0)}")
}
实例:对数组排序,并输出数组的长度和每个字符串的长度
fun main(args: Array) {
    var string_array:Array = arrayOf("member", "computer", "5G", "technology", "applications", "Huawei           ")
    array_Fuction(string_array,::sort,::getLen)

}
fun array_Fuction(arr:Array,f1:(Array)->Unit,f2:(Array)->Unit){
    f1(arr)
    f2(arr)
}
fun getLen(arr:Array) {
    println("数组的长度为${arr.size}")
    for (item in arr) {
        println("${item}的长度为${item.length}")
    }
}
fun sort(arr:Array): Unit{
    arr.sortBy { it.first() }
}

3.字符串模板

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

var a = 1
//模板中的简单名称:
var s = " a is $a"
a=2
//表达式
var s2 = "${s1.replace("is", "was")}, but now is $a"

4.NULL检查基本

kotlin任何数据类型都不能为空,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理

//类型后面加?表示可为空,常用与类型后面
var age:String? = "23"
当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null
例:str的字符串内容不是整数时,返回null
fun parseInt(str:String):Int?{
       //....
}

//!!如果为空则抛出空指针异常,常用于一定不为空的情况
var age = age!!.toInt()

//?.如果不为空则执行.后面的表达式
var age = age?.toInt()

//?:表示如果为空则执行:后面的表达式
var age = age?.toInt()?: -1

5.类型检测及自动类型转换

我们可以使用 is 运算符检测一个表达式是否某类型的一个实例(类似于Java中的instanceof关键字)。

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做过类型判断以后,obj会被系统自动转换为String类型
    return obj.length
  }
  //在这里还有一种方法,与Java中instanceof不同,使用!is
  // if (obj !is String){
  //   // XXX
  // }
  // 这里的obj仍然是Any类型的引用
  return null
}

6.区间

区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。
区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:

for (i in 1..4) print(i) // 输出“1234”
for (i in 4..1) print(i) // 空区间,什么都不输出
for (i in 4 downTo 1) print(i) //输出“4321”

//使用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) print(i) //输出“123456789”

你可能感兴趣的:(kotlin学习笔记(1)--基础语法)