Kotlin初学者入门教程(示例)

什么是Kotlin?

Kotlin 是一种在 Java 虚拟机 (JVM) 上运行的开源静态类型编程语言。它将面向对象编程 (OOP) 和函数式编程结合在不受限制、自给自足和独特的平台中。它还允许通过微型代码将功能孪生。Kotlin是一种通用编程语言,由JetBrains设计。

在这个针对初学者的 Kotlin 教程中,您将学习 Kotlin 编程语言基础知识:

Kotlin的历史

以下是Kotlin历史上的重要地标:

事件
2016Kotlin v1.0 正式上线
2017谷歌宣布在安卓中对Kotlin的一流支持
2018Kotlin v1.2 附带了在 JVM 和 JavaScript 之间分发代码的附加功能
2019谷歌宣布 Kotlin 是其首选的 Android 应用程序开发人员的编程语言
20212021年9月20日,Kotlin v1.5.31正式上线。

使用Kotlin的原因

以下是Kotlin被广泛使用的一些重要原因:

  • Kotlin是一种静态类型的语言,非常易于阅读和写入。
  • Kotlin 程序在其程序中不需要分号。这使得代码变得简单且更具可读性。
  • 这种语言允许以各种方式交换和使用来自Java的信息。此外,Java 和 Kotlin 代码可以共存于同一项目中。
  • Kotlin 的类型系统旨在从代码中消除空点异常。
  • 用 Kotlin 编写新代码所需的时间更少。部署 kotlin 代码并大规模维护它甚至更容易。

Kotlin的特点

以下是 Kotlin 的一些功能,这些功能将使您确定编程语言的进度路径。

修剪过的编码:

Kotlin是一种基于OOP的编程语言,其中代码行可以修剪到40%,这使得Kotlin成为软件或Web开发的理想选择。

开源:

Kotlin 安卓版利用 JVM,并结合了 OOP 和面向函数的编程功能。

快速编译:

使用Kotlin时很容易编译代码,从而为Android开发带来更好的性能,并且它还将解释可以在整个代码中使用哪种类型的数据函数。

扩展功能:

Kotlin 可以支持各种扩展函数,而无需对代码进行任何更改。它有助于使现有代码对开发人员更具吸引力和欣赏。

例如:

Fun String.removeFirstLastChar():
String = this.substring(1, this.length -1)

此代码将有助于修剪字符串的第一个字符和最后一个字符,我们可以将其应用为:

Val string1 = "Today is cloudy."
Val string2 = string1.removeFirstLastChar()

空安全Null Safety:

在 Kotlin 中,系统区分空引用null references和非空引用,如下面的 Kotlin 示例所示。

例如,字符串变量不能保存空值:

Var string1: String = "Today is Sunday"
String1 = null  // compilation error
To permit null, we can adjoin the nullable variable :
Var string2: String? = "Today is Sunday"
String2 = null
print(string2)

可互操作:

Kotlin代码可以被Java使用,而Java代码可以与Kotlin一起使用。因此,如果您了解OOPS编程,那么很容易切换到Kotlin的开发。此外,如果有一些用Java编写的应用程序,那么它们可以与Kotlin的环境一起使用。

强大的工具:

与 Java 一样,Kotlin代码也可以使用 IDE 或使用命令行界面编写。使用 IDE 很容易,语法错误也大大减少。同时,当您使用命令行界面时,必须首先编译代码。

智能投射Smart Cast:

Smart Cast基本上有助于降低应用成本并提高其速度或性能。它致力于使用类型转换或不可变值来管理代码的效率。

例如,如果字符串被识别,那么它的长度和计数,并且可以在智能投射函数的帮助下找到:

Val string1: Any = "Today is Monday"
when(string1)
{
is String  -> string1.length
Is Int -> string1.inc()
}

采用成本低:

Kotlin 因其采用成本损失而受到企业的青睐。最重要的是,开发人员很容易学习,特别是具有编程背景。

Kotlin环境设置

以下步骤可帮助您通过安装 Kotlin 来设置工作环境。

步骤 1) 安装Java

正如我们之前所讨论的,Kotlin 是基于 Java 的,所以在计划采用 Kotlin 时,您必须先安装 Java。请参阅我们的 Java 安装教程。

