⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

密封接口与代数类型:构建无副作用的 JSON 解析器

利用密封接口模拟 Haskell 的 ADT,并结合 when 穷尽检查实现一个类型安全的 JSON 解析器。 · 难度:入门 · +10XP

密封接口与代数类型:构建无副作用的 JSON 解析器

密封接口 (sealed interface) 相比密封类允许更多灵活性,因为一个类可以实现多个密封接口。本教程利用密封接口表示 JSON 的四种基本类型(对象、数组、字符串、数字、布尔、Null),然后编写一个纯函数解析器,通过 when 穷尽分支保证所有情况都被处理。进一步将解析结果封装为 Result 以避免异常。这个练习能深刻理解 Kotlin 的代数数据类型与模式匹配的威力。

sealed interface JsonElement {
    data class JsonObject(val map: Map) : JsonElement
    data class JsonArray(val list: List) : JsonElement
    data class JsonString(val value: String) : JsonElement
    data class JsonNumber(val value: Double) : JsonElement
    object JsonNull : JsonElement
}

fun JsonElement.stringify(): String = when(this) { is JsonElement.JsonObject -> "{...}" is JsonElement.JsonArray -> "[...]" is JsonElement.JsonString -> "\"$value\"" is JsonElement.JsonNumber -> value.toString() JsonElement.JsonNull -> "null" // 密封接口保证无需 else 分支 }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 92 篇
0 完成
🔥 0