时间:2021-05-19
详解Kotlin中的变量和方法
变量
Kotlin 有两个关键字定义变量:var 和 val, 变量的类型在后面。
var 定义的是可变变量,变量可以被重复赋值。val 定义的是只读变量,相当于java的final变量。
变量的类型,如果可以根据赋值推测,可以省略。
var name: String = "jason"name = "jame"val max = 10常量
Java 定义常量用关键字 static final, Kotlin 没有static, 可以在命名对象里面用 const val 定义
object Config { const val TAG = "config"}或者伴随对象
class Config { companion object { const val TAG = "config"}}方法
方法通过 fun 定义, 包含若干参数和返回值(可选)
fun log(msg: String): Unit { println(msg)}方法没有返回值用 Unit, 一般省略不写。
单表达式方法
如果方法只有一个表达式,可以采用“=”的简明写法
fun square(x: Int) = x * x顶层方法
Java 的方法都在 class 里面, Kotlin 支持顶层方法,这些方法定义在 class 的外面。
顶层方法一般是一些工具方法,和 Java 将这些方法勉强放到一个不关联的类不同, 单独提供这些方法似乎更合理。
fun main(args: ArrayList<String>) { //}class Hello() { //}参数
Java 不支持默认参数, 只能通过重载定义多个方法,Kotlin支持, 带默认值的参数放后面。
fun divide(divisor: BigDecimal, scale: Int = 0): BigDecimalclass Student2(val name: String, val registered: Boolean = false, credits: Int = 0)当调用方法时,Kotlin支持命名参数,这有助于提高代码的可读性,尤其是多参数的方法。带名字的参数放后面。
fun deleteFiles(filePattern: String, recursive: Boolean, ignoreCase: Boolean, deleteDirectories: Boolean): Unit{ // do something}deleteFiles("*.jpg", true, true, false)deleteFiles("*.jpg", recursive = true, ignoreCase = true, deleteDirectories = false)不定长度参数
例如 java public void println(String.. args) { } 可以这样定义不定个数参数的函数。
Kotlin 通过关键字 vararg 实现这个功能,如示例:
fun prints(vararg strings: String) { for (string in strings) println(string)}prints("a", "b", "c")如果已经有一个数组, 可以通过关键字*传递数组。
val strings = arrayOf("a", "b", "c", "d", "e")prints(*strings)返回多个值
要返回多个值,可以返回数组,或者自定义类型。Kotlin内置了 Pair 和 Triple, 返回2个值和3个值。
fun roots(k: Int): Pair<Double, Double> { require(k >= 0) val root = Math.sqrt(k.toDouble()) return Pair(root, -root)}val (pos, neg) = roots(16)尾递归函数(Tail recursive function)
当一个函数标记为tailrec , 并且满足要求的形式, 编译器就会对代码进行优化, 消除函数的递归调用, 产生一段基于循环实现的, 快速而且高效的代码。
tailrec fun findFixPoint(x: Double = 1.0): Double = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))上面的代码计算余弦函数的不动点(fixpoint), 结果应该是一个数学上的常数。这个函数只是简单地从 1.0 开始不断重复地调用 Math.cos 函数, 直到计算结果不再变化为止, 计算结果将是 0.7390851332151607。
要符合 tailrec 修饰符的要求, 函数必须在它执行的所有操作的最后一步, 递归调用它自身。不能将尾递归用在 try/catch/finally 结构内。 尾递归目前只能用在 JVM 环境内。
函数引用
和 C 语言的函数指针类似, 函数可以赋值给变量, 也可以作为高阶函数的参数或者返回值,例如:
val printMessage = { message: String -> println(message) }printMessage("hello")printMessage("world")感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Kotlin语言中调用JavaScript方法实例详解Kotlin已被设计为能够与Java平台轻松互操作。它将Java类视为Kotlin类,并且Java也将Ko
详解Kotlin中的面向对象(二)在Kotlin中的面向对象(一)中,介绍了Kotlin类的相关操作,本文将在上文的基础上,继续介绍属性、接口等同样重要的面向对
前言在日常开发过程中,静态变量和静态方法是我们常见的用法,Java中相信大家并不陌生了,那么在Kotlin中该如何使用呢?其实很简单,只需要一个将变量和方法包含
Kotlin单例实例详解单例的实现方法,可以通过同伴对象,或者lazy。示例:classHelloprivateconstructor(){companiono
Kotlin开发Android应用实例详解相关文章:关于Kotlin语言的基础介绍:我们简单的知道了Kotlin这门新语言的优势,也接触了一些常见的语法及其简单