Android---Kotlin 学习002

声明变量

在 Kotlin 中定义一个变量,通过关键字 var 开始。然后是变量名,在“:”后紧跟变量类型。

示例1:声明一个 int 类型的变量

var num:Int = 1

示例2:声明一个 String 类型的变量

var str:String  = "Hello world"

内置数据类型

Kotlin 语法里内置的数据类型有很多种,如下所示:

只读变量

使用关键字 val 来修饰,就相当于 java 中 final 修饰的量,即常量。在初始化时赋值后就不能修改了。

val name:String = "HL"

如果要声明可修改的变量,使用 var 关键字;如果要声明只读变量,使用 val 关键字

类型推断

对于已声明并赋值的变量,它允许省略类型定义。如果变量在声明时就赋了值,那么编译器就能根据这个值来推断出变量的类型,就没必要再去指明它的类型了。

示例1:

var num = 1

示例2:

var name = "HL"

编译时常量

上面提到的只读变量,它并非绝对只读。编译时常量只能在函数之外定义,用关键字 const 修饰。因为编译时常量必须在编译时赋值,而函数都是在允许时才调研,函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已存在。

const val MAX = 200
fun main(){val a = 5println(a)
}

编译时常量只能是常见的基本数据类型:String,Int,Double,FLoat,Long,Short,Byte,Char,Boolean。

查看 Kotlin 字节码

查看 Kotlin 编译之后的字节码,有助于我们深入理解 Kotlin 语言。两种方式:1) Shift 键两次,输入 show kotlin Bytecode;2)Tools-->Kotlin-->Show kotlin Bytecode。

Kotlin 的引用类型与基本数据类型  

Java 有两种数据类型:引用类型与基本数据类型。Kotlin 只提供引用类型这一种数据类型,出于更高性能的需要,Kotlin 编译器会在 Java 字节码中改用基本数据类型

条件语句

a)表达式

\bullet if/else if 表达式。这与 java 是一样的;

\bullet range 表达式。in A..B,in 关键字用来检查某个值是否在指定范围之内。

示例

fun main() {val age = 5if (age in 0..3){println("婴幼儿")}else if (age in 3..12){println("少儿")}else{println("未知")}
}

打印结果

当然,in 后面还可以接 List、Set 和数组等。

\bullet when 表达式。在 kotlin 里面,switch/case 改成了 when 表达式,更简洁。允许你编写条件式,在某个条件满足时,执行对应的代码。注意:"->" 为 lambda 表达式。

    val school = "小学"val level:Any = when(school){"幼儿园" -> "幼儿""小学" -> "少年""中学" -> "青少年"else -> {println("未知")}}println(level)

level 变量接收 when 表达式的返回结果。打印如下

注意:在 Kotlin 中,只要代码包含 else if 分支,都建议改用 when 表达式。

*String 模板

模板支持在字符串的引号内放入变量值,通过 $ 符合加入。而在 java 中则是通过 + 号来完成。还支持字符串里计算表达式的值并插入结果,添加在 ${}中的任何表达式,都会作为字符串的一部分求值。

示例1:把变量的的值拼接到字符串里

val name = "HL"
val age = 17
println("My name is $name,and I am $age years old.")

示例2:计算表达式的值(${})并插入字符串里

    val flag = trueprintln("The answer is: ${if(flag) "我也喜欢你!" else "对不起,你是个好人!"}")

函数

函数头

包括:可见性修饰符(与 java 相同);函数声明关键字 fun;函数名;函数参数;返回类型。

示例1:返回 String 类型

private fun test(age : Int, name : String) : String{return "His name is $name, and he is $age years old."
}

示例2:无返回类型

// 无返回类型
private fun user(age : Int, name: String) {println("His name is $name, and he is $age years old.")
}

 注意:函数的返回类型放到最后了,这样更合理。传入参数在前,返回结果在后。即先有输入再有输出。

函数参数

\bullet 默认值参:如果不打算传入值参,可以预先给参数指定默认值

