Kotlin开篇

本文介绍了如何配置Kotlin开发环境,包括使用IntelliJIDEA和下载Kotlin插件。文章接着探讨了Kotlin的基本概念,如类型系统、空安全、多范式编程、扩展函数和属性,以及与Java的互操作性。此外,还强调了Kotlin的智能类型推断和空安全特性,帮助开发者避免空指针异常。
摘要由CSDN通过智能技术生成

准备

阅读对象

需要有Java基础的人类

Kotlin官网:

IntelliJ IDEA – the Leading Java and Kotlin IDE

开发工具:IDEA 官网下载

IntelliJ IDEA – the Leading Java and Kotlin IDE (jetbrains.com)

撸代码

我们来看下kotlin官方的示例

fun main() {
    val name = "stranger"        // Declare your first variable
    println("Hi, $name!")        // ...and use it!
    print("Current count:")
    for (i in 0..10) {           // Loop over a range from 0 to 10
        print(" $i")
    }
}

看下在IEDA中跑下看下运行结果

先创建项目

基本啥都都不用干就能跑起来,以上kotlin环境就搞定了。

环境版本信息如下:

IntelliJ IDEA 2022.3.2 (Community Edition)
Build #IC-223.8617.56, built on January 26, 2023
Runtime version: 17.0.5+1-b653.25 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2042M
Cores: 4

Kotlin: 223-1.8.0-release-345-IJ8617.56

 Kotlin的基本概念

(本段来自电子书《kotlin从入门到进阶实战》)

        Kotlin是一种基于JVM的静态类型编程语言。Kotlin从开始推出至今 已经有7年,2016年官方正式发布了首个稳定版本。Kotlin发展简史如 下: 2011年7月,JetBrains推出Kotlin项目。 2012年2月,JetBrains以Apache 2许可证开源此项目。 2016年2月15日,Kotlin v1.0(第1个官方稳定版本)发布。 2017 Google I/O大会上,Kotlin“转正”。 Kotlin具备类型推断、多范式支持、可空性表达、扩展函数、模式 匹配等诸多下一代编程语言特性。 Kotlin的编译器kompiler可以被独立出来并嵌入到Maven、Ant或 Gradle工具链中。这使得在IDE中开发的代码能够利用已有的机制来构 建,可以在新环境中自由使用。

语言特性

  • 实用主义(Pragmatic) 务实、注重工程实践性。我们经常会听到人们说编程是数学,或者 是工程,是艺术,是科学,这些说法都是很有道理的。Kotlin是一门偏 重工程实践、编程上有极简风格的语言。
  • 极简主义(Minimalist) Kotlin语法简洁优雅不啰嗦,类型系统中一切皆是引用 (reference)。
  • 空安全(Null Safety) Kotlin中有一个简单完备的类型系统来支持空安全。
  • 多范式(multi-paradigm) Kotlin同时支持OOP与FP编程范式。各种编程风格的组合可以让我 们更加直接地表达算法思想和解决问题的方案,可以赋予我们在思考上 有更大的自由度和灵活性。
  • 可扩展 Kotlin可直接扩展类的函数与属性(extension functions & properties)。这与我们在Java中经常写的util类是完全不一样的体验! Kotlin是一种非常注重用户体验的语言。
  • 高阶函数与闭包(higher-order functions & closures) Kotlin的类型中,函数类型(function type)也是一等类型(first class type)。在Kotlin中可以把函数当成值进行传递,这直接赋予了 Kotlin函数式编程的特性,使用Kotlin可以写出一些非常“优雅”的代码。
  • 支持快速实现DSL 有了扩展函数、闭包等特性的支持,使用Kotlin实现一个DSL将会 相当简单、方便。

Kotlin与Java完全互操作

        Kotlin是基于JVM平台的静态编程语言,同时在设计之初就把与 Java的互操作性当作重要目标。正如官方网站所宣传的那样:100% interoperable with Java and Android。下面我们举个简单例子来展示Kotlin 中使用Java的ArrayList类与使用JUnit测试框架进行单元测试。代码示例 如下:

fun getArrayList(): List<String> { //(1)函数声明
    val arrayList = ArrayList<String>() //(2)Kotlin中直接调用Java的API
    arrayList.add("A")
    arrayList.add("B")
    arrayList.add("C")
    return arrayList
}

代码说明如下。

(1):声明了一个返回List的函数,我们看到在Kotlin中使 用fun关键字来声明函数。

(2):创建了一个ArrayList对象,我们可以看到,在 Kotlin中创建对象不再使用new关键字了,尖括号里面的String是泛型信 息。该语法与Java语言基本类似。

扩展函数与扩展属性

        扩展函数与扩展属性的“好玩”之处在于,可以在不修改原来类的条 件下自定义函数和属性,使它们表现得就像是属于这个类一样。例如, 我们给String类型扩展一个返回字符串首字母的firstChar()函数,代码如 下:

fun main() {
    println("abc".firstChar()) //调用我们自定义的扩展函数
}

fun String.firstChar(): String {//给String类扩展一个firstChar()函数
    if (this.isEmpty()) {//这里的this代表调用者对象
        return ""
    }
    return this[0].toString()//返回下标为0的字符并转成String类型
}

不可空类型与空安全

        使用Kotlin编程比Java更加安全,至少在空指针问题上写起代码来 会更加“开心”。Kotlin中引入了不可空类型与可空类型来明确声明一个 变量是否可能为null,同时在编译期通过类型是否匹配来检查空指针异 常,大大降低了空指针异常出现的概率。同时,Kotlin还提供了Elvis操 作符、安全调用符等极简的语法格式,使开发者从Java的null防御式编 程中被解放出来。例如下面的这段代码:

 var a = "abc"
     a= null //这段会编译报错
// Null can not be a value of a non-null type String

        当声明了不可空类型String的变量a后,在后面使用变量a的代码中 就不能给a赋值为null。如果给a赋值null,编译器会直接报错。而这个时 候,如果我们想声明一个可空的String类型,可以这样写:

 var b: String? = "abc" //声明一个可空的String?类型

        但是这个时候,如果想调用变量b的方法,就不能直接像下面这样 写了:

b.length //可空类型不能直接调用方法,需要使用安全调用符?.或者断言调用!!.
    //error:Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

        如果在IDE中会直接提示报错,编译不通过。上面的代码可以使用 安全调用符进行如下改写:

b?.length //使用安全调用符
b=null
b?.length //null 对象使用安全调用符访问length属性,直接返回null

        这个问号确实非常简洁易懂,同时能够时刻提醒我们:这个调用者 有可能是null的。这个语法明显比Java 8中引入的Optional更加简 单、直接。

一等函数支持

        在Kotlin中函数是第一等类型(fist class):我们可以将函数像值一 样传递,函数可以作为另一个函数的返回值。我们通常称之为“一等函 数(first order functions)”支持。例如,下面是一个把函数作为参数传 递给函数的Lambda表达式的例子:

val list = listOf(1, 2, 3, 4, 5, 6, 7) //声明一个不可变的List
val res = list.filter { it % 3 != 0 }
println(res)
//res=[1, 2, 4, 5, 7]

智能类型推断

        在上面的诸多例子中,可以看到在声明变量的时候并没有显式指定 它的类型。Kotlin编译器会自动推断出其类型。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值