Kotlin学习笔记基础篇一之变量,语句,函数的使用

159 阅读3分钟

前言:

运行代码使用idea与Android Studio 混合,学习过程最好从头开始敲一遍,学习是个长久的兴趣。

Idea 将Kotlin语言转化为Java 图示

image.png

Studio Kotlin转化为Java 显示

image.png

下面开始正文

1、var val const val使用

//编译时常量只能是常用的数据类型 (String,Double, Int,Float,Long,Short,Byte,Char,Boolean)
//必须在函数之外定义
const val num = 45

fun main() {
    //val 可读,不可改
    // var 可读,可改
    //var <标记符> : <类型> = <值> var可修改
    var str1: String = "fatfatWolf"
    str1 = "胖胖狼"
    // var 可以自动进行强转
    var info = 'C' //强转成char类型
    info = 'B'

    var num = 1//强转成int 类型

    // 不可变变量定义:val 关键字,只能赋值一次的变量(有一点点类似Java中final修饰的变量)
    // val <标识符> : <类型> = <初始化值>
    val info2 = "fatfatwolf" //只读类型变量
    
    //$ 表示一个变量名或者变量值 // $str1 表示这个变量值  
    println("str1:$str1,info:$info,info2:$info2")
    
    
    
}

2、字符串模板使用

//自动换行
var string = """
    AAAAAAAAAAA
    BBBBBBBBBBB
    CCCCCCCCCCC
    DDDDDDDDDDD
""" //带有前置空格

println(string)
//自动换行
var string2 = """
    AAAAAAAAAAA
    BBBBBBBBBBB
    CCCCCCCCCCC
    DDDDDDDDDDD
""".trimIndent() //去掉前置空格

println(string2)

var string3 = """
    ?AAAAAAAAAAA
    ?BBBBBBBBBBB
    ?CCCCCCCCCCC
    ?DDDDDDDDDDD
""".trimMargin("?") //// 没空格 控制|

println(string3)


// 需求:显示 $99999.99
val price = """
   ${'$'}99999.99
""".trimIndent()
println(price)

3、Kotlin 的安全机制 Null的判断

fun main() {
    //Kotlin 的安全机制,对可为空的参数要进行判断处理

    var info : String?= null
    println(info?.length) //第一种补救:? 如果info是null,就不执行 .length
    println(info!!.length)//第2种补救: !! 我自己负责info 不会为null ==  (不管null不null必须执行)  ==  Java

    //自己做判断
    if (info != null) // 第3种补救:  ==  Java
        println(info.length)
}

//方法可以返回null
// : Int? === 允许返回null
fun testMethod(name: String) : Int? {
    if (name == "zs") {
        return 99999
    }
    return null
}

4、Kotlin方法之fun的使用

//Unit == Void
fun main() : Unit {

    // lamada 表达式 表示方法
    // val 变量名 : (参数类型,参数类型) -> 方法返回类型 = {参数1,参数2 -> 参数间的操作}
    val addMethod: (Int,Int) -> Int = {num1,num2->num1+num2}
    var r = addMethod(1,2)
    println(r)
}
//两数相加

//返回类型写法 默认public,先有输入,再有输出
fun add(num1:Int,num2:Int) :Int{
    return num1+num2
}

//类型推倒写法,推倒为int
fun add2(num1:Int,num2: Int) = num1+num2

//类型推导写法 推导为String类型值
fun add3(num1: Int,num2: Int) = "胖胖狼"


//可变参数方法
fun letMethod(vararg num : Int){
    for (i in num){
        println(i)
    }
}


看一下Kotlin转化为Java的基础代码

fun method(age:Int,name:String) : Int{
    println("你的姓名是:$name,你的年龄是:$age")
    return 200;
}

/**
 * 转化为Java的代码

public static final int method(int age, String name){
    String var2 = "你的姓名是:"+name+"你的年龄是:+age";
    System.out.println(var2);
    return 200;
}
 **/

5、Kotlin函数之默认赋值

