kotlin学习笔记: 函数和变量

1、变量

    //---------------- 变量 -----------------//
    val a: Int = 1 //不可变引用。不能在初始化之后再次赋值。对应java的final变量,只会被初始化一次

    var b: Int = 0 //可变引用。这种变量的值可以被改变。相当于java的普通变量。
//      a = 2//val变量如果再次赋值会报错:Val cannot be reassigned
        //尽管val引用自身不可变,但是它指向的对象可能是可变的
        val languages = arrayListOf("java")
        languages.add("Kotlin")//引用对象发生了变化

        //var 变量允许改变自己的值,但是不允许改变自己的类型
        b = 2 //可以改变值
//      b = "Kotlin"//不可以改变类型,会报错:Type mismatch

2、函数

 //---------------- 函数 -----------------//
    /**
     *     代码块函数体
     *     1、使用  fun  來声明一个函数
     *     2、参数名:参数类型
     *     3、返回类型写在参数后面,并用冒号隔开
     *     4、对于有返回值的代码块体函数必须显式的写出返回类型和return语句
     */
    fun sum(a: Int, b: Int): Int {
        var c = a + b
        return c
    }

    /**
     * 表达式函数体
     * 编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型
     * 即使没有显式的写出函数返回类型,编译器也会根据函数体推导出返回类型,这种分析能力被称为类型推导
     * 类型推导只用于表达式体函数,也就是说只有表达式体函数的返回类型可以忽略
     */
    fun sum2(a: Int, b: Int, c: Int): Int = a + b + c

    fun max(a: Int, b: Int) = if (a > b) a else b

    fun appendToString(str: String, appendStr: String): String {
        return str + appendStr
    }

    //有默认参数
    fun appendToString2(str: String, appendStr: String = "isGood"): String {
        return str + appendStr
    }


        //命名参数,可以在传递参数的时候很方便的写上参数名称
        //如果已经指明了一个参数的名称,那它之后的所有参数名称都要标明
        //参数没有默认值,所以必须传入
        var result = appendToString(str = "Kotlin", appendStr = "isGood")
        Log.i("LHD", "result = " + result)

        //默认参数,函数可以给某个参数设置默认值,拥有默认值的参数可以不传
        var result2 = appendToString2(str = "Kotlin")
        var result3 = appendToString2("Kotlin")
        Log.i("LHD", "result2 = $result2  result3 = $result3")

输出结果:
kotlin

详细学习代码:

/**
 * Created by LHD on 2018/8/4.
 */
class KotlinActivity : AppCompatActivity() {

    //---------------- 变量 -----------------//
    val a: Int = 1 //不可变引用。不能在初始化之后再次赋值。对应java的final变量,只会被初始化一次

    var b: Int = 0 //可变引用。这种变量的值可以被改变。相当于java的普通变量。


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.kotlin_main)

//      a = 2//val变量如果再次赋值会报错:Val cannot be reassigned
        //尽管val引用自身不可变,但是它指向的对象可能是可变的
        val languages = arrayListOf("java")
        languages.add("Kotlin")//引用对象发生了变化

        //var 变量允许改变自己的值,但是不允许改变自己的类型
        b = 2 //可以改变值
//      b = "Kotlin"//不可以改变类型,会报错:Type mismatch

        //命名参数,可以在传递参数的时候很方便的写上参数名称
        //如果已经指明了一个参数的名称,那它之后的所有参数名称都要标明
        //参数没有默认值,所以必须传入
        var result = appendToString(str = "Kotlin", appendStr = " isGood")
        Log.i("LHD", "result = " + result)

        //默认参数,函数可以给某个参数设置默认值,拥有默认值的参数可以不传
        var result2 = appendToString2(str = "Kotlin")
        var result3 = appendToString2("Kotlin")
        Log.i("LHD", "result2 = $result2  result3 = $result3")

    }

    //---------------- 函数 -----------------//
    /**
     *     代码块函数体
     *     1、使用  fun  來声明一个函数
     *     2、参数名:参数类型
     *     3、返回类型写在参数后面,并用冒号隔开
     *     4、对于有返回值的代码块体函数必须显式的写出返回类型和return语句
     */
    fun sum(a: Int, b: Int): Int {
        var c = a + b
        return c
    }

    /**
     * 表达式函数体
     * 编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型
     * 即使没有显式的写出函数返回类型,编译器也会根据函数体推导出返回类型,这种分析能力被称为类型推导
     * 类型推导只用于表达式体函数,也就是说只有表达式体函数的返回类型可以忽略
     */
    fun sum2(a: Int, b: Int, c: Int): Int = a + b + c

    fun max(a: Int, b: Int) = if (a > b) a else b


    fun appendToString(str: String, appendStr: String): String {
        return str + appendStr
    }

    //有默认参数
    fun appendToString2(str: String, appendStr: String = " isGood"): String {
        return str + appendStr
    }


}











猜你喜欢

转载自blog.csdn.net/baidu_31093133/article/details/81413330