示例:

fun main() {user("HL")
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

注意:1)有默认值的参数必须放在最后,否则会报错。2)如果参数有默认值,如果在调用函数时仍然传入了新值,那么参数为传入的值

\bullet 具名函数参数:如果使用命名值参,就可以不用管值参的顺序。这一般在函数参数特别多的情况下可以这么做。

示例:

fun main() {user(name = "HL", sex = "男", age = 12)
}// 无返回类型
fun user(age : Int, name : String, sex : String) {println("His name is $name, and he is $age years old.")
}

在调用 user 函数传参时,指定 age, name, sex 参数名时,就可以不考虑它们在函数中的先后顺序。

Unit 函数

不是所有函数都有放回值,Kotlin 中没有返回值的函数叫 Unit 函数,也就是说他们的返回类型是 Unit。在 Kotlin 之前,函数不返回任何东西用 void 描述,意思是“没有返回类型,不会带来什么,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。但是,void 这种解决方案无法解释现代语言的一个重要特征,泛型

示例:

fun main() {println(user("HL"))
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

Nothing 类型

TODO 函数的任务就是抛出异常,就是永远别指望它运行成功,返回 Nothing 类型。

public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason")
fun main() {println(user("HL"))TODO("nothing")println("after TODO")
}// 无返回类型
fun user(name : String, age : Int = 5) {println("His name is $name, and he is $age years old.")
}

上述代码运行到 TODO() 函数时就直接抛了一个异常,结果如下。 

nothing 类型的实际作于:如果说想要像 TODO() 一样终止代码运行,又不返回什么东西,就可以返回一个 nothing 类型。

*反引号中的函数名

\bullet Kotlin 可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来。注意:是反引号不是单引号。

作用:比如有时需要测试时,函数名就可以叫做“test 某某函数” ,就可以加空格,就可以很清晰。

fun main() {`~~#@r0o_a123_special_&&&&&&2334`()
}fun `~~#@r0o_a123_special_&&&&&&2334`(){println("special fun name")
}

\bullet 为了支持 Kotlin 和 Java 互操作,而 Kotlin 和 Java 各自有着不同的保留关键字,不能作为函数名,使用反引号括住函数名就能避免任何冲突

示例: Kotlin 的 is 关键字

public class JavaClass {public static void is(){System.out.println("Is is the key word for kotlin.");}
}

上面是一段 java 代码,要做 kotlin 中调用此函数的 is() 方法,那么久需要用到反引号,否则会报错。如下

fun main() {JavaClass.`is`()
}

如果没有反引号,如下:is() 函数报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——期末考试复习资料

什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换:路由器转发报文; 电路交换:建立一对一电路 分组交换&a…

2024 年 SEO 现状

搜索引擎优化(SEO)一直以来都是网络知名度和成功的基石。随着我们踏上 2024 年的征程,SEO领域正在经历重大变革,有些变革已经开始,这对企业、创作者和营销人员来说既是挑战也是机遇。 语音搜索 语音搜索曾是一个未来…

可以组成网络的服务器 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C 题目描述 在一个机房中,服务器的位置标识在n*m的整数矩阵网格中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列…

HTML常用表单元素使用?

目录 一、常用表单元素使用的关键字二、常用表单元素使用的效果与作用(1)password : 保护用户的隐私(2) email: 输入邮件(比如QQ邮件)(3)、number : 输入框只能输入数字(4)、tel : 常用于输入电话号&#x…

Kubernetes实战(十二)-使用kubeconfig文件管理多套kubernetes(k8s)集群

1 概述 在生产环境中可能不止有一套kubernetes(k8s)集群,面对多套集群,运维人员可以使用kubeconfig文件管理多套kubernetes(k8s)集群,使用 kubeconfig 文件,可以组织集群、用户和命名空间,还可以定义上下文&#xff0…

深入理解模板引擎:解锁 Web 开发的新境界(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Axure安装及面板各区域详解

目录 一、Axure简介 二、Axure安装及使用准备 2.1 Axure官网 2.2 Axure授权 2.3 Axure汉化 2.4 设置RP文件保存路径 三、Axure菜单栏的使用 3.1 新建项目 3.2 新建元件库 3.3 自动备份设置 3.4 页面画布网格设置 四、Axure工具栏 4.1 选择模式 4.1.1 相交选中 4…

深度学习 Day15——P4猴痘病识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…

庙算兵棋推演平台配置

9月23开始,9月26完成。因为那时刚从大连回来,十一之后又一个紧急项目当项目负责人,所以隔了这么久才发出来。 我尝试进行制作平台AI,想在我的小平板上配好,最好还可以移植。于是我采用WSL(windows自带的do…

VSCode中如何查看EDI报文?

VSCode是开发人员常用的一款软件,为了降低EDI报文的阅读门槛,知行的开发人员设计了EDI插件,可以在VSCode中下载使用。 如何打开一个EDI报文——VSCode EDI插件介绍 EDI插件下载流程 进入VSCode,打开Extensions,在搜索…

Acrobat Pro中不能使用有道词典取词翻译

编辑–>首选项–>安全性(增强–>启动时启用保护模式(预览),取消前面的勾即可

uniapp - 简单版本自定义tab栏切换

tab切换是APP开发最常见的功能之一,uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言,使用tabbar组件非常方便快捷,可以快速实现底部导航栏的效果。对于比较复杂的页面,我们可以使用tab组件自由定义样式和内容 目录…

2023年医疗器械行业分析(京东医疗器械运营数据分析):10月销额增长53%

随着我国整体实力的增强、国民生活水平的提高、人口老龄化、医疗保障体系不断完善等因素的驱动,我国的医疗器械市场增长迅速。 根据鲸参谋电商数据分析平台的相关数据显示,今年10月份,京东平台上医疗器械市场的销量将近1200万,环比…

SU渲染受到电脑性能影响大吗?如何提高渲染速度

一般3d设计师们在进行设计工作前都需要提供一台高配电脑,那么你这知道su渲染对电脑要求高吗?电脑带不动su怎么解决?su对电脑什么配件要求高?今天这篇文章就详细为大家带来电脑硬件对su建模渲染的影响,以及su渲染慢怎么…

Python基础期末复习 新手 2

虽然age 10在__init__方法中定义了一个局部变量age,但这个局部变量并不会影响类属性age的值。类属性是在类级别上定义的,不属于任何一个实例。因此,在创建实例s1和s2时,它们的age属性值都为类属性的初始值0。 尽管对类的属性值进…

cache教程 5.分布式节点的通信

0.对原教程的一些见解 其回顾完请求流程就是抽象了两个接口,PeerPicker和PeerGetter。这样操作,读者阅读时可能很难快速明白其含义,不好理解为什么就创建出两个接口,感觉会比较疑惑。原教程的评论中也有讨论这点。 本教程就先不创…

Python爬取酷我音乐

🎈 博主:一只程序猿子 🎈 博客主页:一只程序猿子 博客主页 🎈 个人介绍:爱好(bushi)编程! 🎈 创作不易:喜欢的话麻烦您点个👍和⭐! 🎈…

pytest + yaml 框架 -59.用例失败重跑机制pytest-rerunfailures

前言 有些接口可能不太稳定,第一次跑的时候由于网络原因或者其它原因失败,但是重新跑2次又成功了。 对于这种需要重新跑几次的场景,可以使用用例失败重跑机制,需安装pytest-rerunfailures 插件。 场景示例 失败重跑需要依赖 py…

【Axure原型分享】3D多柱状图_中继器版

今天和大家分享3D多柱状图_中继器版的原型模板,鼠标移入时,对应区域的背景会高亮变色,并且显示对应柱状体的数据。那这个原型是用Axure原生元件制作的,样式交互都可以自行修改,图表数据在中继器表格里填写,…

【二者区别】cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…