Kotlin 中变量,类型,表达式,函数详解

news2024/11/28 6:46:34

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家
👉点击跳转到教程

一、变量,编译时变量
1、要声明可修改变量,使用var关键字。
2、要声明只读变量,使用val关键字。
在这里插入图片描述

/**
 1. 编译时常量:
 2. 1.只读变量并非绝对只读
 3. 2.编译时常量只能在函数之外定义,因为编译时常量必须在编译时赋值,而函数都是在运行时才调用
 4. 函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已存在。
 5. 3.编译时常量只能是常见的基本数据类型:String、Int、Double、Float、Long、Short、Byte、Short、Char、Boolean
 */
const val MAX = 200 //编译常量,对应于java中的public static final 类加载的时候已经被初始化。
fun main() {
	//类型推断:对于已声明并赋值的变量,它允许你省略类型定义。
    val a: Int = 5
    val str: String = "HELLO"
    println(str)
    println(a)
}

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

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

三、Kotlin内置数据类型

在这里插入图片描述

四、表达式和String模板

1、表达式

//表达式
//1.if/else if表达式
//2.range表达式
//in A..B,in关键字来检查某个值是否在指定的范围之内
fun main() {
    val age = 4
    if (age in 0..3) {
        println("婴幼儿")
    } else if (age in 3..12) {
        println("少儿")
    } else {
        println("未知")
    }

    if (age !in 1..3) {
        println("测试一下")
    }

    /**
     * when表达式
     * 1.允许你编写条件式,在某个条件满足时,执行对应的代码
     * 2.只要代码包含if,else分支,都建议改用when表达式
     */
    val school = "小学1"
    val level = when (school) {
        "学前班" -> "幼儿"
        "小学" -> "少儿"
        "中学" -> "青少年"
        else -> {
            println("未知")
        }
    }
    println(level)
}

输出结果:

少儿
测试一下
未知
kotlin.Unit

2、String模板

  1. 模板支持在字符串的引号内放入变量值
  2. 还支持字符串里计算表达式的值并插入结果,添加在${}中的任何表达式,都会作为字符串的一部分求值。
fun main() {
    val origin = "Jack"
    val dest = "Rose"
    println("$origin love $dest")

    val flag = false
    println("Answer is:${if (flag) "我可以" else "对不起"}")
}

输出结果:

Jack love Rose
Answer is:对不起

五、创建函数

1、函数结构如下

在这里插入图片描述

fun main() {
    println(doSomething(18, false))
    println(fix("Jack"))
    /**
     * 具名函数参数
     * 如果使用命名值,就可以不用管值参的顺序
     */
    println(fix(age = 19, name = "Herr"))
    /**
     * 输出结果:
     * Herr19
     * Kotlin.Unit (这个说明该函数没有返回值,没有返回值的函数叫Unit函数,也就是说他们的返回类型是Unit)
     */
    /**
     * Unit函数:
     * 不是所有的函数都有返回值,Kotlin中没有返回值的函数叫Unit函数,也就是说他们的返回类型是Unit.
     * 在kotlin之前,函数不返回任何东西用void描述,意思是'没有返回类型,不会带来什么,忽略它',也就是说
     * 如果函数不返回任何东西,就忽略类型。但是void这种解决方案无法解释现代语言的一个重要特征,泛型。
     */

    /**
     * TODO函数的任务就是抛出异常,就是永远别指望它运行成功,返回Nothing类型。
     */
    TODO("nothing")
    println("after nothing")
}

//不加可见修饰符,默认为public
fun doSomething(age: Int, flag: Boolean): String {
    return "result"
}

/**
 * 默认值参,如果不打算传入值参,可以预先给参数指定默认值
 */
private fun fix(name: String, age: Int = 2) {
    println(name + age)
}

输出结果:

result
Jack2
kotlin.Unit
Herr19
kotlin.Unit
Exception in thread "main" kotlin.NotImplementedError: An operation is not implemented: nothing
	at kotlin01.FuncationKt.main(Funcation.kt:26)
	at kotlin01.FuncationKt.main(Funcation.kt)

2、反引号中的函数名

