duangsuse Throws
98 subscribers
3.41K photos
228 videos
100 files
2.75K links
没事乱水...
Author @duangsuse

©2016 No rights reserved. 🐃

🐶🌚🍎🏠💓💔👇
😔 🙇‍♂️🙌🚶‍♂️🏃‍♂️ 🏃‍♂️🚶‍♂️ 👆

🐸🐸🐸🐸🐸🐸🐸🐸🐸🐸
@dsuse
Download Telegram
#dev #PLT 给大家讲个有趣的事情:
🐔鸡你太美。

我在网易云音乐找这个东西的时候,对两首歌特别可心。
其一是原版《只因你太美》、其二是一个纯音乐 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 是『普罗米修斯』的意思……
#Haha #life #China 😂 『吃货,看这里!』
#Kotlin #dev #life #CS #PLT 多少人幻想着香槟,却只有喝速溶咖啡的命…… 眼睛好疼。
#linux #KDE #sysadmin 😂 KDE 版 Windows 7,仿造变装只需一个加几 Window Effects 就好。
Forwarded from Alynx Zhou
三百六十行,行行出 bug
那样会不会更..一点啊…… 😟
Forwarded from Yuuta 小台 @Trumeet (Yuuta | Nya⠀)
https://twitter.com/ailurus1991/status/1090927826901954561

不知道自己在家不敢光屁股出来拿下纸的原因在哪。