Kotlin入门

    • 为什么选择Kotlin
    • Kotlin是什么
  • Kotlin的优势

  • 第一个Kotlin应用

  • Kotlin的基本语法规则

    • 变量
  • 函数

  • 匿名函数

  • 字符串模板

  • 注释

  • Null 安全

  • 类型检测和自动类型转换

  • 简化Toast的用法

为什么选择Kotlin


在 2019 年 Google I/O 大会上,他们宣布今后将优先采用 Kotlin 进行 Android 开发。如今,超过 60 款 Google 应用是用 Kotlin 构建的,其中包括 Google 地图、Google Home、Google Play 和 Google 云端硬盘等应用。根据 Google 的说法,Google Play 商店前 1000 个应用中有 60% 以上也使用 Kotlin。Kotlin是谷歌在安卓应用上大力支持且推荐的语言,在构建新的 Android 开发工具和内容(例如 Jetpack 库、示例、文档和培训内容)时,谷歌会在设计层面上先考虑 Kotlin 用户。

Kotlin是什么

Kotlin是由JetBrains公司开发设计的一门解释性语言,在2011年,JetBrains公布了Kotlin的第一个版本,并在2012年将其开源。2016年,Kotlin发布了1.0正式版,JetBrains在自家的旗舰开发工具IntelliJ IDEA中加入了对Kotlin的全面支持,Kotlin在这时期,已经足够成熟和稳定了。2017年,Android Studio也加入了对Kotlin的支持。

Kotlin的优势

  1. 代码更少、可读性更强 可以让我们写更少的代码,以及花费更少的时间来理解别人的代码;

  2. 更安全的代码 Kotlin 有许多语言功能,可帮助我们避免 null 指针异常等常见编程错误;

  3. 与 Java 的互操作性 可以在 Kotlin 代码中调用 Java 代码,或者在 Java 代码中调用 Kotlin 代码。对于原有的java项目,在应用程序中可以将 Kotlin 与 Java 编程语言一起使用, 而无需将所有代码迁移到 Kotlin;

  4. Android Jetpack 与其他库中的 Kotlin 支持 KTX 扩展 为现有的 Android 库添加了 Kotlin 语言特性,如协程、扩展函数、lambdas 与命名参数;

5.易学易用 Kotlin 非常易于学习,尤其是对于 Java 开发人员而言。

第一个Kotlin应用


知道了Kotlin是什么,那我们就先用Android Studio来创建你的第一个Kotlin应用吧

创建Kotlin应用很简单,所有的步骤都和创建Java应用是一样的,只需在创建时,将所使用的语言改为Kotlin就行

创好了后,我们打开MainActivity,可以看到,比起java,Kotlin的代码要少一些,写类和方法的语法规则也不同。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

}

}

Kotlin的基本语法规则


_Kotlin每一行代码的结尾是不用加

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

分号的_

变量

在Kotlin中定义变量的方式和java区别很大,Kotlin定义变量时,只允许在变量前声明两种关键词:val 和 var

val(value的缩写),它用来声明一个不可变的变量。这种变量在初始初始赋值之后,就不能再被复制了,相当于java中用 final声明。

var(variable的缩写),它用来声明一个可变的变量。这种变量在初始赋值之后依旧可以重新赋值。

常量与变量都可以没有初始化值,但是在引用前必须初始化

编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。

val x: Int = 10 //完整的声明变量

val y = 10 // 不指定变量类型,系统自动推断变量类型为Int

val z: Int // 如果不在声明时初始化值,则必须提供变量类型

z = 10 //对不可变的变量明确赋值,赋值后不能再次赋值

var a = 1 // 系统自动推断变量类型为Int

a += 1 // 变量可修改

读者可以看到,Kotlin中Int的首字母是大写的,而Java中int的首字母是小写的。这是因为Kotlin没有使用Java的基本数据类型,而是使用了对象数据类型。在java中,int是关键字,而在Kotlin中,Int是一个类,它有自己的方法和数据结构。所以,我们可以给Int等对象数据类型添加扩展函数,文章后文的Toast简化就是基于此点的。