/**
 * 反引号中的函数名
 * 1.kotlin可以使用空格和特殊字符对函数命名,不过函数名要用一对反引号括起来
 * 2.为了支持Kotlin和Java互操作,而Kotlin和Java各自却有着不同的保留关键字,不能作为函数名,
 * 使用反引号括住函数名就能避免任何冲突
 */
fun main() {
    //kotlin调用java代码
    MyJava.`is`()
    `**~special funcation with weired name~**`()
}

fun `**~special funcation with weired name~**`() {
    println("special funcation with weired name")
}

输出结果:

is invoked
special funcation with weired name

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

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

相关文章

35岁高龄程序员的 4 条出路,提早布局,避免出局!

目录 一、40岁回首往事:自己竟没有任何核心优势二、公司遇到危机时40岁大龄程序员会怎么样三、适合大龄程序员的几条职业发展路线四、最后的寄语 这篇文章,给大家聊聊Java工程师的职业发展规划的一些思考,同时也给不少20多岁、30多岁&#…

Spark 运行架构

文章目录Spark 运行架构一、运行架构二、核心组件1、Driver2、Executor3、Master & Worker4、ApplicationMaster三、核心概念1、Exuecutor 和 Core2、并行度(Parallelism)3、有向无环图(DAG)4、提交流程Yarn Client 模式Spark…

Spring Cloud Gateway(黑马springcloud笔记)

Gateway 目录Gateway一、为什么需要网关二、gateway入门三、断言工厂四、过滤器工厂五、全局过滤1. 实现2. 过滤器执行顺序六、跨域问题一、为什么需要网关 不能让外部能够直接访问微服务,而是需要通过网关访问: 网关的作用: 身份认证和权限…

数据结构与算法基础(王卓)(8):线性表的应用(并集和有序表合并)

PPT&#xff1a;第二章P173&#xff1b; 并集集合&#xff1a;线性表的合并&#xff08;无需有序&#xff0c;不能重复&#xff09; 线性表&#xff1a; Status Union(Sqlist& A, Sqlist& B)//并集 {int len_A A.length;int len_B B.length;for (int i 1; i < …

研究生如何能(较快)找出某领域(去噪)已有算法的创新点或者引入其他领域的新算法?

广义上说&#xff0c;滤波就是给不同的信号分量分配不同的权重&#xff0c;较为复杂的维纳滤波, 是根据信号的统计量设计权重。狭义上说&#xff0c;降噪/去噪&#xff0c;可以看成滤波的一种。降噪的目的在于突出信号本身而抑制噪声影响。从这个角度&#xff0c;降噪就是给信号…

C/C++ 调用规则

平栈&#xff1a;清理参数对调用栈的操作步骤&#xff1a;参数传递三种调用约定&#xff1a;cdecl &#xff08;C调用约定&#xff09;:从右往左传参&#xff0c;参数通过栈传递&#xff0c;调用方(caller)负责平参&#xff08;支持类似printf的不定参&#xff09;stdcall (标准…

hadoop简介

文章目录1&#xff1a;hadoop简介2&#xff1a;Hadoop系统2.1&#xff1a;hadoop架构1&#xff1a;MapReduce2&#xff1a;YARN架构3&#xff1a;HDFS2.2&#xff1a;HDFS、YARN、MapReduce三者关系1&#xff1a;hadoop简介 Hadoop是一个由Apache基金会所开发的分布式系统基础…

如何快速删除CSV、Excel、Markdown表格的重复行?

如果你正在使用 CSV、Excel 或 Markdown 表格&#xff0c;你可能会遇到重复行的问题。这可能是因为你手动输入了重复的数据&#xff0c;或者是因为你从其他源导入了重复的数据。无论原因是什么&#xff0c;删除重复行是一项重要的数据清理任务。本文将向你展示如何使用几种不同…

RESTful的风格提倡 URL 地址使用统一的风格设计

RESTful概念实现REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。资源&#xff1a;资源是一种看待服务器的方式&#xff0c;即&#xff0c;将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。资源的表述资源的表…

nnUNet 训练 AMOS22数据集 Task216(抽丝剥茧指令+原理篇)

