北京西站,关键词seo优化排名公司,承德市住房和城乡建设局官网,wordpress 展示模板下载Kotlin 是一门现代但已成熟的编程语言#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作#xff0c;并提供了多种方式在多个平台间复用代码#xff0c;以实现高效编程。
https://play.kotlinlang.org/byExample/01_introduction/02_Functio…
Kotlin 是一门现代但已成熟的编程语言旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作并提供了多种方式在多个平台间复用代码以实现高效编程。
https://play.kotlinlang.org/byExample/01_introduction/02_Functions 目录 引出hellofunction函数Infix Functions 中缀函数Operator Functions 算术函数变长参数vararg Parameters 变量kt中的null kt中的类泛型 Generics泛型函数Generic Functions 继承Inheritance超类Asiatic 总结 引出 1.kotlin初识 2.function函数变量null 3.泛型接口继承超类
hello package com.tianju.ktLearnfun main() { // 2println(Hello, World!) // 3
}
function函数
返回值为Unit表示没有返回值, 类似与java里面的 voidUnit可以省略不写可以传两个参数参数带有默认值 package com.tianju.ktLearn// 返回值为Unit表示没有返回值, 类似与java里面的 void
fun printMsg(msg: String): Unit {println(msg)
}// Unit可以省略不写可以传两个参数参数带有默认值
fun printMsgWithPrefix(msg: String, prefix:String info) {println([wtt--$prefix] $msg)
}fun sum(x: Int, y: Int): Int {return xy;
}fun multiply(x: Int,y: Int) x*yfun main() {printMsg(Pet!)// 可以不传参带有默认参数的printMsgWithPrefix(Hello)printMsgWithPrefix(Hello,Peter)printMsgWithPrefix(prefix MMDD, msg HTTP)val sum sum(100, 300)println(sum)println(multiply(3,30))
}Infix Functions 中缀函数
具有单个参数的成员函数和扩展可以转换为中缀函数。 package com.tianju.ktLearn;// 具有单个参数的成员函数和扩展可以转换为中缀函数
fun main(){infix fun Int.times(str: String) str.repeat(this)println(2 times Hei!)// to 是标准库中的函数 kotlin.PairA, Bval pair WHTT to PPTSprintln(pair)// 自定义一个 onto 函数infix fun String.onto(str: String) Pair(this,str)val myPair MVC onto WWWprintln(myPair)val pet Person(peter,34)val Shi Person(Shirley,30)pet likes Shiprintln(pet.people[0])
}class Person(val name: String,val year: Int){val people mutableListOfPerson()infix fun likes(person: Person){people.add(person)}}
Operator Functions 算术函数
Certain functions can be “upgraded” to operators, allowing their calls with the corresponding operator symbol. package com.tianju.ktLearn// 符号times 就是 下面的 乘号 *
operator fun Int.times(str:String) str.repeat(this)fun main() {println(2 * Bye)val str Always forgive your enemies; nothing annoys them so much.operator fun String.get(range: IntRange) substring(range)println(str[0..14])
}变长参数vararg Parameters package com.tianju.ktLearnfun printAll(vararg msgs: String) {for (msg in msgs){println(msg)}
}fun printWithPre(vararg msgs: String, prefix:String): Unit {for (msg in msgs) println([嘻嘻嘻--$prefix]$msg)
}fun logs(vararg msgs:String){printAll(*msgs)
}fun main() {printAll(pet,sh,wt)printWithPre(pet,sh,wt, prefix Hi)logs(sh,wtt,abc)}变量
Kotlin具有强大的类型推理能力。虽然你可以显式地声明变量的类型但你通常会让编译器通过推断来完成这项工作。Kotlin不强制执行不变性但建议这样做。本质上使用val而不是var。
val b: Int 1 // 2
val c 3 // 3声明一个不可变变量并对其进行初始化。
声明一个不可变变量并在不指定类型的情况下对其进行初始化。编译器推断类型Int。
kt中的null
在kt里面如果有一个可以为null需要在类型后面加上 问号 ?函数只能传入不为null的值参数类型后面加个 ? 问号后传入的值可以为null package com.tianju.ktLearnfun main() {var neverNull : String never Null// neverNull nullprintln(neverNull)// 在kt里面如果有一个可以为null需要在类型后面加上 问号 ?var nullable:String? can be nullnullable nullprintln(nullable)fun strLength(notNull:String ): Int {return notNull.length}// 函数只能传入不为null的值strLength(neverNull)
// strLength(nullable) // 爆红val str descStr(null)println(str)println(descStr(hello are you ok?))
}/*** 返回值为String* 参数类型后面加个 ? 问号后传入的值可以为null*/
fun descStr(maybeStr: String?): String {if (maybeStr !null maybeStr.length0){return StrLength is ${maybeStr.length}}return null
}kt中的类
在kt里面没有 new 关键字 泛型 Generics package com.tianju.ktLearn/*** 可以输入多个参数 vararg* E 泛型*/
class MutableStackE(vararg items: E) { // 1private 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.sizeoverride fun toString() MutableStack(${elements.joinToString()})
}fun main() {val mut MutableStackString(hello,pet)println(is mut empty?--- mut.isEmpty())print(mut)mut.push(wtt)println(mut)mut.peek()println(mut)val pop mut.pop()println(pop)println(mut)println(is mut empty?--- mut.isEmpty())
}泛型函数Generic Functions
如果函数的逻辑独立于特定类型则也可以生成函数。例如您可以编写一个实用程序函数来创建可变堆栈 继承Inheritance 超类Asiatic package com.tianju.ktLearn/*** open 关键字就表示是接口 interface*/
open class Dog{open fun fake(){println(wow wow !)}
}class YourDog : Dog(){override fun fake() {println(miao wu ,wow)}
}/*** 带参数的接口* interface with par*/
open class Cat(val name: String){fun sayHello(){println(A cat name is [$name] say hello)}
}class Arya : Cat(Arya)/*** 超类 将构造函数参数传递给超类*/
open class Lion(val name:String,val age: Int){fun sayHello(){println(hi, every one, my name is $name, age is $age)}
}/*** Asiatic声明中的name既不是var也不是val它是一个构造函数参数*/
class Asiatic(name: String) : Lion(name name, age 18)fun main() {val dog YourDog()dog.fake()val cat : Cat Arya()cat.sayHello()println(cat.name)val lion: Lion Asiatic(Peter)lion.sayHello()
}总结
1.kotlin初识 2.function函数变量null 3.泛型接口继承超类