2.Android Compose 基础系列:在 Kotlin 中创建和使用变量

news/2025/10/6 12:38:09/文章来源:https://www.cnblogs.com/woblog/p/19127494

2.Android Compose 基础系列:在 Kotlin 中创建和使用变量

在应用开发中,有些内容是固定的,例如“设置”中的菜单项;而有些内容会不断变化,比如新闻应用中的标题、来源或发布时间。为了让这些变化自动更新,而不是每次都修改代码,我们需要使用 变量(variable)

🎯 学习目标

  • 了解什么是变量,并学会定义和更新变量
  • 掌握如何为变量选择合适的数据类型
  • 学会在代码中添加注释,提升可读性

什么是变量

在编程中,变量就像一个带标签的盒子,用来存放某个数据值。

  • 标签(变量名):告诉我们盒子里装的是什么
  • 盒子里的值:就是存放的数据

举个例子:

  • 盒子外写着 name(表示名字)
  • 盒子里放着 "Alex"(表示名字的值)

当你想修改名字时,只需替换盒子里的值,而不必修改整个程序。

为什么需要变量

如果在代码中直接写死所有值,程序只能应对特定情况。
使用变量就像写信时使用模板,只需替换不同内容即可应对多种情况:

尊敬的 { name }:
您好!很高兴今天能在 { location } 与您会晤。希望 { date } 还能见到您。
祝您天天好心情!

同样地,在应用中,你可以用变量来代替变化的数据:

  • 👤 用户名:name
  • 📍 地点:location
  • ⏰ 时间:date

这样,应用就能根据不同用户或场景自动生成对应内容,而不需要每次都重新编写逻辑。

📊Kotlin 常见数据类型

在定义变量时,需要指定变量能存储的数据类型。Kotlin 提供了丰富的基本类型:

类型分类 数据类型 示例值 说明
整数类型 (整型) Byte 127 8位有符号整数(范围:-128 ~ 127)
Short 32767 16位有符号整数(范围:-32768 ~ 32767)
Int 2147483647 32位有符号整数(范围:-2³¹ ~ 2³¹-1)
Long 9223372036854775807L 64位有符号整数(需以 L 结尾)
浮点类型 Float 3.14f 32位单精度浮点数(需以 f 结尾)
Double 3.1415926 64位双精度浮点数(默认浮点类型)
字符类型 Char 'A' 单个字符,使用单引号包裹
布尔类型 Boolean true / false 逻辑真值类型
字符串类型 String "Hello" 字符序列,可用 """ 创建多行字符串
数组类型 Array arrayOf(1, 2, 3) 可存储任意类型的元素
集合类型 List listOf("A", "B") 不可变列表
MutableList mutableListOf(1, 2, 3) 可变列表
Set setOf("A", "B") 不可变集合(自动去重)
MutableSet mutableSetOf("A", "B") 可变集合
Map mapOf("key" to "value") 不可变键值对集合
MutableMap mutableMapOf("k" to "v") 可变键值对集合
空类型 Any 任意类型值 Kotlin 所有类的超类
Unit Unit 表示无返回值(相当于 Java 的 void
Nothing - 表示不会返回(如抛异常的函数)
可空类型 String?, Int? null 允许存储 null 值的类型

🎯 变量类型实际使用示例

地图应用

  • 📍 地点名称:String
  • ⭐ 星级评分:Double
  • 💬 评论数量:Int
  • ❤️ 是否收藏:Boolean

视频应用

  • 🎬 视频标题:String
  • 📺 频道名称:String
  • 👀 播放次数:Int

🧩 定义变量

定义变量的语法如下:

val 变量名: 数据类型 = 初始值

定义变量语法

示例:

fun main() {val count: Int = 2println(count)
}

输出结果:

2

提示:

val 表示不可变变量(定义后不能修改值)

var 表示可变变量(定义后可重新赋值)

类型推断

如果 Kotlin 能根据初始值判断类型,则可以省略类型声明:

val count = 2   // 自动推断为 Int

若未赋初始值,必须明确指定类型:

val count: Int //但直接这样写,会报错,要用后面讲解的其他只是修复

使用变量与字符串模板

要在字符串中插入变量值,可使用 字符串模板:

fun main() {val count = 10println("You have $count unread messages.")
}

输出:

You have 10 unread messages.

${} 可在字符串中放入表达式,例如:

println("Total: ${5 + 3}")

基本数学运算

整数变量可以直接参与运算,例如加减乘除:

fun main() {val unreadCount = 5val readCount = 100println("You have ${unreadCount + readCount} total messages.")
}

输出:

You have 105 total messages.

4. 更新变量

在应用程序运行时,可能需要更新变量的值。例如购物车总金额会随用户操作而变化。

val 与 var

  • val:只读变量,值不可更改。
  • var:可变变量,值可更新。

示例:

fun main() {var cartTotal = 0       // 声明可变变量println("Total: $cartTotal")cartTotal = 20          // 更新变量值println("Total: $cartTotal")
}

输出:

Total: 0
Total: 20

增量运算符和减量运算符

可以使用表达式更新变量,例如增加或减少值:

fun main() {var count = 10println("You have $count unread messages.")count = count + 1       // 增加 1println("You have $count unread messages.")count++                 // 使用增量运算符,等同于 count = count + 1println("You have $count unread messages.")count--                 // 使用减量运算符,等同于 count = count - 1println("You have $count unread messages.")
}
You have 10 unread messages.
You have 11 unread messages.
You have 12 unread messages.
You have 11 unread messages.

提示:只有在变量值会发生变化时使用 var,否则优先使用 val 以保证代码安全。

其他数据类型

Double

用于存储小数,精度比 Float 高。

示例:

fun main() {val trip1 = 3.20val trip2 = 4.10val trip3 = 1.72val totalTripLength = trip1 + trip2 + trip3println("$totalTripLength miles left to destination")
}

输出:

9.02 miles left to destination

String

用于存储文本,用双引号包裹。可通过 + 进行字符串拼接。

fun main() {val nextMeeting = "Next meeting: "val date = "January 1"val reminder = nextMeeting + date + " at work"println(reminder)
}

输出:

Next meeting: January 1 at work

字符串中使用引号需要转义:

fun main() {println("Say \"hello\"")
}

输出:

Say "hello"

Boolean

只有两个可能值:true 或 false。常用于表示开关状态或条件判断。

fun main() {val notificationsEnabled = falseprintln(notificationsEnabled)println("Are notifications enabled? " + notificationsEnabled)
}

输出:

false
Are notifications enabled? false

编码规范

在 Kotlin 中,建议遵循以下编码规范,这是 Google 推荐使用并且其他专业开发者也在遵循的一种 Android 代码统一编写方式:

  1. 变量命名
    • 使用 驼峰命名法(camelCase),以小写字母开头。
  val discount: Double = 0.20
  1. 类型声明空格

冒号后添加一个空格。

val discount: Double = 0.20
  1. 运算符空格
  • 赋值运算符 =

  • 加号 +、减号 -、乘号 *、除号 / 前后都应有空格。

var pet = "Dog"
val sum = 1 + 2
  1. 行长度

每行代码建议不超过 100 个字符,方便阅读和维护。

在代码中添加注释

编写代码时,建议使用注释说明代码用途,帮助读者理解。

单行注释

使用 //,通常在符号后添加一个空格:

// 这是一个注释
height = 1 // 假设初始高度为 1

多行注释

使用 /* ... */,适合超过 100 个字符的长注释:

/** 这是一个很长的注释* 可以占用多行,只需要开始和结束,中间的*是为了好看写的*/

示例:单行注释与多行注释结合

/** 该程序显示用户收件箱中的消息数量*/
fun main() {// 创建一个变量表示未读消息数量var count = 10println("You have $count unread messages.")// 将消息数量减少 1count--println("You have $count unread messages.")
}

💡 提示:在常见的编辑器中输入注释时,IDE 会提供自动提示和快捷键支持,帮助你快速书写注释。注释里面的*不需要手动写完,编辑器会自动生成,后面章节会详细讲解。现在主要是让大家了解注释的作用。

总结

做得很好!您已经了解了 Kotlin 中的变量及其用途,掌握了如何创建、更新和使用变量,尝试了不同的基本数据类型(Int、Double、String、Boolean),并了解了 valvar 的区别。

核心要点

  • 变量是存储单项数据的容器。
  • 必须先声明变量,才能使用。
  • val 用于定义只读变量,一旦赋值不可更改。
  • var 用于定义可变变量,可以更新值。
  • Kotlin 中建议尽可能使用 val
  • 变量声明示例:val count: Int = 2
  • 类型推断:提供初始值时可省略数据类型。
  • 常见基本类型:Int、Double、String、Boolean、Float。
  • 更新变量使用赋值运算符 =
  • 只有 var 声明的变量才能被更新。
  • 增量运算符 ++ 用于加 1,减量运算符 -- 用于减 1。
  • 可用于字符串拼接,也可将其他类型(如 Int、Boolean)拼接到字符串。

📖 引用与版权说明

  • 本文内容部分参考自 Kotlin 官方文档 及 Android Developers 官方指南,并结合作者的实战经验进行讲解与整理。
  • 文中图片(如代码结构示意图)来源于官方图床或官方文档示例,仅用于教学与学习目的。
  • 代码示例均为原创或根据官方示例改写,遵循 Apache License 2.0 协议。
  • 若涉及版权问题或引用不当,请联系作者进行处理。

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

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

相关文章

wordpress开启多站点好处西安网站建设winkuo

shutil.copyfileobj() 是 Python 的 shutil 模块中用于复制文件对象内容的一个函数。它可以将一个文件对象的内容复制到另一个文件对象中。 shutil.copyfileobj(fsrc, fdst, length16*1024) fsrc: 源文件对象,即要从中复制内容的文件对象。fdst: 目标文件对象&…

线性表的顺序存储和链式存储

目录核心概念一、顺序存储(顺序表)1. 核心特点2. 实现方式3. 基本操作分析4. 优缺点总结二、链式存储(链表)1. 核心特点2. 实现方式(以单链表为例)3. 基本操作分析4. 优缺点总结三、对比总结表四、如何选择?核心…

AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用 - 实践

AWS WebRTC:获取ICE服务地址(part 3):STUN服务和TURN服务的作用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

完整教程:进阶配置与优化:配置 HTTPS 以确保数据安全传输

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

贵州省城乡和住房建设厅官方网站网络方案设计与实现

二、用go语言,给定一个n结点的二叉树,写出一个 O(n)时间的递归过程,将该树每个结点的关键字输出。 文心一言: 在Go语言中,你可以使用递归函数来遍历二叉树的所有节点,并输出每个节点的关键字。以下是一个…

Python中的对象池与驻留机制:小整数、字符串与大整数

Python中的对象池与驻留机制:小整数、字符串与大整数 Python为优化内存使用和执行效率,设计了多种对象复用机制,其中最典型的是小整数对象池、字符串驻留(intern)机制和大整数对象池。以下是整理后的详细说明,包…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

1.算法运行效果图预览 (完整程序运行后无水印)2.算法运行软件版本 matlab2024b3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)global MR%表示接收天线的数量 global MT%表示发射天线的数量 global mods…

厦门做返利网站的公司室内设计培训网课

1、# 创建数据库语句create database mydb default character set utf8;# 运用数据库语句use mydb;# 创建表格,这里只简单的创建一张表格# 设置InnoDB主要是为了事务操作的需要create table mytable(id int primary key auto_increment,name varchar(20),count int …

python网站开发 django沈阳网站哪家公司做的好

1. escape 和 unescapeescape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。采用unicode字符集对指定的字符串除0-255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在…

微服务各个部分的作用 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

US$34.2 KEYDIY KD B27-3 Universal Flip Remote 3 Buttons for Audi Type 5pcs/lot

KEYDIY KD B27-3 Universal Flip Remote 3 Buttons for Audi Type 5pcs/lotProduct Specifications:Manufacturer: KEYDIY Condition: New Color: Black Buttons: 3 Transponder: No Proximity / Smart / Keyless Go: …

郴州网站建设公司电话不备案域名能用吗

网络安全和内容交付网络(CDN)之间有着密切的关系。网络安全主要涉及保护网络和系统免受各种威胁和攻击,而CDN是一种用于提供更快速、高效和可靠的内容交付服务的技术。在当今数字化和云计算时代,网络安全和CDN之间的关系变得更加紧…

网站导航图怎么做的详细步骤wordpress默认分类链接

1 帐号管理、认证授权 1.1 账号管理 1.1.1 ELK-Huawei-01-01-01 编号: ELK-Huawei-01-01-01 名称: 无效帐户清理 实施目的: 删除与设备运行、维护等工作无关的账号 问题影响: 账号混淆,权限不明确&#…

计算机网站开发要考什么证网站文章怎么做才能被收录

目录 一、准备工作 1.环境相关 2.Unity中配置 二、热更新 1.创建 HotUpdate 热更新模块 2.安装和配置HybridCLR 3.配置PlayerSettings 4.创建热更新相关脚本 5.打包dll 6.测试热更新 一、准备工作 1.环境相关 安装git环境。Win下需要安装visual studio 2019或更高版…

点乘与叉乘的由来:从四元数到公理自洽的启示

一、背景:从实数到高维数的追求 人类在数学史上不断尝试扩展“数”的概念:实数用于度量线上的长度; 复数将数延伸到平面,引入虚数单位 (i),满足 (i^2 = -1)。哈密顿(William Rowan Hamilton)在19世纪中叶尝试将…

【算法深练】分组循环:“分”出条理,化繁为简 - 教程

【算法深练】分组循环:“分”出条理,化繁为简 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

网站建设竞争对数分析江苏建设集团招聘信息网站

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析,亿欧汽车认为,除技术解决方案提供商外,如今的车企、政府、资本同样在产业链中扮演重要角色。此外,车路协同技术的发展也为高等级自动驾驶的发展提供了更…

java学习日记10.5

运算符 优先级 最高括号 ( ) [ ] 后缀自增/自减 i++/i--单目运算符前缀自增/自减、正负号、按位取反、逻辑非 i++/i--、+/-、~、!强制类型转换 (int)算术运算符乘、整除、求模 *、/、% 加、减 +、-位运算符与移…

US$34.2 KEYDIY KD B11-3 Universal Flip Remote Key 3 Buttons for PSA Type 5pcs/lot

KEYDIY KD B11-3 Universal Flip Remote Key 3 Buttons for PSA Type 5pcs/lotProduct Specifications:Manufacturer: KEYDIY Condition: New Color: Black Buttons: 3 Panic: No Transponder: No Proximity / Smart /…

帮做简历哪个网站好国内最新新闻摘抄30字

关于JavaScript中日期对象使用方法: 一般有两种设置时间的方式: 一种是直接指定,如:date.setHours(13);    //指定date的时间为下午1点。 第二种是先获取时间进行计算,然后再进行设置,如: d…