环境准备篇 安装hiddenlayer&#xff08;用来生成什么网络拓扑图&#xff1f;管他呢&#xff0c;装吧&#xff09; pip install --upgrade githttps://github.com/nanohanno/hiddenlayer.gitbugfix/get_trace_graph#egghiddenlayer 安装环境&#xff0c;由于服务器已经装好py…

网络安全日益严峻下计算机主机加固的意义

​ 近年来&#xff0c;计算机以及互联网应用在中国得到普及和发展&#xff0c;已经深入到社会每个角落&#xff0c;政府&#xff0c;经济&#xff0c;军事&#xff0c;社会&#xff0c;文化和人们生活等各方面都越来越依赖于计算机和网络&#xff0c;电子政务&#xff0c;无纸办…

【计算机体系结构】指令集体系结构、微体系结构简介

1. “虚拟” to “现实” 首先可以看这张图片&#xff0c;下面的 Physics 所指的是我们的物理世界中看得见摸得到或者是客观存在的事物&#xff0c;而人类希望将自己的工作内容或者需求以某种方式映射到物理层面上&#xff0c;用物理变化带来的影响来完成人类工作内容。例如早期…

《Linux Shell脚本攻略》学习笔记-第二章

2.1 简介 本章将为你介绍一些最值得关注同时也是最实用的命令。 2.2 用cat进行拼接 cat命令能够显示或者拼接文件内容。cat能够将标准输入数据与文件数据组合在一起。 通常的做法是将stdin重定向到一个文件&#xff0c;然后再合并两个文件。而cat命令一次就能搞定这些操作。 1&…

【Linux】基础常见指令

目录​​​​​​​ 前言 一、Linux的环境搭建与远程控制 Linux 环境的搭建方式主要有三种 使用 XShell 远程登陆到 Linux 二、常见指令 1. ls 指令 2. pwd命令 3. cd 指令 4. touch指令 5. mkdir指令 6. rmdir指令 && rm 指令 7. man指令 8. cp指令 9. mv指令 10.…

【微信小程序】实用教程02-添加全局页面配置、页面、底部导航

开始前&#xff0c;请先完成项目创建&#xff0c;详见 【微信小程序】实用教程01-注册登录账号&#xff0c;获取 AppID、下载安装开发工具、创建项目、上传体验 前期准备 因我们的项目是根据模板创建的&#xff0c;需先清理掉无效的页面代码&#xff0c;具体操作方式如下&…

LeetCode 64. 最小路径和

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 64. 最小路径和&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 64…

【Redis】使用阻塞队列+Redis优化秒杀业务

【Redis】使用阻塞队列Redis优化秒杀业务 文章目录【Redis】使用阻塞队列Redis优化秒杀业务1. 为什么要优化2. 怎么优化2.1 查询优惠卷2.2 判断秒杀库存2.3 校验一人一单2.4 减库存2.5 创建订单2.6 保证redis操作的原子性3. 确认优化方案4. 实现优化方案4.1 编写lua脚本4.2 定义…

jvm系列(3)--运行时数据区Runtime

目录运行时数据区概述及线程前言运行时数据区结构运行时数据区与内存线程的内存空间Runtime类线程JVM 线程JVM 系统线程程序计数器(PC寄存器)PC寄存器介绍PC寄存器的作用举例两个面试题CPU 时间片本地方法接口本地方法举例为什么要使用 Native Method&#xff1f;与Java环境外交…

Tomcat打破双亲委派模型

tomcat的类加载器结构tomcat的类加载&#xff08;loadClass&#xff09;过程和原本的双亲委派模型思路差不多&#xff0c;先看有没有加载过。先在本地 Cache 查找该类是否已经加载过&#xff0c;也就是说 Tomcat 的类加载器是否已经加载过这个类。如果 Tomcat 类加载器没有加载…

【学习笔记】【Pytorch】张量(Tensor)的基础操作

【学习笔记】【Pytorch】张量&#xff08;Tensor&#xff09;的基础操作一、创建张量1.使用数据创建张量2.无需数据的创建选项3.torch.Tensor与torch.tensor的区别4.PyTorch中张量的创建方法的选择二、张量的属性1.张量的 torch.dtype2.张量的 torch.device3.张量的 torch.layo…