Kotlin--1-基础语法
## 整体// // 1. 包声明与导入 (Package Imports) // package com.mobile.agent import java.util.Random // Kotlin 可以完美无缝地调用所有 Java 类库 // // 2. 数据类 (Data Class) — 极其适合用来封装智能体的各种“状态”或“消息” // // 【Java 对照】: 过去需要写 50 行代码 //Getter/Setter/toString/equals/hashCode或者用 Lombok 的 Data // 【Python 对照】: 相当于 Python 的 dataclass和pydantic不确定 // 【关键特性】: String? 这里的问号代表该字段“可为空”相当于 Python 的 str | None 或 Optional[str] data class BotConfig( val id: String, // val 只读变量Java 的 finalPython 无原生对应 val modelName: String, var temperature: Double 0.7 // var 可变变量 0.7 表示默认参数Java原生不支持默认参数Python支持 ) // // 3. 顶层函数 (Top-level Function) — 告别 Java 的“一切皆在类中”的限制 // // 【Java 对照】: 相当于工具类里的 public static 方法如 Math.abs() // 【Python 对照】: 正常的 def 函数 fun getWelcomeMessage(bot: BotConfig): String { // 字符串模板直接用 $ 注入变量大括号内可写表达式 // 【Java】: Bot: bot.getModelName() is ready. // 【Python】: fBot: {bot.modelName} is ready. return 智能体 [${bot.modelName}] 已就绪当前温度系数: ${bot.temperature} } // // 4. 程序入口 (Main Function) // fun main() { // 【实例化对象】: Kotlin 不需要写 new 关键字 // 【Java】: BotConfig agent1 new BotConfig(001, GPT-4, 0.5); // 【Python】: agent1 BotConfig(001, GPT-4, 0.5) val agent1 BotConfig(001, Qwen-Agent, 0.5) val agent2 BotConfig(002, DeepSeek-Mobile) // 触发默认参数 temperature 0.7 // 快捷创建不可变列表 (Java 需要 List.ofPython 直接 [item1, item2]) val agents listOf(agent1, agent2) println(getWelcomeMessage(agent1)) // // 5. 循环、空安全与分支控制 (Loop, Null Safety When) // for (agent in agents) { // 修改 var 变量如果是 val 编译会报错 agent.temperature 0.2 // 【空安全核心】: // ?. 是安全调用符如果 agent 整体或某个属性为 null不报空指针异常(NPE)直接返回 null // ?: 是 Elvis 操作符绝对防御如果左边算出来是 null就采用右边的默认值 // 【Java】: agent.getModelName() ! null ? agent.getModelName().toUpperCase() : UNKNOWN // 【Python】: agent.modelName.upper() if agent.modelName is not None else UNKNOWN val nameInCaps agent.modelName.uppercase() ?: UNKNOWN // 【when 表达式】: 功能极强的分支 // 【Java】: switch-case 的史诗级增强版支持任意类型、支持表达式 // 【Python】: Python 3.10 引入的 match-case when { agent.temperature 0.5 - println($nameInCaps: 当前处于精准生成模式) agent.temperature 0.7 - println($nameInCaps: 当前处于标准平衡模式) else - println($nameInCaps: 当前处于发散创造模式) } } // // 6. 高阶函数与 Lambda 表达式 (数据清洗/采集高频使用) // // 筛选出 temperature 小于 0.6 的智能体名字 // 【Java】: agents.stream().filter(a - a.getTemperature() 0.6).map(BotConfig::getModelName).collect(...) // 【Python】: [a.modelName for a in agents if a.temperature 0.6] (列表推导式) val preciseMethodNames agents .filter { it.temperature 0.6 } // it 是 Kotlin 中 Lambda 表达式只有一个参数时的默认别名 .map { it.modelName } println(精简模式智能体列表: $preciseMethodNames) }一、变量1、kotlin需要通过 val不可变、var可变进行定义变量。2、定义过程和py相似编译器自动识别类型也可提前定义变量类型。3、字符串变量定义String、String?其中带?表示该字符串可null。4、字符串模版格式化字符串通过$变量可以直接在字符串中引用该变量${name.length}可以引用该变量的属性。5、特殊基类定义Any——可以是任意类型类似【Java】Object 【Python】objectUnit——相当于 Java 的 voidPython 的 None通常作为无返回值函数的返回类型val count 10 // 自动推导为 Int无需显式写 : Int val price 99.9 // 自动推导为 Double val name Agent // 自动推导为 String val readOnly: String 我是只读的 // 【Java】final String 【Python】常量约定 // readOnly 修改 // ❌ 编译报错Val cannot be reassigned var mutable: String 我是可变的 // 【Java】String 【Python】普通变量 mutable 我被修改了 // 完全合法 var mutable: String 我是可变的且可为null val intNum: Int 42 // 32位整型 val longNum: Long 123456789L // 64位长整型末尾须加 L val floatNum: Float 3.14f // 32位浮点数末尾须加 f val doubleNum: Double 3.1415926 // 64位浮点数 val isAiActive: Boolean true // 布尔值 (注意小写 true) val charType: Char A // 单字符必须用单引号 // 4.1 字符串模板 (String Interpolation) val version v1.0 val templateStr 当前版本: $version, 名字长度: ${name.length} // 7. 特殊底层基类定义 val anyValue: Any 可以是任意类型 // 【Java】Object 【Python】object val unitValue: Unit Unit // 相当于 Java 的 voidPython 的 None //通常作为无返回值函数的返回类型1.1 定义Java File变量与惰性加载// 6.2 惰性加载/懒汉式初始化 (by lazy) — 专用于 val 变量 // 场景这个变量的创建非常消耗系统资源比如读取本地大模型权重文件我希望“只有在第一次用到它的时候”才去真正加载它。import java.io.File // 6.2 惰性加载/懒汉式初始化 (by lazy) — 专用于 val 变量 // 场景这个变量的创建非常消耗系统资源比如读取本地大模型权重文件我希望“只有在第一次用到它的时候”才去真正加载它。 val bigModelFile: File by lazy { println( [警告] 正在初次加载巨大的模型文件耗时严重...) // 只有第一次访问 bigModelFile 时才会打印 File(/sdcard/model.onnx) }1.2 .trimIndent().trimIndent() 用于自动去除前导空格也就是编辑器中的缩进。注意这里和python中的区别这里是会把缩进也作为字符串内容。fun main() { val price1.23 val jsonPrompt: String { model: qwen-turbo, temperature: $price, message: Hello \Agent\ } .trimIndent() // .trimIndent() 用于自动去除前导空格 val jsonPrompt2: String { model: qwen-turbo, temperature: $price, message: Hello \Agent\ } // .trimIndent() 用于自动去除前导空格 println(jsonPrompt) println(jsonPrompt2) } /**输出如下 { model: qwen-turbo, temperature: 1.23, message: Hello \Agent\ } { model: qwen-turbo, temperature: 1.23, message: Hello \Agent\ } */二、安全符// 【空安全核心】: //?.是安全调用符如果 agent 整体或某个属性为 null不报空指针异常(NPE)直接返回 null //?:是Elvis 操作符绝对防御如果左边算出来是 null就采用右边的默认值 //【Java】: agent.getModelName() ! null ? agent.getModelName().toUpperCase() : UNKNOWN//【Python】: agent.modelName.upper() if agent.modelName is not None else UNKNOWNval nameInCaps agent.modelName.uppercase() ?: UNKNOWN三、When相当于 java的switch-case// 【when 表达式】: 功能极强的分支 // 【Java】: switch-case 的史诗级增强版支持任意类型、支持表达式 // 【Python】: Python 3.10 引入的 match-case when { agent.temperature 0.5 - println($nameInCaps: 当前处于精准生成模式) agent.temperature 0.7 - println($nameInCaps: 当前处于标准平衡模式) else - println($nameInCaps: 当前处于发散创造模式) }四、高阶函数与Lambda表达式val aaabbb.filter{条件}.map{目标}。即 bbb满足条件时将目标作为aaa的值。下述中it即表示bbb// 6. 高阶函数与 Lambda 表达式 (数据清洗/采集高频使用) // // 筛选出 temperature 小于 0.6 的智能体名字 // 【Java】: agents.stream().filter(a - a.getTemperature() 0.6).map(BotConfig::getModelName).collect(...) // 【Python】: [a.modelName for a in agents if a.temperature 0.6] (列表推导式) val preciseMethodNames agents .filter { it.temperature 0.6 } // it 是 Kotlin 中 Lambda 表达式只有一个参数时的默认别名 .map { it.modelName }

相关新闻