#dev #PLT 给大家讲个有趣的事情:
🐔鸡你太美。
我在网易云音乐找这个东西的时候,对两首歌特别可心。
其一是原版《只因你太美》、其二是一个纯音乐 remix。
我们知道,原版(SWIN) 的是有歌词的(只因你太美……)
可是 remix 版只有重复的『鸡你太美……实在是太美』这样类似词穷的东西,我们认为它是纯音乐,没有唱词。
如果你是网易云的工程师,尝试用 #Kotlin 这样的『面向对象』编程语言给这样可能有歌词的歌曲建模,你会怎么建呢?
——
首先,我想到的办法是类似这样,
有点类似 libc 的『特殊返回值』,比如函数
但是这不是很规范,而且容易给数据维护制造问题,所以:
这样我们也可以同时表达有歌词的『只因你太美』和没歌词的『只因你太美(remix)』
可是,如果除了歌词外还有别的东西可能有出入,或者觉得『一首歌可能有歌词也可能完全没有、但居然还要存
🐔鸡你太美。
我在网易云音乐找这个东西的时候,对两首歌特别可心。
其一是原版《只因你太美》、其二是一个纯音乐 remix。
我们知道,原版(SWIN) 的是有歌词的(只因你太美……)
可是 remix 版只有重复的『鸡你太美……实在是太美』这样类似词穷的东西,我们认为它是纯音乐,没有唱词。
如果你是网易云的工程师,尝试用 #Kotlin 这样的『面向对象』编程语言给这样可能有歌词的歌曲建模,你会怎么建呢?
——
首先,我想到的办法是类似这样,
val NO_LYRICS: Lyrics = TODO()
data class Song(/*...*/, val lyrics: Lyrics)
比如,如果我们以链接(URI)的方式“存储”歌词,那么没歌词的情况:const val NO_LYRICS = "nolyrics:" 有点类似 libc 的『特殊返回值』,比如函数
ioctl 如果返回 (-1) 表示请求出错。但是这不是很规范,而且容易给数据维护制造问题,所以:
data class Song(/*...*/, val lyrics: Lyrics?) 这样我们也可以同时表达有歌词的『只因你太美』和没歌词的『只因你太美(remix)』
可是,如果除了歌词外还有别的东西可能有出入,或者觉得『一首歌可能有歌词也可能完全没有、但居然还要存
null』该如何?sealed class Music(/*...*/) {
data class Song(/*...*/, val lyrics: Lyrics): Music(/*...*/)
}
然后,我们在取的时候判断 music is Song,或者 (music as? Song)?.lyrics ?: "无歌词" 就可以了。Forwarded from duangsuse::Echo (duangsuse)
#English Prometheus 是『普罗米修斯』的意思……
Forwarded from duangsuse::Echo (duangsuse)
https://duangsuse-valid-projects.github.io/Share/Others/essay-kotlin-parser
#Kotlin #blog #PLT 自从有了 Literate Kotlin,旺财再也不用担心我写不出代码了。 🤪
#Kotlin #blog #PLT 自从有了 Literate Kotlin,旺财再也不用担心我写不出代码了。 🤪
Share
看完这段 Kotlin 代码后我哭了
🐕 duangsuse’s shared files(e.g. productive software projects, documents)
Forwarded from 永久封存 | Yuuta 台 | 😷 #Pray4Wuhan (Yuuta | Nya⠀)
Twitter
KDE Community
#Windows7 will stop receiving updates next Tuesday, 14th of January. We want to help Windows users upgrade to something better. You can help too: Help upgrade to KDE's Plasma desktop. #Upgrade2Plasma https://t.co/DYdSuMmM1P
Forwarded from Yuuta 小台 @Trumeet (Yuuta | Nya⠀)
Twitter
小熊猫
一个人住的话,一定要在洗手间放两卷纸啊。。。 他妈的,袜子数量-1。。。