函数

Kotlin中定义函数的关键字是fun(function的缩写),无论你想定义什么函数,都必须用fun进行声明

紧跟在fun后面的是函数名,函数名后括号里面放的是接收的参数。参数的格式名是“参数名:参数类型

若是有返回值的话,就将返回值类型以冒号隔开,写在函数名括号的后面;若是没有返回值,可以省略不写,或者写关键字为 Unit,类似与java的void

实例:接收两个不同类型参数,且返回值为String的函数

fun functionDemo(parm1 : Int, parm2 : String) : String{

return parm2

}

实例:当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码用等号连接,直接写在函数定义的后面

//改写前

fun sum(parm1: Int, parm2: Int): Int {

return a + b

}

//改写后

fun sum(parm1: Int, parm2: Int) = a + b //返回值类似也省略了,由编译器自动推断类型

匿名函数

Kotlin支持lambda表达式。并非每个函数都需要一个名称。某些函数通过输入和输出更直接地进行标识。这些函数称为“匿名函数”。

lambda表达式的写法为:(type1,type*) -> type_return = { }

使用实例:

fun main(args: Array) {

val sumLambda: (Int, Int) -> Int = {x,y -> x+y} //(Int, Int) -> Int = {x,y -> x+y}就是一个匿名函数

println(sumLambda(1,2)) // 输出 3

}

字符串模板

字符串可以包含模板表达式,即可求值的代码片段,并将它的结果连接到字符串里面。

字符串模板表达式可以是 $变量名 ${变量名}

实例:

val a = 10

val s1 = “a = $a” // 结果为 “a = 10”

val s = “abc”

val str = “$s.length is ${s.length}” // 结果为 “abc.length is 3”

a = 2

// 模板中的任意表达式:

val s2 = “${s1.replace(“is”, “was”)}, but now is $a”

//结果为“a was 10 , but now is 2 ”

var name = “张三”

var sex = true

var date = “2021年1月2日”

var time = “11点59分”

var work =“该睡觉了”

val orderInfo = “你好,${name} if(sex)"coolboy"else"coolgirl","+"现在已经是{if(sex)"cool boy" else "cool girl" },"+"现在已经是if(sex)"coolboy"else"coolgirl","+"现在已经是{date}\ttime了,"+"你{time}了,"+"你time了,"+"你{cacke}”

//结果为"你好,张三 cool boy,现在已经是2021年1月2日 11点59分了,你该睡觉了"

注释

Kotlin 支持单行(或行末)与多行(块)注释。

// 这是一个行注释

/* 这是一个多行的

块注释。 */

Kotlin 中的块注释可以嵌套

/* 注释从这里开始

/* 这是嵌套的注释 */

并且在这里结束。 */

Null 安全

在某些语言中,可以声明引用类型变量而不明确提供初始值。在这类情况下,变量通常包含 null 值。默认情况下,Kotlin 变量不能持有 null 值。这意味着以下代码段无效:

// 赋值失败

val languageName: String = null

要使变量持有 null 值,它必须是可为 null 类型。可以在变量类型后面加上 ? 后缀,将变量指定为可为 null,如以下示例所示:

val languageName: String? = null

当使用可以可返回Null的函数时,要注意Null安全,应该先做判断处理

