img
img

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

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

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

引出


1.kotlin初识;
2.function函数,变量,null;
3.泛型,接口,继承,超类;

hello

在这里插入图片描述

package com.tianju.ktLearn


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


function函数

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

在这里插入图片描述

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

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

在这里插入图片描述

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.

在这里插入图片描述

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.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("[嘻嘻嘻--$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.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 关键字

在这里插入图片描述

泛型 Generics

在这里插入图片描述



![img](https://img-blog.csdnimg.cn/img_convert/c9b567f003685d9575a2b6a8436fbd6f.png)
![img](https://img-blog.csdnimg.cn/img_convert/6a083664074688cf3493241d9b2a3411.png)
![img](https://img-blog.csdnimg.cn/img_convert/4ace36ec51e663d520e2a1462589b93d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

图片转存中...(img-eu5MwJDU-1715062226261)]
[外链图片转存中...(img-2oUCeh1h-1715062226261)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

Logo

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

更多推荐