步骤 2) 安装 Java IDE

幸运的是,有多个 Java IDE 可供选择。在这里,我们提供了下载链接,以使您更轻松。

在这个Kotlin教程中,我们将使用Eclipse。

步骤3)安装Kotlin

对于在 Eclipse 中安装 Kotlin,请转到 Eclipse 中的“帮助”部分,然后单击“Eclipse市场”选项。

现在,在搜索框中键入 Kotlin 关键字。单击“转到”选项以列出插件。它将为您提供Kotlin插件的链接,您需要从给定的链接安装插件。

安装完成后,请重新启动 Eclipse IDE。您可以在 Eclipse IDE 的右上角找到一个快捷方式图标。这是一种快速访问方法。

在 Eclipse IDE 中访问 Kotlin 的另一种方法是,转到“窗口”、“透视”、“打开透视”,然后选择“其他”选项。在这里,您可以查看稍后安装的插件列表,如下所示。

一旦您验证了 Kotlin 的安装,让我们在下一步中创建第一个 Kotlin 程序。

步骤4)第一个Kotlin程序

从您的第一个Kotlin项目开始。从“文件”菜单中,选择“新建”选项,然后选择其他选项并从列表中的新 Kotlin 项目开始。

现在,您必须为项目定义一个名称,并且已准备好使用 Kotlin。

通过这些简单的步骤,可以轻松地在您的系统上下载Eclipse和Kotlin,并立即编写您的第一个Kotlin程序。

Kotlin的架构

构建良好的体系结构对于应用程序扩展其功能并满足最终用户群的期望非常重要。Kotlin 有自己独特而独特的架构来分配内存,并为开发人员和最终用户获得高质量的结果。

Kotlin 的协程和类以这种方式构建核心,以生成更少的样板代码,放大性能并提高效率。在各种情况下,kotlin 编译器可以做出不同的反应,特别是当它指定各种语言时。

在体系结构图中,很明显代码执行是通过三个简单的步骤完成的。

  1. 在第一步中,将“.kt”或 kotlin 文件添加到编译器中。
  2. 在第二步中,Kotlin 编译器将代码转换为字节码。
  3. 在第三步中,字节码被放入 Java 虚拟机并由 JVM 执行。

当几个字节编码的文件在JVM上运行时,它们会点燃它们之间的相互通信,这就是为什么Kotlin中的功能称为java ook诞生的互操作性的原因。

当Kotlin以Javascript为目标时,就会发生Kotlin到Javascript的转译。

当选择 JavaScript 的目标时,任何与 Kotlin 一起航行的库的 Kotlin 代码都会溢出 JavaScript。但是,Java 开发工具包 (JDK) 或使用的任何 Java 库都包括在内。

在此类操作过程中,不考虑非 Kotlin 文件。当以 JavaScript 为目标时,.kt 文件由 Kotlin 编译器转换为 ES5.1,以便为 JavaScript 生成一致的代码。Kotlin 编译器努力实现最佳大小的输出、与现有模块的互操作性、与标准库的相同功能以及 JavaScript 可读的输出。

从讨论中可以清楚地看出,Kotlin 编译器可以创建更高效、更胜任和更独立的代码,从而进一步产生高性能的软件产品。

Kotlin变量

变量用于存储要在程序中操作和引用的数据。它基本上是存储数据并标记数据的单位,等待说明性别名,以便程序易于阅读和理解。换句话说,我们可以说变量是收集信息的容器。

在 Kotlin 中,应声明所有变量。但是,如果未声明任何变量,则会弹出为语法错误。此外,变量的声明决定了我们允许在变量中存储的数据类型。在 Kotlin 中,可以使用 val 和 var 关键字定义变量。以下是在 Kotlin 中声明变量的语法:

Var day = "Monday"
Var number = 3

在这里,我们声明了值为“星期一”且类型为 String 的局部变量 day,另一个值为 3 且类型为 Int 的局部变量数,因为此处的文本类型为整数 3。

局部变量通常同时声明和初始化。我们还可以在初始化 Kotlin 变量时执行某些操作。

我们可以对相同数据类型的变量执行操作,因为在这里,num1 和 num2 都属于与 Int 相同的数据类型,而 day 属于字符串数据类型。因此,它将显示一个错误。这是另一种技术,如何在 Kotlin 中定义变量。

