结合官网提供的例子进行Kotlin基础练习
Hello World
首先是如期而至Hello World,很幸运地找到了打印语句,这个main()
就是入口了,1.3之后括号里面可以空空如也。
package introduction
fun main() {
println("Hello, World!")
}
函数
默认参数值及命名参数
在定义函数,设置传入的参数列表时,会涉及到默认参数的概念,就是右侧赋初值,因此调用时你写不写它都有值,可以产生重载的效果。需要注意的是,有初值的往右靠。
因为通常调用是按参数位置来赋值,这样有初值的成为可选项。
另外,Kotlin中也提供了强行打乱顺序的赋值方法,命名参数法,这样可以指定内容,不用拘泥于位置的格式。
package introduction.functions
//打印字符串 Unit的返回值就是无返回值
fun printMessage(message: String): Unit {
println(message)
}
//函数的第二个参数是可选的,默认值为Info
fun printMessageWithPrefix(message: String, prefix: String = "Info") {
println("[$prefix] $message")
}
fun sum(x: Int, y: Int): Int {
return x + y
}
fun multiply(x: Int, y: Int) = x * y
fun main() {
printMessage("Hello")
printMessageWithPrefix("Hello", "Log")
printMessageWithPrefix("Hello")
//使用命名参数指明参数,可以改变参数的位置
printMessageWithPrefix(prefix = "Log", message = "Hello")
println(sum(1, 2))
}
可变参数
该类型的数据是用逗号隔开,可以任意数量,使用vararg
定义。
package introduction.functions
fun printAll(vararg messages: String) {
for (m in messages) println(m)
}
fun printAllWithPrefix(vararg messages:String, prefix: String) {
for (m in messages) println(prefix + m)
}
fun log(vararg entries: String) { //可变参数运行时会变成数组,为了避免直接传数组,使用*
printAll(*entries)
}
fun main() {
printAll("Hello", "Hallo", "Salut", "Hola", "你好")
printAllWithPrefix("Hello", "Hallo", "Salut", "Hola", "你好", prefix = "Greeting:")
}
中缀表达式
接收一个参数的成员函数和扩展函数可以被转为中缀表达式。
package introduction.functions
/**
* 成员函数或者是接收一个参数的扩展函数可以被转化为中缀函数
*/
class Person(val name: String) {
val likedPeople = mutableListOf<Person>()
infix fun likes(other: Person) {
likedPeople.add(other)
}
}
fun main() {
//为Int类定义了一个中缀扩展函数
infix fun Int.times(str: String) = str.repeat(this)
println(2 times "Bye ")
val pair = "Ferrari" to "Katrina"
println(pair)
infix fun String.onto(other: String) = Pair(this, other) //实现以上to的效果
val myPair = "McLaren" onto "Lucas"
println(myPair)
val sophia = Person("Sophia")
val claudia = Person("Claudia")
sophia likes claudia //调用函数的类的对象自身作为左边的一个参数
}
操作符函数
操作符自身具有函数的实现,可以是编程风格更加灵活。
package introduction.functions
fun main() {
operator fun Int.times(str: String) = str.repeat(this)
println(2 * "Bye ") //*自身有多重实现,times,此处进行操作符重载
operator fun String.get(range: IntRange) = substring(range) //get 相当于 []
val str = "Always forgive your enemies; nothing annoys them so much."
println(str[0 .. 14])
}
本文主要以官网例子为主,内容较为基础,主要使用例子进行理解,也方便自己学习,内容侧重于基础的使用,如需进一步了解细节请移步
官网例子练习
官方详细中文文档
进行深入探讨