fun printProduct(arg1: String, arg2: String) {

val x = parseInt(arg1)

Android Studio上Kotlin的入门,移动应用系统开发相关推荐

  1. Android Studio和Kotlin入门

    Welcome to the series of tutorials on Android Development with Kotlin. This series is designed with ...

  2. 在Android Studio上进行OpenCV 3.1开发

    在Android Studio上进行OpenCV 3.1开发 发布于 2016年1月27日 作者: John Hany 5,466次阅读 2016.07.08更新:增加Android Studio 2 ...

  3. android studio查看字节码,使用Android studio查看Kotlin的字节码教程

    Kotlin是一门JVM语言,它被google大力推广,现如今已经是Android官方推荐的开发语言了.为了更好的学习Kotlin,你必须要从字节码的角度来看待语法特点,这样可以更好的加深自己的理解. ...

  4. Android Studio 上传代码到Gitee

    最近在学校里做Android的项目,一直不会通过Android Studio上传代码到Gitee,经过查阅博客和文章,现在将方法总结如下: 一.安装Git 1.下载Git 可在Git官网下载 http ...

  5. Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

    首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this ...

  6. Android Studio上调试手机数据库(SQLite)

    在 Eclipse 时代,调试 SQLite 大都是在DDMS中,data/data/目录下找到db将数据库文件,将文件导出到电脑,然后再用软件打开查看.现在在 Android Studio,是不是可 ...

  7. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发1

    [Android开发]Android Studio中进行简单的WebView构建浏览器开发 第一步:新建一个Android Project 第二步:修改AndroidMainfest.xml文件 第三 ...

  8. 【Android开发】Android Studio中进行简单的WebView构建浏览器开发2

    [[Android开发]Android Studio中进行简单的WebView构建浏览器开发2 第1步:在上一篇博客的基础上,修改activity_main.xml 第2步:在MainActivity ...

  9. 基于Android Studio的蓝牙通信的简单应用与开发

    实现基于Android Studio的蓝牙通信的简单应用与开发 实现蓝牙通信 界面展示 核心文件 部分代码展示 总结 实现蓝牙通信 通过权限申请与代码实现,完成蓝牙通信的简单应用与开发. 界面展示 核 ...

最新文章

  1. 静茹docker容器的几种方法_Docker介绍及使用
  2. VirtualBox uuid冲突问题
  3. Ironic 裸金属管理服务的底层技术支撑
  4. Spring事务嵌套引发的问题--Transaction rolled back because it has been marked as rollback-only...
  5. 众志成城 共克时艰 TigerGraph免费开放企业级版本授权全力支持疫情防控
  6. 2012总结--第10篇--工作篇
  7. ad18常用快捷键可以修改吗_常用发泡剂之聚氨酯发泡剂在冬季可以用吗?
  8. MySQL-快速入门(14)MySQL性能优化
  9. 【机械仿真】基于matlab GUI智能电梯仿真系统【含Matlab源码 1087期】
  10. wingdings字体符号在哪_wingdings2字体
  11. 制作U盘启动时的写入模式HDD-FAT32、ZIP-FAT32、HDD-FAT16、ZIP-FAT16有什么区别?
  12. matlab2016 dll,VS2012Matlab2016b dll文件混合编
  13. 51nod 2589 快速讨伐
  14. 7-9 部落 (25分)
  15. ElementUI el-table合并单元格
  16. 【机器学习】(十七)非负矩阵分解NMF:人脸图像特征提取、用特征排序;还原混合信号
  17. pandas:世界各国GDP数据集数据清洗案例
  18. 利用OpenCV计算图像的垂直和水平积分投影
  19. 最简单的基于FFmpeg的推流器(以推送RTMP为例)
  20. ICMP控制报文协议

热门文章

  1. Kubernetes 污点与容忍
  2. python报错:SyntaxError: Missing parentheses in call to ‘exec‘
  3. zynq学习笔记之petalinux (1)安装Ubuntu16.04.1
  4. php中文的正则表达式_php汉字正则表达式
  5. 干货:怎么样才能提升版式平面设计的大方美观?
  6. qt中如何模拟按钮点击_Qt 实现按钮点击切换按钮图片
  7. Windows/Linux内核地址空间管理的异同
  8. shopee首站入驻哪个国家?哪个国家更好卖?
  9. P2-前端基础-网页中的实体(转义字符)
  10. 推荐一些亲测实用的小软件