var day : String = "GURU99"
var num : Int = 100

让我们看看 var 和 val 关键字之间的不同之处。

Var :

Var就像任何编程语言中使用的通用变量,可以在单个程序中多次使用。此外,您可以随时在程序中更改其值。因此,它被称为可变变量。

下面是 Kotlin 中可变变量的示例:

var num1 = 10
Var num2 = 20
Num1 = 20
print(num1 + num2) // output : 40

此处,num1 的值即 20 被之前的 num1 值(即 10)覆盖。因此,num1 + num2 的输出是 40 而不是 30。

Val :

Val 就像一个常量变量,您不能在程序的后面更改其值,也不能在单个程序中多次赋值,也不能在特定程序中仅使用一次。因此,它被称为不可变变量。

下面是一个Kotlin程序中不可变变量的Kotlin程序示例:

Val num1 = 10
Var num2 = 20

此处,num1 的值 10 不能被 num1 的新值 20 覆盖,因为它是 val 类型的常量值。因此,输出为 30 而不是 40。

注意:在 Kotlin 中,不可变变量优先于可变变量。

Kotlin中的数据类型

数据类型是一组相关的值,用于描述可对它们执行的操作。与其他编程语言类似,Kotlin 也有其预定义的数据类型集,如 Int,Boolean, Char, Double等。

在 Kotlin 中,每种数据类型都被视为一个对象。

现在,在这个 Kotlin 基础教程中,让我们更深入地了解 Kotlin 中使用的预定义数据类型。

数字:

Kotlin 提供一组称为数字的内置数据类型,这些数据类型被子分类为整数和浮点数。

整数:

整数是具有四种类型的数字类别:

类型大小(位)最小值最大值
Byte8-128127
Short16-3276832767
Int32-2,147,483,648 (-231)2,147,483,647 (231 – 1)
Long64-9,223,372,036,854,775,808 (-263)9,223,372,036,854,775,807 (263 – 1)

浮点数 :

浮点数是带有一些十进制值的非整数。

Float:浮点数是一个 32 位的单精度浮点值。

示例:变量:Float x = 3.25600

Double:Double是 64 位双精度浮点值。

示例:var:Double y = 2456.345587

布尔 值:

Kotlin 中的布尔数据类型对于表示逻辑值非常重要。布尔值中只有两个可能的值是真值或假值。

例如:val day = true

Val day2 = false

字符:

Kotlin 中的字符在名为 char 的关键字的帮助下表示。在Kotlin中,单引号表示字符的声明。在java中,字符有时被用作在Kotlin中不可能的数字。

例如:

val onechar = 'x'
print(onechar) //  output : x
Val onedigit = '7'
print(onedigit) // output : 7

Kotlin类型转换或Kotlin 强制类型转换Type Casting

类型转换是将一种类型的数据变量转换为另一种数据类型变量的过程。它非常多,也被称为强制类型转换。

值得注意的是,在 Java 中,支持隐式类型类型转换或将较小数据类型的隐式类型转换为较大的数据类型。

For Example : int abc = 15;
Long bcd = abc; // compiles successfully

但是,在 kotlin 中,根本不支持将较小的数据类型隐式转换为较大的数据类型,因为 int 数据类型不能隐式转换为长数据类型。

For Example : var abc = 15
Val bcd : Long = abc // error

但是,在 Kotlin 中,类型转换是显式完成的。下面介绍了帮助程序函数的指南,这些函数指导将一个数据类型变量转换为另一个数据类型变量。

有一些帮助程序函数是预先拥有的,用于将一种数据类型转换为另一种数据类型:

toInt()

toByte()

toShort()

toChar()

toLong()

toFloat()

toDouble()

For Example : var abc = 15
Val bcd : Long = abc.toLong() // compiles successfully

Kotlin运算符

运算符是重要的特殊字符或符号,可确保在具有变量和值的操作数中进行操作。在 Kotlin 中,有一组运算符用于不同的操作,如算术运算、赋值运算、比较运算等。

算术运算符 :

算术运算符用于加法、减法、乘法、除法和模数。

运算符意义
+加法(也用于字符串串联)
减法运算符
*乘法运算符
/事业部操作员
%模算子

例如:

var x = 10
var y = 20
var z = ( ( x + y ) * ( x + y ) ) / 2     

此处,以下代码的输出为 45。

比较运算符 :

比较运算符用于比较两个值、两个变量或两个数字。它与大于符号(>),小于符号(<)和等于符号(==),不等于符号( !=),大于等于符号(>=),小于等于符号(<= )一起使用。它总是导致真或假。

例如:

var x = 10
Var y =20
Var z = x < y // Output : true
Var w = x > y // Output : false
Var m = x == y // Output : false

赋值运算符 :

赋值运算符用于赋值算术运算值。它与 +=、-=、*=、/=、%=等符号一起使用。

例如:

var x = 10
var y = 20
var x + = y // Output : 30
Var y - = x // Output : 10
Var x * = y // Output : 200

递增和递减运算符 :

递增和递减运算符用于递增和递减变量或数字的值。它是在 ++ 和 — 等符号的帮助下使用的。

有两种类型的递增和递减,分别是递增 ++a 之前、递增后 a++、递减前 –b、递减后 b–。

例如:

var a = 10
var b = 20
var c = a++ // Output: 11
var d = b— //Output : 19     

Kotlin数组

Array 是数据类型的同构集合,是最基本的数据类型之一,用于在连续内存位置存储相同类型的数据。数组对于任何编程语言中的数据组织都非常重要,因此存储在单个位置的多个数据易于搜索或排序。

在 Kotlin 中,数组是相同数据类型的可变协作,而不是本机数据类型。

以下是科特林中数组的某些属性

  • 数组的大小一经声明就无法更改。
  • Kotlin中的数组是可变的。
  • 数组存储在连续的内存位置。
  • 数组可以在索引的帮助下访问,如a[1],a[2],等等。
  • 数组的索引以零开头,即 a[0]。

在 Kotlin 中,可以用两种不同的方法定义数组

通过使用arrayOf()  函数:

在 Kotlin 中,库函数有一个主要用途。一个这样的库函数是arraoOf()函数,它用于通过将变量的值传递给函数来定义数组。

例如:使用arrayOf()  函数的数组的隐式类型声明

val x = arrayOf(1,2,3,4,5,6,7,8,9)

例如:使用 arrayOf() 函数显式键入数组的类型声明。

Val y = arrayOf<Int>(1,2,3,4,5,6,7,8,9)

通过使用数组构造函数:

在Kotlin中,有一个类的名字叫数组。因此,使用构造函数的数组来创建数组是可行的。构造函数中的数组包含两个主要参数。

Kotlin中的数组索引是什么?

数组索引可接受以返回索引初始值的函数。

例如:

val abc = Array(7 , { i -> i*1})

此处,数组的值为 7,lambda 表达式用于初始化元素的值。

还有各种方法可以使用某些函数访问和修改数组。因此,有两个成员函数 get() 和 set(),它们用于访问类数组的对象。

例如:

val x = arrayOf(10,20,30,40,50,60,70,80,90)
val y = x.get(0) // Output 10

此处,输出为 10,因为数组索引 0 处的值为 10

注意:get() 只接受单个值

例如:

val x = arrayOf(10,20,30,40,50,60,70.80.90)
val y = x.set(2, 3) //

输出 : 30 40

此处,输出为 30 和 40,因为数组索引 2 处的值为 30,索引 3 处的值为 40。

注意:set() 采用数组的多个值。

Kotlin Strings

字符串是任何编程语言中的基本数据类型。字符串只不过是一个字符序列。类表示字符串。在 Kotlin 中,所有字符串都是 String 类的对象,这意味着字符串文本作为类的实例实现。

语法:

 Val myString = "Hey there!"

Kotlin Collection

一个集合包含多个类似类型的对象,集合中的这些对象称为元素或项。收集可以帮助存储、检索、操作和聚合数据。

集合类型:

不可变集合

这种类型的集合支持只读功能。人们不能修改其元素。

方法包括:

  • List – listOf() and listOf<T>()
  • Set – setOf()
  • Map – mapOf()

可变集合

它支持读取和写入功能。

方法包括

  • List – mutableListOf(),arrayListOf() and ArrayList
  • Set – mutableSetOf(), hashSetOf()
  • Map – mutableMapOf(), hashMapOf() and HashMap