fun main(){

    action01("张三",26)
    action02("李四")
    action03()
    action03("赵六",35)
}

private fun action01(name:String,age:Int){
    println("我的姓名是:$name,我的年龄是:$age")
}

private fun action02(name:String,age:Int = 17){
    println("我的姓名是:$name,我的年龄是:$age")
}

private fun action03(name:String = "王五",age:Int = 30){
    println("我的姓名是:$name,我的年龄是:$age")
}

image.png

可以看到Kotlin的参数是可以在方法里赋值,并且赋值后可以覆盖的

6、Kotlin函数之具名参数函数

fun main(){

    LoginAction(age = 26, pwd = "123456" , username = "张三")
}

private fun LoginAction(username:String,pwd:String,age:Int){
    println("username:$username,pwd:$pwd,age:$age")
}

可以看到参数不按规定的传递,输出结果:username:张三,pwd:123456,age:26

7、Kotlin range 表达式

range表达式意思是 0..10

fun main{

    //range表达式
    val number = 148

    //range 范围  从哪里到哪里
    if(number in 10..59){
        println("不及格")
    }else if(number in 60.. 100){
        println("合格")
    }else if(number !in 0..100){
        println("分数有误")
    }

}

8、if 与 When表达式

when 相当于Java中的Switch,比switch更强大

fun main(){

    val number1: Int = 9999999
    val number2: Int = 8888888
    // 表达式 比 大小 最大值 无返回值
    val num = if(number1>number2) print(number1) else print(number2)

    //有返回值的比较大小
    val max:Int = if(number1>number2) {
        println(number1)
        number1
    } else {
        println(number2)
        number2
    }


    //when 单个输出
    var number = 2;
    when(number){
        1-> println(1)
        2-> println(2)
        3-> println("今天是周三")
    }

    //when 区间输出
    when(number){
        in 1..100-> println("数值在1-100之间")
        in 100..220-> println("数值在100-220之间")
        else -> println("其他")
    }

    var result = when(number){
        2-> {
            println("很开心")
            // 很多很多的逻辑..  省略 200行代码
            // ...
            // TODO ....
            "今天是星期一"
            "99"
        }
        3 -> {
            println("很开心 $number")
            // 很多很多的逻辑..  省略 200行代码
            // ...
            // TODO ....
            "今天是星期三"
            true
            100
        }
        else->{ //必须要有
            println("不符合 $number")
        }
    }

    println(result)


}

9、代码调试TODO 使用

image.png

10、区间使用 for in downTo step until

fun main(){
    // 1 到 9
    for (i in 1..9){
        println(i)
    }
    // 9到1 不输出
    for (i in 9..1){
        println(i)
    }
    // 大 到 小
    for (i in 9 downTo 1){
        println(i)
    }

    // 用区间做判断
    var value = 99;
    if(value in 1..100){
        println("在里面")
    }

    // 步长指定
    for (i in 1..9 step 2){
        println(i)
    }

    // 排除 最后元素,1-9
    for (i in 1 until 10){
        println(i)
    }

}

11、compare 比较 == equals

// TODO 比较两个值
fun main() {

    //JAVA里== 比较内存地址,equals比较值
    //Kotlin里 == 比较值,===比较内存地址


    val name1: String = "张三"
    val name2: String = "张三"

    // --- 比较值本身
    // == 等价 Java的equals
    println(name1.equals(name2))//true
    println(name1 == name2) // true


    // ---  比较对象地址
    val test1:Int? =  10000
    val test2:Int? =  10000
    println(test1 === test2) // false
}

12、Kotlin中 ``的使用

public class Apple extends Fruit {
    public static void is(){

    }
}


fun main() {

    `12132121`("张三","123456")
    //kotlin中调java代码,is in 等关键字,使用``包围即可调用,否则报错
    Apple.`is`()
}

//可以加密方法使用
fun `12132121`(name:String, pwd:String){
    println("模拟用户名是$name,密码是:$pwd")
}

下一篇:Kotlin学习笔记基础篇二函数详解

juejin.cn/post/709946…