
获得徽章 8
- Compose的状态管理真好玩!Compose的UI编写真辣鸡!!! ComposeHooks更新啦!!!评论点赞
- Jetpack Compose 的 Modifier 就是一坨屎!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!赞过23
- 一个语言中基础的语法功能实现需要多久?大概需要12年吧........ kotlin 在16年我初次接触时是一个优秀的语言,但是在24年,他看起来充满了霉味。(来自一个lotliner的怨念)赞过32
- #每天一个知识点# 在Java中大括号被识别为代码块,我们可以在一个函数的代码块中嵌套任意多的小代码块(普通代码块),这可以作为一种代码组织技巧。但是在kotlin中不可以这样,kotlin中的lambda函数就是通过大括号进行匹配的,如果在kotlin函数的代码块中 使用大括号包裹一段代码,这段代码会被识别成一个未被调用的lambda函数。
相应的 我们可以看使用这种特性写出例如这样的代码 `val result = {//do someting}()`,在大括号后面加上小括号表示对函数的立即调用,当然一般 IDE 会识别这段代码并要求你改写成 `run{}` 这样更符合语义的代码。展开评论点赞 - #每天一个知识点# 之前我在 ⌈你可能一直在kt文件中写Java代码⌋ 中介绍过一些关于对对象非空判断然后调用的写法,有的jym表达了反对意见,认为这样写代码非常难以理解、是“屎山”代码,我不得不解释一下为什么要这样写。
kotlin是支持多编程范式的,而高阶函数、函数是一等公民这种思想,都是函数式编程的重要思想。在文中我介绍作用域时简单介绍的`let`、`apply`、`run`、`with`、`also` 这几个函数都是kotlin内置的高阶函数,使用它们本就是为了遵循函数式编程。函数式编程思想中有一个重要的理念,用我的理解表达的话:函数是数据变形的过程。如果你是用过 RxJava,你应该能深刻理解这一点,在RxJava中有大量的中间操作符(链式调用函数),每一个中间操作符其实都是在对 *Observable* 进行数据上的变形、或产生**副作用**。
例如:`val other = obj?.let{}?.run{}?.takeIf{}` ,这样的代码并不是什么屎山代码,而是一个非常典型的数据(对象)的变形过程,一个可空对象`obj`,经过`let`函数进行自身数据处理返回值又被 `run` 函数接收并处理(之前说过`run`函数一般用于映射),最终产生的对象在经过`takeIf`条件判断,符合条件则采用,不符合条件则为null,而且中间的每个环节都是**空安全**的、都可以随时被**空**中断执行过程。
只是在沸点中三言两语可能无法让你彻底理解这种思想理念,我还是之前对那位jy的回复:如果你对多个高阶函数链式调用觉得很难阅读、理解,可能是你不适合这种编程范式,而非这种写法不好,大可不必强求自己接收这种编程范式。展开赞过评论2