duangsues.is_a? SaltedFish
61 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
Forwarded from dnaugsuz
a 对了,说起来我之前为了一个 Spring 的项目 context path 绑定写过一门 DSL,既然大佬写这类程序,为何不也设计一个专门的 DSL 来定义接口?Swagger 实在太难看了,前端写东西果然就是只会用 existing 的 markup language……

我觉得我们应该感谢他们是 JavaScript 风格的程序员,不是 Java 风格的,我可懒得为了一点 boilerplate 去写 XML 这种更大更危险的 boilerplate。 😵
Forwarded from dnaugsuz
别人说 Mongo 是面向文档的数据库,我感觉和 RDBMS 有多大差别么…… 😓
反而还更莫名其妙一些,起了一大堆新名字

其实这种数据处理的话,就是 Kotlin 的 collection method extension 大概也能完成吧…… 名词一大堆一样
Forwarded from dnaugsuz
我很讨厌 Spring 在弄那个 url mapping 的时候很多 boilerplate

我见过不少人说自己对代码有洁癖,但我对任何代码真的是看不得一点重复……
一有重复我就忍不住想解出模板、一见到瞎写的控制流我就想把代码挂出来瞎喷一遍……

一般来说我对自己不理解的算法、模型(比如关系数据模型的 1:1, 1:N 什么的)都会写 N 遍,往往是写第二三遍的时候我会开始能够把代码缩短成原来的 3/4,如果原来的代码非常冗杂的话可能是 1/2,甚至是 1/10

所以我想……

为什么一个应用程序,里面居然能够放这么多重复的名字?

我看到的时候,立刻就浑身发毛,或许这真是我多虑了
但我真的是觉得那些程序本来就不应该是这个样子罢了…… 我是一个重复的词都不想见到
Forwarded from dnaugsuz
同意……
其实我原来也就是想发点不能编译的代码
Forwarded from dnaugsuz
我觉得 Kotlin 的 enum class 真是太好用了,如果你不想写专门的辅助类,它可以做到很奇特的效果

而且可以辅助你进行更远的设计
Forwarded from dnaugsuz
/tmp/a
我忘记 Telegram 发文件带名字了……
UNIX-like 平台上是不看文件后缀名的…… 普通文本编辑器都可以打开
Forwarded from dnaugsuz
还好括号是匹配的
Forwarded from dnaugsuz
我莫名觉得这个关系模型有点复杂啊…… 是因为没有图示的原因么 😭
Forwarded from dnaugsuz
下次会的,你们这次就不要太较真…… 毕竟,代码比用什么写代码重要,是吧?
Forwarded from dnaugsuz
我这里的代码,其实指的就是你说的『程序的灵魂』
Forwarded from dnaugsuz
我觉得还是蛮不错的啦…… 如果你写的缩进正确的话

比如 Kotlin 的 when (with value)

fun name(x: Any) = when (x) {
is Boolean -> "bool"
is Number -> "num"
is String -> "str"
is Array<*> -> "ary"
is List<*> -> "list"
is Map<*, *> -> "dict"
is Exception -> "error"
is KFunction0 -> "callable"
else -> "any"
}
总比没省略 is 左侧表达式的要好看吧

还有 where("user") 后面的一堆 point-free,其实只要缩进明白一点看起来是只会更优雅,不会更难看的


假设这里的 point-free 是
p :: (t -> Bool) -> (t, t, t) -> Bool
p f = \(a, b, c) -> (f a b) & (f a c)

p elem ("ABC", "A", "B") --True, "A" elem "ABC" & "B" elem "ABC"

或者

f a b = a + b -- f = (+)
f' a = \b -> let op=(a +) in op b
f1 = f 1 -- = f' 1 -- (因为有 currying 实际上是一样的…… 不像 Scala 有 partial application)
(f1 0, f1 1)

这类
只有目的不是很纯(比如为了进一步缩减代码文本的体积)才会让代码更难阅读

import Data.Char (digitToInt)
atoi base = foldl (\ac -> (ac*base +) . digitToInt) 0 -- str

这里我们 point-free 约掉了包括高阶函数 foldl 的第一个函数参数的参数在内的两个参数…… 啊好饶舌的说
Forwarded from dnaugsuz
对了原语是什么
那那个原来的意思是啥
Forwarded from dnaugsuz
还是 Haskell 好,notContains 就是 not . elem…… 否命题直接函数合成(跑
Forwarded from dnaugsuz
Kotlin 那个 self (function type with receiver)搞得一些泛化的函数类型上的操作符有点麻烦,有些的东西必须弄两个版本……

不过我想一般很少有人会用 T.() -> R 这种,比如写 subparser 组合库的时候,都是 (Parser.Stream) -> T 这种

第一种我想 Java 侧怕不是不方便……
Forwarded from dnaugsuz
差不多,不过我不是指用来定义为辅助的 also, let 什么的,是定义实际的业务逻辑还使用这种方法
Forwarded from dnaugsuz
以前我很过分地认为 Kotlin 不仅该弄 it,第二个参数也该默认 second……
甚至还觉得类型签名上应该可以填默认的隐式参数名字

后来我才注意到这个一致性的问题…… 在这方面我相信某些滥用元编程的库实在是最好的前车之鉴
因为它很容易被滥用,即便可能初衷只是让代码更好看
Forwarded from dnaugsuz
想起来了这好像是并发同步(『不纯』的并行程序)里面一个概念,就是互斥锁、信号量的什么操作还是对程序进程的操作叫什么阻塞原语啊…… 欸

是不是在 Kotlin 的 coroutine 看到的,coroutine 肯定要 yield (suspend) 和 resume 吧
Forwarded from dnaugsuz
Dalvik 不清楚,反正 HotSpot 什么的所有 GC 都是纯正的 tracing 算法,循环引用不会泄漏内存

JDK 的 WeakReference 是为了应付应用的特殊情况的,比如说 static 的(perm)拿来存 instance 级别的东西,就可以用 WeakReference
Forwarded from dnaugsuz
是第二版吗?我也看过 🤔