Kotlin —— 入门 (一) :基础语法

 

Kotlin 到底是什么?它是一种针对 Java 平台的新编程语言。 Koti in 洁、安全、 务实,并且专注于与 Java 代码的互操作性。它几乎可以用在现在 Java 使用的任何 地方:服务器端开发、 Android 应用, 等等。 Kotlin 可以很好地和所有现存的 Java 库和框架 起工作,而且性能水平和 Java 旗鼓相当。在这一章中,我们将详细地探 Kotlin 主要特征:函数和变量


 

目录

 一、函数

1.1 函数声明

1.2 表达式函数体

语句和表达式

无返回值的函数

可变长参数函数 

 顶层函数

扩展函数 

变量声明

顶层变量 

 

三、字符串模板 

四、类和属性

类声明

Kotlin转换Java实现 

类中声明属性 

类中变量使用


 


 一、函数

1.1 函数声明

Kotlin 中使用 fun 关键字声明函数

完整的函数声明:

修饰符(默认public)+ fun + 函数名 + (参数列表) :返回值 {
        函数体
}

函数名

1.2 表达式函数体

由单个表达式构成的完整的函数体,井去掉花括号和 return 语句,函数的返回值类型编译器也会自动推断。

这种函数就是表达式函数。


语句和表达式

语句表达式
总是包围着它的代码块中的顶层元素,并且没有自己的值能作为另一个表达式的一部分使用,并且有返回值
在 Java 中,所有的控制结构都是语句
 
在 Kotlin 中,所有的控制结构 除了循环( for, do do/while )以外大多数都是表达式  比如if- when 以及try 
Kotlin 中赋值操作反而变成了语句 Java 中的赋值操作是表达式

 

无返回值的函数

fun printSum(a: Int, b: Int): Unit { 
    print(a + b)
}


// 对于public修饰的方法,如果是返回 Unit类型 可以省略
public fun printSum(a: Int, b: Int) {     
       print(a + b)

}

 

可变长参数函数 

参数用 vararg 关键字标识(多在Api,源码时用到)

fun vars(vararg v:Int){
    for(vt in v){
        print(vt)
    }
}

// 测试
fun main(args: Array<String>) {
    vars(1,2,3,4,5)  // 输出12345
}

 

 顶层函数

.kt文件下所定义的函数,放在代码文件的顶层,不用附属于任何一个类,相当于 Java 中的静态函数。

包内可以直接使用,包外只需要import该顶层函数。

package com.example.basicslibrary

fun replaceStrLength(str:String):Int{
    if (str!=null){
        return str.length
    }
    return 0
}

// 测试 

fun main(args: Array<String>) { 

var str="春,夏,秋,冬"

 print(replaceStrLength(str) )// 输出7

}

 

扩展函数 

可以为已经存在的类添加新的方法,并且不会修改原来的类。

只需要把扩展的类或者接口名称,放到即将要添加的函数名前面。这个类或者名称就叫做接收者类型,类的名称与函数之间用"."调用连接。this可有可无,指代接收者对象,它可以访问扩展的这个类可访问的方法和属性。并且扩展函数不能访问private的成员。

fun String.lastChar():Char{
    return this.get(this.length - 1)
}

// 测试 

fun main(args: Array<String>) { 

//调用扩展函数

 print("EUSAN".lastChar() )// 输出 N

}

 

二、变量

变量声明

可变变量定义:var 关键字
var <标识符> : <类型> = <初始化值>

不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)

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

指定变量的类型,编译器会根据其初始化器的类型进行推断。
如果变量没有初始化器,编译器会根据其初始化器的类型进行推断。

 

顶层变量 

.kt文件下所定义的变量,属性放在文件的顶层,不附属与任何一个类

Java调用顶层变量原理

java访问该顶层属性时,通过访问器进行访问的。通过反编译查看其转换为Java原本样子 ,顶层属性被定义为私有的静态对象,并配套了一个静态访问器方法。

如果需要定义public的静态变量,可以用const关键字修饰该变量。(仅适用于基础数据类型和String类型的属性)

 

//Kotlin
const val daqiField :String = "daqi"

//Java
public static final String daqiField = "daqi";

 

三、字符串模板 


Java 中,需要字符串连接,输出变量时往往采用如下打印

//Kotlin
println("Hello, $name !")

//Java
println("Hello, "+ name +"!")

 

Kotlin 支持字符串模板,可以在字符串字面值中引用局部变 ,只需要在变量名称前面加上字符$。
表达式会进行静态检查,如果使用$字符引用一个不存在的变量,代码根本不会编译。

在$引用表达式内(即{}中),不仅限于简单的变量名称,还可以引用复杂的表达式 用花括号括起来

在$引用表达式内(即{}中),嵌套双引号

//嵌套表达式
   var array= arrayListOf(1,2,3,4,5,6)
    if(array.size>0) {
        println(" array[0]  ${array[0}")
    }

//嵌套双引号
 println("hello  ${if (args.size > 0) args[O] else "somene"}!")

 

四、类和属性

类声明

//在 Kotlin 中,public 是默认的可见性,所以你能省略它
//初始化器 getter 和 setter 都是可选的,如果类型可以从初始化器中推断出来,也可以省略。
data class Person(var name:String,var age:Int?=0)

Kotlin转换Java实现 

Tools ->Kotlin -> Show Kotlin Bytecode -> 右侧弹出字节码框 ->左上角 Decompile按钮

 

转换成java后发现,整体基本和Java类相似,但是该类被定义为final类,不可被继承。

 

类中声明属性 

在类中声明属性和声明变量一样:使用 val 和var 关键字。

当你声明属性的时候,也就声明了对应的访问器(即get和set)

声明成 val 是只读的属性 有一个getter访问器 ,而var是可变属性 既有  getter 也有 setter访问器 。

声明白定义的访问器

如果有需要 ,可以声明白定义的访问器,提供额外逻辑

data class Person(var name:String,val age:String){
    var isSex:Boolean=false

    //此处可以根据lambda表达式语法规则简写 
    //1.数据类型可以省略,因为由编译器推断得出,称为"类型推断"
    //2.只需要一个参数时,参数的小括号可以省略
    //3.有一条语句时,return与大括号若有,都可以省略
    //小口诀,叫做拷贝中括号,写死右箭头,落地大括号(规则很多此处省略,重点是Kotlin)
    // get()= height==width

    get(){
       return name==age
    }
 
    //使用特殊的标识符field来访问支持字段(幕后字段)的值
    set(value) {
        field = value
    }
}

 

类中变量使用

Kolin中,名称以is开头的变量。getter不会添加任何的前缀,setter名称中的is会被替换成set。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值