Kotlin vs Dart:当“优雅”变成心智负担,我选择了更简单的 Dart
大家好,我是老刘

老刘做Flutter开发有7年了差不多。
我记得早先的时候还经常有人讨论为啥Flutter没有选择kotlin而是选了dart。
当时我罗列和很多原因,同时也说过我个人其实是很喜欢Kotlin的。
想当年,Kotlin 就是拯救我们脱离Ja va 苦海的。
优雅的 Lambda 表达式、丝滑的集合操作符,效率直接起飞。
但是这两年我发现自己越来越不喜欢用kotlin 而是更适应dart了。
你可能会说:“老刘,这是因为你最近只写 Flutter 吧?”
确实,Flutter的开发工作占比重很大是一个因素。
但如果仅仅是因为框架绑定,还不足以让我改变对一门语言的喜好程度。这背后,其实有着自己对编程的理解和思考。
Kotlin 很强,但 Dart 更香
Kotlin 确实是个强大的语言,各种语法糖简直甜到心里。
空安全、扩展函数、高阶函数,用起来那是真香。
但是,这种强大是要付出代价的,而这个待机通常是开发人员的心智成本。
写 Kotlin 的时候,我脑子里经常要多跑一个线程:这块逻辑是用 apply 还是 also?是用 let 还是 run?
// 这种纠结时刻都在发生,仅仅是初始化一个对象:
// 写法1:用 apply (上下文是 this, 返回对象本身)
val view = TextView(context).apply {
text = "Hello"
textSize = 16f
}
// 写法2:用 also (上下文是 it, 返回对象本身)
val view2 = TextView(context).also {
it.text = "Hello"
it.textSize = 16f
}
// 写法3:用 run (上下文是 this, 返回最后一行结果)
val view3 = TextView(context).run {
text = "Hello"
textSize = 16f
this // 如果忘了这一行,view3 就是 Unit
}
同样的一个功能,可能有五六种写法,每种都有细微的差别。这种问题在团队协作时尤为明显,每个人的风格都不一样,看别人的代码有时候得脑补半天。
最重要的是他会打破写代码时心流的状态。
反观 Dart,刚开始接触时觉得它有点土。
但用久了你就会发现,这种“平平无奇”才是真爱。
Dart 的语法设计非常克制,它不追求炫技,而是追求直观。
写 Dart 的时候,我不需要在大脑里时刻绷着根弦去纠结语法细节,直接顺着逻辑写下去就行。
// 同样的逻辑,Dart 的解决方案通常只有一种 —— 级联操作符 (..)
// 不需要纠结是用 apply 还是 run,也不用担心 this 和 it 混淆
var view = TextView(context)
..text = "Hello"
..textSize = 16;
代码写出来,三个月后再看,还是能一眼看懂。
这种特质,让我在开发时能更专注于业务逻辑本身,而不是语言特性。
这一点在日常开发中其实是非常重要的。
开发人员的逻辑思路不会经常因为语法问题而打断,一方面能提高效率,另一方面也会大大减少心智负担,不会写一会代码就感觉很累。
AI 时代的生存法则
让我内心的天平彻底偏向 Dart 的最后一块砝码,其实是 AI。
在这个 AI 辅助编程的时代,我们必须认识到一个事实:目前的 AI 模型,本质上还是一个强大的模式匹配机器,它是个“直肠子”,远没有进化到能进行深度逻辑思考的程度。
而 Dart 这种平平无奇的语法,恰恰是 AI 最喜欢的。
因为它足够简单、直观、显式。AI 读得快、懂的透、写得准。
反观那些拥有丰富语法糖和黑魔法的语言,虽然对人类专家来说写起来很爽,但对 AI 来说,却成了幻觉的温床。过多的隐式上下文和多样的语法选择,大大增加了 AI 犯错的概率。
在 AI 时代,谁的代码能让 AI 更好理解、更容易生成,谁就是赢家。
以前我们追求代码要写给人看,现在可能还要加一条——写给 AI 看。简单直白的代码,不仅人类维护起来轻松,AI 辅助生成的准确率也会显著提高。
这才是 AI 时代的生存法则:摒弃花哨,回归朴素。
重剑无锋大巧不工
年轻的时候总想着怎么实现最复杂的功能,怎么把语言特性用到极致。
那时候觉得,能把一行代码写得像天书一样难懂,才叫水平。
但随着年岁渐长,写过的代码越来越多,填过的坑也越来越深,我开始慢慢领悟到“重剑无锋,大巧不工”的真谛。
现在的我,编码风格发生了巨大的转变。不再追求那些花哨的语法糖和所谓的“黑魔法”,而是更倾向于简单、直接、健壮的代码。
举个最直接的例子,以前我很痴迷于各种自动化的依赖注入框架。觉得写个注解,对象就自动注入进来了,多酷啊,多省事啊。
// 以前觉得很酷的“黑魔法”
@Inject
lateinit var userService: UserService // 它是从哪来的?谁初始化的?完全是黑盒。
但现在,我反而更喜欢手动管理依赖,甚至就是最原始的通过构造函数参数传递。
// 现在更喜欢的“笨办法”
class UserViewModel {
final UserService service;
// 一切都在阳光下,没有秘密
UserViewModel(this.service);
}
看起来这种方式有点笨,写起来也没那么灵动。但它的好处是显而易见的:直观、清晰。
数据的流向一目了然,依赖关系清清楚楚。出了问题,不用去翻框架源码猜它是怎么注入的,看一眼调用栈就能定位。
我们写代码,最终目的是为了解决问题,为了让系统稳定运行,而不是为了炫技。
哪怕抛开 AI 不谈,我也更愿意写这种一眼就能看懂的代码。
因为它经得起时间的考验,也经得起团队协作的折腾。这把“重剑”,虽然没有锋刃,但挥舞起来,却是最扎实的内功。
不可否认,倘若要构建一个依赖关系盘根错节的超大型系统,或者对解耦以及动态替换实现有极为严格的要求,那么成熟的依赖注入框架无疑是必不可少的得力工具。然而,在我们绝大多数的日常开发工作中,特别是像Flutter这种注重UI设计、强调逻辑直观性的场景下,盲目地引入复杂的框架,往往就如同杀鸡用牛刀,反而会徒增维护成本。
5. 总结
从最初沉迷于 Kotlin 的语法糖和“黑魔法”,到如今偏爱 Dart 的朴素与直观,这不仅是编程语言的选择转变,更是对代码本质认知的转变。
另一方面这也是在强大的语法糖和简洁的心智模型中找到一个更适合自己的平衡点。
在 AI 辅助编程日益普及的今天,简单、显式的代码不仅降低了开发者的心智负担,更成为了 AI 理解与生成的最佳载体。
摒弃花哨,回归代码解决问题的本真,Less is More,这或许才是我们在 AI 时代应有的生存法则。
如果看到这里的同学对客户端或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。
私信免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。
可以作为Flutter学习的知识地图。
—— laoliu_dev
Flutter自定义组件: 为横向列表自定义“进度条”式滚动指示器
- 上一篇
- Flutter自定义组件: 为横向列表自定义“进度条”式滚动指示器
- 下一篇
- flutter_easy_refresh在3.38.3配合NestedScrollView的注意要点。
-
- 文章 · 软件教程 | 1小时前 |
- Postman Console 怎么看请求实际发送内容:请求日志、变量展开与响应核对
- 391浏览 收藏
-
- 文章 · 软件教程 | 5小时前 |
- Chrome DevTools Performance 怎么录制长任务:Main 轨道、红色三角与回放核对
- 415浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | future
- 从一个带并发数限制的请求深入 Dart 的 Future
- 269浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 强迫症
- Dart 3.7格式化工具“乱改代码”?强迫症必看
- 309浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | Android
- Dart 速通攻略(面向 Android 工程师)
- 444浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | Rust
- 假如Flutter用Rust,你也写不出更快的App
- 306浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 其他
- 最新的 Dart sdk 安装教程
- 311浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 其他
- Flutter路由3分钟学会
- 297浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | scroll
- flutter_easy_refresh在3.38.3配合NestedScrollView的注意要点。
- 445浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 其他
- Flutter自定义组件: 为横向列表自定义“进度条”式滚动指示器
- 452浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 其他
- Dart - 完全解剖await/async原理
- 129浏览 收藏
-
- 文章 · 软件教程 | 6小时前 | 其他
- Dart - 内存管理与垃圾回收(GC)深度解析
- 496浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ljg-skills
- ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
- 5038次使用
-
- MELO音乐
- MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
- 4574次使用
-
- UniScribe
- UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
- 4522次使用
-
- 剧云
- 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
- 4780次使用
-
- 万象有声
- 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
- 4731次使用
-
- VS Code 怎么给 Go 项目配置测试任务:tasks.json 运行与结果验收
- 2026-07-09 501浏览
-
- Windows 11 如何开启 HEIF 图片支持
- 2026-05-31 501浏览
-
- TikTok用户画像与付费订阅变现方法
- 2026-05-27 501浏览
-
- 学信网学历翻译件申请方法
- 2026-05-27 501浏览
-
- Windows 11 24H2 更新失败0x80070005解决方法
- 2026-05-26 501浏览

