资讯专栏INFORMATION COLUMN

从零开始学 Kotlin 之「1」基础篇

hatlonely / 557人阅读

摘要:前言大家好,这里是从零开始学之基础篇,本文首发于公众号,欢迎前往大家关注。也可以用在表达式中集合的使用创建一个集合,并用循环遍历输出也可以在用去检查集合中的元素最后从零开始学之基础篇到这里就结束了。

前言

大家好,这里是「从零开始学 Kotlin 之『1 』基础篇」,本文首发于公众号「Binguner」,欢迎前往大家关注。我会每周分享一些关于 Android 和其他方向的技术干货或一些关于认知的文章。学习一门技术最好的方式就是去教会别人,所以,开始今天的学习吧!

01 Kotlin 的前世今生

Kotlin 是由 JetBrains 这家公司开发的一门基于 JVM 的语言。也许你没听说过 JetBrains,但我相信你一定听说过大名鼎鼎的 IDEA(最好用的 Java IDE),就连 Android Studio 也是基于 IDEA 的二次开发产物。并且在 2017 年的 Google I/O 大会上,Google 宣布了将 Kotlin 作为了 Android 开发的官方语言,所以,正在做 Android 开发,或者想要学习 Android 开发的同学,你还有什么理由不去学 Kotlin 呢?

02 Kotlin 的历史

2011 年 7 月,JetBrains 推出 Kotlin 项目,这是一个面向JVM的新语言,它已被开发一年之久。JetBrains 负责人 Dmitry Jemerov 说,大多数语言没有他们正在寻找的特性,但是 Scala 除外。但是,他指出 Scala 的编译时间过慢这一明显缺陷。 Kotlin 的既定目标之一是像 Java 一样快速编译。2012年2月,JetBrains 以 Apache 2 许可证开源此项目。

Kotlin v1.0 于 2016 年 2 月 15 日发布。这被认为是第一个官方稳定版本,并且 JetBrains 已准备从该版本开始的长期向后兼容性。

在 2017 年的 Google I/O 宣布在 Android 上为 Kotlin 提供最佳支持。

03 Kotlin 的特点

Kotlin 代码可以被编译成 JVM 字节码或者 JavaScript 代码。也就是说,Kotlin 不仅可以用来写 Android,还可以用来开发后端,写前端,甚至和 OC、Swift 进行交互。

Kotlin 是空安全的。Kotlin 的 null-safe 机制是指编译器会自动标记那些可能为空的引用,并且可以用一种简单的方式避免出现 NullPointException。

Kotlin 支持很多新的语言特性。lambda、函数式编程、扩展函数、运算符重载、字符串差值、内联函数、委托等等,Kotlin 都支持。

当然还有最重要的一点,Kotlin 很简洁。Kotlin 不用写封号,有专门的 data class 用来代替自己写复杂的数据类,还有自动识别变量类型等等。

04 开始使用 Kotlin 04 - 1 在 IDEA 中使用 Kotlin

下载最新的 IDEA 版本就可以编写 Kotlin,IDEA 从版本 15 之后就自带了 Kotlin 的环境。

创建一个新的 Kotlin 项目 TestProject 。

项目目录结构如下

右击 src 创建一个 Kotlin 文件

在文件中编写代码

fun main(args: Array){
  println("Hello world!")
}

选中 main 后右击,点 Run

然后就可以在控制台看到输出效果了

04 - 2 交互式的 Shell

Windows 可以直接从 Github Releases 处下载安装

Linux 中通过使用 SDKMAN! 下载

在命令行中输入

$ curl -s https://get.sdkman.io | bash

然后再一个新的窗口中输入

sdk install kotlin

Mac OS 下通过 Homebrew 安装

$ brew update
$ brew install kotlin

04 - 3 在 Android Studio 中使用 Kotlin

Android Studio 3.0 和之后的版本都自带了 Kotlin 插件,在之前的版本中向使用 Kotlin,选在 Plugins 选项,选择 Browse Repositories,然后搜索 Kotlin 并安装,即可使用 Kotlin。

04 - 4 在线编写

打开 Kotlin Playground 即可在线编写 Kotlin 代码

05 基础语法 05 - 1 声明变量

在 Kotlin 中声明变量直接使用「var」和「val」

var nameA:String = "Tom"
var ageA = 14    // Int 类型会被编译器自动推导出来
val nameB = "Jack"    // String  类型会被编译器自动推导出来
val ageB:Int = 24

var 声明的是可变变量
val 声明的是只读变量,相当于 final 变量

05 - 2 定义包
package Package1

import java.math.BigInteger

package 用于包声明
Import 可以导入类和方法

05 - 3 定义方法
// 这个方法有两个 Int 参数,一个 Int 返回类型。
fun sum(a: Int, b: Int): Int {
    return a + b
}

在这段代码中,

fun 用于表示这是一个函数

sum 是函数名

小括号里的值是参数,格式为:参数名称 : 参数类型

小括号外的「:Int」指返回类型为 Int,如果无返回类型,可以省略,或者声明为 Unit

当然,也可以返回一个表达式体

fun sum(a:Int, b:Int) = a + b

这段代码隐藏了返回类型,返回类型直接有表达式体推倒出来。

05 - 4 注释

Kotlin 中注释的使用和 Java 一样

// 这是单行注射
/**
 * 这是多
 * 行注射
 */
05 - 5 使用字符串模版

Kotlin 可以直接在引号内借助符号「$」直接使用变量,用法如下

val name = "Tom"
println("Name is $name")  // 输出:Name is Tom

当然也可以使用对象的方法

