img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

package com.tianju.ktLearn

fun main() { // 2
println(“Hello, World!”) // 3
}


## function函数


* 返回值为Unit,表示没有返回值, 类似与java里面的 void
* Unit可以省略不写,可以传两个参数,参数带有默认值


![在这里插入图片描述](https://img-blog.csdnimg.cn/40f299c036eb4427bbbfa66ac967dedc.png)



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 x+y;
}

fun multiply(x: Int,y: Int) = x*y

fun 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 中缀函数


具有单个参数的成员函数和扩展可以转换为中缀函数。


![在这里插入图片描述](https://img-blog.csdnimg.cn/78ee768d31604381adc460ce3f7140ae.png)



package com.tianju.ktLearn;

// 具有单个参数的成员函数和扩展可以转换为中缀函数
fun main(){
infix fun Int.times(str: String) = str.repeat(this)
println(2 times “Hei!”)

    // to 是标准库中的函数 kotlin.Pair<A, B>
    val  pair = "WHTT" to "PPTS"
    println(pair)

    // 自定义一个 onto 函数
    infix fun String.onto(str: String) = Pair(this,str)
    val myPair = "MVC" onto "WWW"
    println(myPair)

    val pet = Person("peter",34)
    val Shi = Person("Shirley",30)
    pet likes Shi
    println(pet.people[0])

}

class Person(val name: String,val year: Int){

    val people = mutableListOf<Person>()
    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.


![在这里插入图片描述](https://img-blog.csdnimg.cn/69d2a65d2a5749afa432f9eceac20620.png)



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


![在这里插入图片描述](https://img-blog.csdnimg.cn/7222ac4ba7494bab86c5ae3d6cf1434d.png)



package com.tianju.ktLearn

fun printAll(vararg msgs: String) {
for (msg in msgs){
println(msg)
}
}

fun printWithPre(vararg msgs: String, prefix:String): Unit {
for (msg in msgs) println(“[嘻嘻嘻– p r e f i x ] prefix] 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


![在这里插入图片描述](https://img-blog.csdnimg.cn/f529846bfcc54e33ab02b152c6825277.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/443a6f9b61204ac697bfa2384ccfbe7f.png)



package com.tianju.ktLearn

fun main() {
var neverNull : String = “never Null”
// neverNull = null
println(neverNull)

// 在kt里面,如果有一个可以为null,需要在类型后面加上 问号 ?
var nullable:String? = "can be null"
nullable = null
println(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.length>0){
return “StrLength is ${maybeStr.length}”
}
return “null”
}


## kt中的类


* 在kt里面没有 new 关键字


![在这里插入图片描述](https://img-blog.csdnimg.cn/2313f6662166417b9a40056182608630.png)


## 泛型 Generics


![在这里插入图片描述](https://img-blog.csdnimg.cn/1ac6e07d9bb04426933b2a31f8b30b45.png)



package com.tianju.ktLearn

/**
* 可以输入多个参数 vararg
* 泛型
*/
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()})"

}

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

062200258)]
[外链图片转存中…(img-FapyUEon-1715062200258)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