//单行注释
/*
多行注释,注释可以嵌套
//嵌套
 */

/**
 * var声明变量
 * val声明常量(不可变,java中的final)
 * var/val 变量名:类型 = 初始值
 */
var bianl: Int = 123//变量
val bianll: String = "string"//常量

//基本数据类型:Double 64  Float 32  Long 64  Int 32  Short 16   Byte 8
//字符:Char  必须用单引号'包含起来
var charTest: Char = 'a'
//数组
/**
 * 数组:创建数组两种方法
 * 1,使用arrayOf()函数
 * 2,使用工厂函数
 * 除了Array还有ByteArray, ShortArray, IntArray
 */
fun arrayTest() {
    val a = arrayOf(1, 2, 3)//[1,2,3]
    val b = Array(3, { i -> (i * 2) })//[0,2,4]
}

//String:不可变的 """支持多行字符串(保持原有格式输出)
// 可以调用.trimMargin()删除多余的空白,默认使用|作为边界前缀,可以传入其他字符(删除边界前缀空白[行开始是空白有效])
var tString: String = """jjjj
    》jjjjjj
    》jjjjj
"""

/**
 * 字符串模板
 * $表示一个变量
 * $varName 表示变量值
 * ${varName.fun()} 表示变量方法的返回值
 */
fun stringBan() {
    var a = 1
    val s1 = "a is $a"
    a = 2
    println("${s1.replace("is", "was")},but now is $a")
    //输出:a was 1,but now is 2
}

//类型后面加?表示可为空
var age: String? = "123"

//抛出空指针异常
val ages = age!!.toInt()

//不做处理返回null
val ages1 = age?.toInt()

//age为空返回-1  ?: 判空处理
val ages2 = age?.toInt() ?: -1

/**
 * fun + 函数名(参数:类型):返回类型{}
 *  1,返回类型可以不指定,返回类型自动推断
 *  2,无返回类型可以用Unit或者直接不屑
 */
fun sum(a: Int, b: Int): Int {
    return a + b
}

/**
 * 可变长参数函数,参数类型使用vararg标识
 * 调用:vars(1,2,3,6)
 */
fun vars(vararg v: Int) {
    for (vt in v) {
        println(vt)
    }
}

/**
 * lambda匿名函数
 */
val sumLambda: (Int, Int) -> Int = { x, y -> x + y }


/**
 * 类型检测及自动类型转换
 * 使用is运算符检测表达式是否某类型的实例
 */
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        //类型判断之后,obj自动转为String类型
        return obj.length
    }
    //这里obj仍然是Any类型
    return null
}

/**
 * 区间
 */
fun inTest() {
    for (i in 1..4 step 1) {
        println(i)//输出1234 步长用step
    }
    for (i in 4..1) {
        println(i)//什么都不输出
    }
    for (i in 4 downTo 1 step 1) {
        println(i)//输出4321
    }
    for (i in 1 until 10) {
        println(i)//使用until函数排除结束元素  i in [1,10)
    }

}

/**
 * 比较两个数字:===表示比较对象地址,==表示比较两个值大小
 */
fun equasTest() {
    val a: Int = 10000
    println(a === a)//true 值相等,对象地址相等
    val boxedA: Int? = a
    val boxedB: Int? = a
    println(boxedA === boxedB)//false 值相等,对象地址不一样
    println(boxedA == boxedB)//true 值相等
}

/**
 * 类型转换
 * 较小类型并不是较大类型的子类,较小类型不能隐式转换为较大类型
 * 有些情况下也是可以使用自动转换,前提:可根据上下文推断出正确数据类型而且数字操作符会做相应的重载
 */
fun typeToChange() {
    val b: Byte = 1//OK,字面值静态检测
    //val i: Int = b //错误
    val i: Int = b.toInt()//OK
    val l = 1L + 3//Long + Int => Long
}

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