Kotlin函数

任何编程语言中的函数都是一组类似的语句,这些语句被指定用于执行特定任务。函数允许程序将其分解为各种小代码块。这种代码划分增加了代码的可读性,代码的可重用性,并使程序易于管理。

因为Kotlin被称为静态类型语言。在这里,“fun”关键字用于声明函数。在 Kotlin 中,有两种类型的函数,它们完全取决于它在标准库或用户定义中的可用性。它们是:

  • 标准库函数
  • 用户定义函数

现在,让我们通过 Kotlin 代码示例详细讨论它们。

标准库功能

它们是内置的库函数,可以隐式定义并可供使用。

例如 2:

fun main(args: Array<String>){  
var number = 9  
var result = Math.sqrt(number.toDouble())  
print("$result")  
}  

输出:

3.0

sqrt() 是库中定义的函数,它返回数字的平方根。

print() 函数将消息打印到标准输出流。

用户定义函数

顾名思义,这些函数通常由用户创建,可用于高级编程。

在这里,函数是使用“fun”关键字声明的。

例如 3:

fun functionName(){
//body of the code
}

在这里,我们调用函数来运行主体functionName()内的代码

Kotlin函数示例:

fun main(args: Array<String>){  
    sum()  
    print("code after sum")  
}  
fun sum(){  
    var num1 =8  
    var num2 = 9  
    println("sum = "+(num1+num2))  
}  

输出:

sum = 17

code after sum

Kotlin中的异常处理

编程中的异常被定义为程序中发生的运行时问题,导致程序终止。由于内存空间较少、阵列脱离绑定以及除以零等情况,可能会发生此问题。为了遏制代码执行中的这些类型的问题,使用异常处理。

异常处理被定义为处理运行时问题并在执行期间维护程序流的技术。

Kotlin 使用“抛出”表达式来抛出异常对象。此处,所有异常类都是可抛出类的后代。

Throw MyException(“throws exception”)

异常处理中有四种类型的异常。它们是:

  • try – 此块包含可能创建异常的语句。它总是跟着捕获或最后或两者兼而有之。
  • catch – 它捕获从 try 块抛出的异常。
  • finally – 它总是检查是否处理异常。
  • throw – 它用于显式引发异常。

Try catch:

在异常处理的 try-catch 块中,try block 将代码括起来,这可能会引发异常,catch 块捕获表达式并处理它。

try catch块的语法:

try{    
//code with exception    
}catch(e: SomeException){  
//code handling exception  
}    

try 和 finally 语法

try{    
//code with exception    
}finally{  
// code finally block  
}   

Finally:

在 Kolin 中,final-block 始终检查异常是否得到处理,使其成为异常处理的一个非常重要的语句。

例如 4:

在此代码段中,将发生异常并进行处理。

fun main (args: Array<String>){  
    try {  	
        val data =  9/ 0  
        println(data)  
    } catch (e: ArithmeticException) {  
        println(e)  
    } finally {  
        println("finally block executes")  
    }  
    println("write next code")  
}  

输出:

java.lang.ArithmeticException: / by zero
finally block executes
write next code

Throw:

Throw块将引发显式异常。此外,它还用于引发自定义异常。

语法:

Throw SomeException()

Throw SomeException()

例:

fun main(args: Array<String>) {
    try{
        println("Exception is not thrown yet")
        throw Exception("Everything is not well")
        println("Exception is thrown")
    }
    catch(e: Exception){
        println(e)

    }
    finally{
        println("You can't ignore me")
    }
}

输出:

Kotlin空安全

支持 Kotlin 的系统类型主要区分可以携带可为空引用的引用和不能携带可为空引用的引用。Kotlin 是一种空安全语言,旨在从代码中消除空指针异常或空引用,这被故意称为“十亿美元错误”。

许多编程语言最传统的绊脚石是,在访问空引用的成员时,它会导致空点符号异常,这可能是因为!!运算符或此构造函数在其他地方使用,并在另一个代码点传递。可为 null 的属性在每次使用之前都需要确认空值检查。

在 Kotlin 中,系统区分空引用而不是空引用。

例如,字符串变量不能保存空值:

例如 5:

fun main(args: Array<String>){
    var x: String = "GURU99 is the only place where you will get maximum technical content!" // Not Null by default
    println("x is : $x")
    // You cannot assign null variable to not-nullable variables 
    // a=null // it will give compilation error
    var y: String? = "Thanks for visiting GURU99" 
// Nullable Variable
    println("y is : $y")
    y = null
    println("y is : $y")
}

输出:

Kotlin OOP面向对象

面向对象的编程方法允许通过创建对象将复杂的代码段划分为较小的代码块。这些对象相互共享两个特征:状态和行为。

以下是我们将与 Kotlin 代码示例讨论的一些 OOP 元素:

  • 类和对象
  • 构造 函数
  • 继承Inheritance
  • 抽象类

Kotlin类

首先,在创建对象之前,我们需要定义一个类,该类也称为对象的蓝图。

语法:

class ClassName {
    // property
    // member function
    ... .. ...
}

Kotlin中的对象

在定义类时,我们只定义对象的规范,而不分配内存或存储等其他参数。

语法:

var obj1 = ClassName()

Kotlin中的构造函数

构造函数是初始化类属性的一种方法。它是在实例化对象时调用的成员函数。但在Kotlin,它的工作方式不同。

在Kotlin中有两种类型的构造函数:

Kotlin中的构造函数

主构造函数:优化了初始化类的方式

语法:

class myClass(valname: String,varid: Int) {  
    // class body  
}  

辅助构造函数:帮助添加初始化逻辑

Kotlin继承

当子类获取父类的某些属性时,将发生继承。当两个或多个类具有相同的属性时,允许继承。

语法:

open class ParentClass(primary_construct){
    // common code
  }class ChildClass(primary_construct): ParentClass(primary_construct_initializ){
    // ChildClass specific behaviours
  }

Kotlin中的抽象类

抽象类是无法实例化的类,但我们可以从中继承子类。“抽象”关键字用于声明抽象类。

例如 6:

  open class humanbeings { 
    open fun Eat() { 
        println("All Human being Eat") 
    } 
} 
abstract class Animal : humanbeings() { 
    override abstract fun Eat() 
} 
class Cat: Animal(){ 
    override fun Eat() { 
        println("Cats also loves eating") 
    } 
} 
fun main(args: Array<String>){ 
    val lt = humanbeings() 
    lt.Eat() 
    val d = Cat() 
    d.Eat() 
} 

输出:

Kotlin的现在和未来

现在:

  • 许多公司,如Netflix,Pinterest和 Corda正在使用Kotlin来创建功能强大的Android应用程序。
  • 在2016年至2017年的短短一年内,Kotlin凭借惊人的编程功能变得非常受欢迎。
  • 2017年,谷歌宣布Kotlin成为Android开发的官方编程语言。
  • 您可以快速将 Java 代码替换为 Kotlin,因为它与 Java 和安卓 100% 可互操作。

未来:

  • 跨平台游戏开发
  • 跨平台移动应用开发
  • 服务端脚本和微服务
  • 机器学习和数据分析

总结:

  • Kotlin 是 JetBrains 在 2010 年提出的一种编程语言,用于 Apache 2.0 许可证下的多平台应用程序。
  • Kotlin这个名字是在科特林岛的名字之后派生出来的,在Java的类似对应关系中,在一个叫做java的岛屿的名字之后。
  • 2016年Kotlin第一版v1.0正式上线
  • Kotlin 程序在其程序中不需要分号。这使得代码变得简单且更具可读性。
  • Kotlin 适用于 Android 开发人员是一种基于 OOP 的编程语言,其中代码行可以修剪多达 40%,这使得 Kotlin 成为软件或 Web 开发的理想选择。
  • 在 Kotlin 中,所有变量都应使用 var 和 val 关键字进行声明。
  • 与其他编程语言类似,Kotlin 也有其预定义的数据类型集,如 Int、布尔、字符、双精度等。
  • 在 Kotlin 中,有一组运算符用于不同的操作,如算术运算、赋值运算、比较运算等。
  • 在 Kotlin 中,数组是相同数据类型的可变协作,而不是本机数据类型。
  • 在 Kotlin 中,数组使用两种方法定义 – ArrayOF () 和构造函数。
  • Kotlin 是一种空安全语言,有助于从代码中删除空指针异常或空引用,这被故意称为“十亿美元错误”。