Android---Kotlin 学习002

news2024/11/17 11:32:07

声明变量

在 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 = 5
    println(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 = 5
    if (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 = true
    println("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.coloradmin.cn/o/1303287.html

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

相关文章

C# OpenCvSharp DNN 部署FastestDet

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN 部署FastestDet 效果 模型信息 Inputs ------------------------- name:input.1 tensor:Float[1, 3, 512, 512] --------------------------------------------------------------- Outpu…

QT----第二天QMainWindow,各种控件

目录 第二天1 QMainWindow1.1 菜单栏1.2工具栏1.3 状态栏1.4 铆接(浮动窗口)和中心部件(只能由一个)2 资源文件添加 3、对话框Qdialog3.2 模态和非模态对话框3.2 消息对话框3.3 其他对话框 4 登陆界面5 按钮组控件5.1QToolButton5…

机器学习中的 Transformation Pipelines(Machine Learning 研习之十)

Transformation Pipelines 有许多数据转换步骤需要以正确的顺序执行。幸运的是,Scikit-Learn提供了Pipeline类来帮助处理这样的转换序列。下面是一个用于数值属性的小管道,它首先对输入特性进行归并,然后对输入特性进行缩放: from sklearn.…

Nginx访问FTP服务器文件的时效性/安全校验

背景 FTP文件服务器在我们日常开发中经常使用,在项目中我们经常把FTP文件下载到内存中,然后转为base64给前端进行展示。如果excel中也需要导出图片,数据量大的情况下会直接返回一个后端的开放接口地址,然后在项目中对接口的参数进…

微信小程序 ios 手机底部安全区适配

在开发微信小程序中,遇到 IOS 全面屏手机,底部小黑条会遮挡页面按钮或内容,因此需要做适配处理。 解决方案 通过 wx.getSystemInfo() 获取手机系统信息,需要拿到:screenHeight(屏幕高度)&#…

持续集成交付CICD:GitLabCI上传Nexus制品

目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI(引用系统变量) 3.添加if条件判断项目类型 4.优化GitLabCI(模板类) 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Packag…

学习pytorch19 pytorch使用GPU训练2

pytorch使用GPU训练2 第二种使用gpu方式核心代码代码 macbook pro m1/m2 用mps , 是苹果arm芯片的gpu 第二种使用gpu方式核心代码 # 设置设备 device torch.device(cpu) # 使用cpu device torch.device(cuda) # 单台gpu device torch.device(cuda:0) # 使…

基于大语言模型的复杂任务认知推理算法CogTree

近日,阿里云人工智能平台PAI与华东师范大学张伟教授团队合作在自然语言处理顶级会议EMNLP2023上发表了基于认知理论所衍生的CogTree认知树生成式语言模型。通过两个系统:直觉系统和反思系统来模仿人类产生认知的过程。直觉系统负责产生原始问题的多个分解…

打包CSS

接上一个打包HTML继续进行CSS的打包 1.在之前的文件夹里的src文件夹创建一个css文件 2.在浏览器打开webpack——>中文文档——>指南——>管理资源——>加载CSS 3.复制第一句代码到终端 4.复制下图代码到webpack.config.js脚本的plugins:[.....]内容下…

计算机循环神经网络(RNN)

计算机循环神经网络(RNN) 一、引言 循环神经网络(RNN)是一种常见的深度学习模型,适用于处理序列数据,如文本、语音、时间序列等。RNN通过捕捉序列数据中的时间依赖关系和上下文信息,能够解决很…

网络编程_网络编程三要素,TCP协议,UDP协议

网络编程 文章目录 网络编程1 网络编程三要素1.1 IP地址1.1.1 IP地址分为两大类1.1.2 DOS常用命令1.1.3 特殊IP地址 1.2 InetAddress类_表示IP地址的类1.2.1 相关方法1.2.2 示例 1.3 端口和协议1.3.1 端口与端口号1.3.2 协议1.3.3 UDP协议1.3.4 TCP协议 2 UDP通信程序2.1 UDP发…

Leetcode 1631. 最小体力消耗路径

一、题目 1、题目描述 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意…

启动cad显示丢失mfc140u.dll怎么办?mfc140u.dll丢失有效解决方法分享

在CAD软件或其他软件中,有时候会出现由于找不到mfc140u.dll文件而无法执行代码的错误提示。这个问题可能是由于多种原因引起的,例如文件损坏、缺失或被病毒感染等。下面将介绍五个常见的解决方法,并解释mfc140u.dll丢失的原因以及该文件对CAD…

【BI】FineBI功能学习路径-20231211

FineBI功能学习路径 https://help.fanruan.com/finebi/doc-view-1757.html 编辑数据概述 1.1 调整数据结构 1.2 简化数据 2.1上下合并 2.2其他表添加列 2.3左右合并 新增分析指标 函数参考 https://help.fanruan.com/finereport/doc-view-1897.html 数值函数 日期函数 文…

数据结构与算法-Rust 版读书笔记-2线性数据结构-栈

数据结构与算法-Rust 版读书笔记-2线性数据结构-栈 一、线性数据结构概念 数组、栈、队列、双端队列、链表这类数据结构都是保存数据的容器,数据项之间的顺序由添加或删除时的顺序决定,数据项一旦被添加,其相对于前后元素就会一直保持位置不…

目标检测——R-FCN算法解读

论文:R-FCN: Object Detection via Region-based Fully Convolutional Networks 作者:Jifeng Dai, Yi Li, Kaiming He and Jian Sun 链接:https://arxiv.org/pdf/1605.06409v2.pdf 代码:https://github.com/daijifeng001/r-fcn 文…

【开源】基于Vue和SpringBoot的森林火灾预警系统

项目编号: S 019 ,文末获取源码。 \color{red}{项目编号:S019,文末获取源码。} 项目编号:S019,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

CodeGeeX发布HBuilderX插件,助力VUE开发效率提升

北京时间2023年12月8日,CodeGeeX正式发布了适配国产IDE平台HBuilderX的插件。这款插件的推出,使得使用HBuilderX作为开发环境的程序员可以在IDE和AI辅助编程工具之间做出选择。 CodeGeeX:基于大模型的AI智能编程助理 CodeGeeX是一款基于大模…

Hbase2.5.5分布式部署安装记录

文章目录 1 环境准备1.1 节点部署情况1.2 安装说明 2 Hbase安装过程Step1:Step2:Step3:Step4: 3 Web UI检查状态并测试3.1 Web UI3.2 创建测试命名空间 1 环境准备 1.1 节点部署情况 Hadoop11:Hadoop3.1.4 、 zookeeper3.4.6、jdk8 Hadoop1…

【JavaWeb学习专栏 | CSS篇】css简单介绍 css常用选择器集锦

个人主页:[兜里有颗棉花糖(https://xiaofeizhu.blog.csdn.net/) 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaWeb学习专栏】【Java系列】 希望本文内容可以帮助到大家,一起加油吧!…