val name = "Tom"
println("Name is $name")
println("Name"s length is ${name.length}")  // 输出 Name"s length is 3

若想使用「$」符号可以这样

${"$"}
05 - 6 If 表达式
//  求两个 Int 值中的最大值
fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

在表达式中也可以用 if

val a = 3
val b = 4
val max = if(a > b) a else b
05 - 7 when 表达式

在 Kotlin 中,没有 switch 操作符,而是用 when 代替了它。when 相比 switch 更加强大,在 when 中可以使用任何对象。

val a = 2
when(a){
    // 当 a = 1,或者 a = 2 的时候,执行第一条语句
    1,2 -> println("a = $a")
    3,4 -> println("a = $a")
    5,6 -> println("a = $a")
    else -> println("Other number")
}
05 - 8 区间

Kotlin 没有常规的 for 循环语法,它使用区间来表示某个循环条件

例如:创建从 1 到 10 的区间,包括 10。

val range = 1..10

创建从 1 到 10 的区间,不包括 10。

val range = 1 until 10

创建从 10 到 1 的区间

val range = (1..10).reversed()
val range1 = 10 downTo 1

也可以创建给区间创建步长

val range = 1..10 step 2
for (i in range){
    print("$i ")
}  //输出 1 3 5 7 9 

灵活的 Kotlin 甚至可以直接创建字母的区间

val range3 = "a".."z"
for (i in range3){
    print("$i ")
 }  // 输出 a b c d e f g h i j k l m n o p q r s t u v w x y z 
05 - 9 循环

Kotlin 中的循环又 while 循环,do-while 循环,for 循环

具体的语法如下:

while (condition){
    // do something
}
do {
    // do something
}while (condition)

for (i in 1..10){
    print("$i ")
}  // 输出 1 2 3 4 5 6 7 8 9 10 
05 - 10 类型检查和类型自动转换

Kotlin 中通过「is」运算符来判断一个变量是否是一个类型的实例,和 Java 中的 instanceOf 类似,如果通过 is 运算符,确认了这个变量是该类型的实例,这个变量就会自动转换为这个类型的一个实例,无需再进行转换。

val value = "string"
if (value is String){
    println("Length is ${value.length}")
}

is 也可以用在 when 表达式中

val value = "string"
when(value){
    is String -> println("Value is String type")
    is Int -> println("Value is Int type")
    is Char - > println("Value is Char type")
}
05 - 11 集合的使用

创建一个集合,并用 for 循环遍历:

val items = listOf("One","Two","Three")
for (item in items){
    print("$item ")
}
// 输出 One Two Three 

也可以在用 when 去检查集合中的元素

when{
    "One" in items -> println("One")
    "Four" in items -> println("Four")
}
最后

「从零开始学 Kotlin 之『1』基础篇」到这里就结束了。

一下子记住这么多知识点有些困难,所以为了方便大家的记忆与复习,我做了一张思维导图放到下面,大家可以把图片保存下来,有时间便去回顾学到的东西。

欢迎关注本文作者,这个系列的文章会首发在这里:

扫码关注 + 回复「kotlin」,获取我整理的最新版 Kotlin 学习视频。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14456.html

相关文章

  • 从零开始 Kotlin 「2」数据类型

    摘要:前言大家好,这里是从零开始学之数据类型,本文首发于公众号,欢迎前往大家关注。输出布尔类型中的布尔类型用表示,它的值有和。若需要可空引用时,布尔类型的值会被装箱。此时程序会抛出异常最后从零开始学之数据类型到这里就结束了。 前言 大家好,这里是「从零开始学 Kotlin 之『2 』数据类型」,本文首发于公众号「Binguner」,欢迎前往大家关注。我会每周分享一些关于 Android 和...

    LuDongWei 评论0 收藏0
  • 从零开始 Kotlin 「2」数据类型

    摘要:前言大家好,这里是从零开始学之数据类型,本文首发于公众号,欢迎前往大家关注。输出布尔类型中的布尔类型用表示,它的值有和。若需要可空引用时,布尔类型的值会被装箱。此时程序会抛出异常最后从零开始学之数据类型到这里就结束了。 前言 大家好,这里是「从零开始学 Kotlin 之『2 』数据类型」,本文首发于公众号「Binguner」,欢迎前往大家关注。我会每周分享一些关于 Android 和...

    Awbeci 评论0 收藏0
  • 从零开始 Java 基础语法(中)

    摘要:下面开始今天的知识,先看下基础语法的总纲今天我们接着学习变量使用变量的注意事项数据类型和类型转换。推荐阅读从零开始学之基础语法上从零开始学之基础概述本文原创发布于微信公众号,编程思维成长正能量,关注并回复编程阅读等关键字获取免费学习资料 showImg(https://segmentfault.com/img/remote/1460000016134163); Java 基础断更一周了...

    chinafgj 评论0 收藏0
  • 从零开始 Java 基础语法(上)

    摘要:上篇文章开始了我的基础系列之旅,下面应该开始学习基础语法了。不同进制的数据组成五今日总结至此从零开始学习基础语法上已结束。 showImg(https://segmentfault.com/img/remote/1460000016094801); 今天找到这张图片,我非常喜欢。以后这就是我们「从零开始学 Java 系列」的题图。 上篇文章开始了我的 Java 基础系列之旅,下面应该开...

    zhongmeizhi 评论0 收藏0
  • 从零开始 Java 基础概述

    摘要:想着纠结来纠结去也没有什么用,不如就从零开始吧。刚开始配置环境的时候,建议对照着学习视频进行配置,看书配置容易出错。本文原创发布于微信公众号,编程思维成长正能量,关注并回复编程阅读等关键字获取免费学习资料 showImg(https://segmentfault.com/img/remote/1460000016088460); 一直关注我的朋友们应该都知道,很早之前我就打算开始写 J...

    wangdai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<