欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

Kotlin 语法基础大全,从例子着手的 从0到1的学习 -- 基础介绍

作者:jcmp      发布时间:2021-04-26      浏览量:0
一、hello worldpackage

一、hello world

package org.kotlinlang.play // 1fun main() { // 2 println("Hello, World!") // 3}

在早于1.3版本 main 方法必须要有参数

fun main(args: Array) { println("Hello, World!")}

二、方法

三、普通方法

fun printMessage(message: String): Unit { // 1 println(message)}fun printMessageWithPrefix(message: String, prefix: String = "Info") { // 2 println("[$prefix] $message")}fun sum(x: Int, y: Int): Int { // 3 return x + y}fun multiply(x: Int, y: Int) = x * y // 4fun main() { printMessage("Hello") // 5 printMessageWithPrefix("Hello", "Log") // 6 printMessageWithPrefix("Hello") // 7 printMessageWithPrefix(prefix = "Log", message = "Hello") // 8 println(sum(1, 2)) // 9}

四、infix functions 中缀方法

fun main() { infix fun Int.times(str: String) = str.repeat(this) // 1 println(2 times "Bye ") // 2 val pair = "Ferrari" to "Katrina" // 3 println(pair) infix fun String.onto(other: String) = Pair(this, other) // 4 val myPair = "McLaren" onto "Lucas" println(myPair) val sophia = Person("Sophia") val claudia = Person("Claudia") sophia likes claudia // 5}class Person(val name: String) { val likedPeople = mutableListOf() infix fun likes(other: Person) { likedPeople.add(other) } // 6}

五、操作符方法

明确的方法可以升级为 操作符方法,允许调用者使用相应的符号进行运算。

operator fun Int.times(str: String) = str.repeat(this) // 1println(2 * "Bye ") // 2operator fun String.get(range: IntRange) = substring(range) // 3val str = "Always forgive your enemies; nothing annoys them so much."println(str[0..14]) //14。

六、带有 vararg 参数的方法

fun printAll(vararg messages: String) { // 1 for (m in messages) println(m)}printAll("Hello", "Hallo", "Salut", "Hola", "你好") // 2fun printAllWithPrefix(vararg messages: String, prefix: String) { // 3 for (m in messages) println(prefix + m)}printAllWithPrefix( "Hello", "Hallo", "Salut", "Hola", "你好", prefix = "Greeting: " // 4)fun log(vararg entries: String) { printAll(*entries) // 5}

七、变量

kotlin 具有强大的变量的推断能力。你可以明确的定义变量的类型,也可以让编译器自己来推断变量类型是什么。推荐使用val 来定义变量,因为这是不变的变量,当然kotlin 也不会强制你将变量定义为不变,你可以使用var。

var a: String = "initial" // 1println(a)val b: Int = 1 // 2val c = 3 // 3。

var e: Int // 1println(e) // 2。

val d: Int // 1if (someCondition()) { d = 1 // 2} else { d = 2 // 2}println(d) // 3。

八、空安全检查

kotlin 想要创造一个没有 NullPointerException 的世界,所以不允许给一个变量赋予Null值。如果你确实需要赋予一个变量null,请在他的类型名称之后加上 ?

var neverNull: String = "This can't be null" // 1neverNull = null // 2var nullable: String? = "You can keep a null here" // 3nullable = null // 4var inferredNonNull = "The compiler assumes non-null" // 5inferredNonNull = null // 6fun strLength(notNull: String): Int { // 7 return notNull.length}strLength(neverNull) // 8strLength(nullable) // 9。

fun describeString(maybeString: String?): String { // 1 if (maybeString != null && maybeString.length > 0) { // 2 return "String of length ${maybeString.length}" } else { return "Empty or null string" // 3 }}

九、类

类 定义 由类名,类头(包含类型声明,私有构造方法等)、和类体组成,并且由大括号组成。类头和类体都是可以缺省的。如果类体缺省,那么大括号也可以缺省。

class Customer // 1class Contact(val id: Int, var email: String) // 2fun main() { val customer = Customer() // 3 val contact = Contact(1, "mary@gmail.com") // 4 println(contact.id) // 5 contact.email = "jane@gmail.com" // 6}

十、泛型

泛型是现代语言都具有的一种模板方法。泛型类和泛型方法使得代码具有高度的可复用性。就像 List 里卖弄的内部逻辑与T就没有什么逻辑上的关系。

十一、泛型类

第一种使用泛型的方法就是泛型类

class MutableStack(vararg items: E) { // 1 private val elements = items.toMutableList() fun push(element: E) = elements.add(element) // 2 fun peek(): E = elements.last() // 3 fun pop(): E = elements.removeAt(elements.size - 1) fun isEmpty() = elements.isEmpty() fun size() = elements.size override fun toString() = "MutableStack(${elements.joinToString()})"}

十二、泛型方法

你当然也可以定义 泛型方法 ,如果他们的逻辑与泛型参数无关的话。比如你可以定义一个这样的方法。

fun mutableStackOf(vararg elements: E) = MutableStack(*elements)fun main() { val stack = mutableStackOf(0.62, 3.14, 2.7) println(stack)}

注意:编译将会推断出mutableStackOf是一个Double的MutableStack所以你不需要填写 mutableStackOf(...) 之类的。

十三、继承

kotlin 支持传统的面向对象的继承机制

open class Dog { // 1 open fun sayHello() { // 2 println("wow wow!") }}class Yorkshire : Dog() { // 3 override fun sayHello() { // 4 println("wif wif!") }}fun main() { val dog: Dog = Yorkshire() dog.sayHello()}

十四、带有参数的构造方法的继承

open class Tiger(val origin: String) { fun sayHello() { println("A tiger from $origin says: grrhhh!") }}class SiberianTiger : Tiger("Siberia") // 1fun main() { val tiger: Tiger = SiberianTiger() tiger.sayHello()}

十五、传递参数给父类

open class Lion(val name: String, val origin: String) { fun sayHello() { println("$name, the lion from $origin says: graoh!") }}class Asiatic(name: String) : Lion(name = name, origin = "India") // 1fun main() { val lion: Lion = Asiatic("Rufo") // 2 lion.sayHello()}