瞎扯淡 编程语言表达能力高带来的好处

hjiangwen · 2019年09月22日 · 最后由 nyrf 回复于 2019年09月30日 · 2601 次阅读

编程语言的表达能力高可以体现在使用该语言时,一行代码就可以完成一样事情,而表达能力低的语言 B 需要一二十行代码才可以完成这件事。

比如 ActiveRecord 通过 Ruby 可以 “动态定义方法” 的能力,一行表达式可以声明 2 张表之间的关联关系,给予一些实用的方法。 ​​​​

class Post
  belongs_to :author
end

# 可以获得以下实例方法

Post#author # 访问作者
Post#author=(author) # 将作者和帖子关联起来
Post#build_author(attrs) # 给帖子实例化一名作者
Post#create_author(attrs) # 给帖子实例化一名作者,并持久化
共收到 8 条回复

上面 AR 的例子还包含了表和字段命名等隐式约定,不过不符合约定的话,也可以通过选项来配置实际的表名、字段

少代码一般来说意味着更好维护,但是由于少代码也意味着高抽象,需要更熟练的人才能使用的更好,所以最终好不好维护还是要看使用者😀

我觉得这个叫 sexy 😄

pinewong 回复

高抽象 不好维护? belongs_to :author 相比写一堆代码更好维护吧

@lidashuang 单指你这个例子,会用,并且对 belongs_to API 熟练才好维护,如果是不熟练的人写出的真不一定好维护,因为大家对越魔性的代码理解偏差越大。例如 Sidekiq 的 delay 方法,很简单但也很神奇,用着用着可能发现解决问题花的时间比这个方法因为省下的时间更多的:https://github.com/mperham/sidekiq/issues/2211

我突然想起之前用过一个逻辑删除的 gem,删除就不用说了调用的 update 方法更新某指定字段,用 find 的时候会自动在 where 条件中加入is_delete = false条件检索出数据。然而在用了另一个 orm 辅助的 gem 时这个逻辑删除的 gem 没能在其提供的检索方法中加上 is_delete = false 条件造成把所有数据都查出来了,Orz。

此段故事是在 rails 4 的年代发生的,有点久远或许这个 bug 已经被修复了

写着 go 很怀念 ruby 的日子,用 gorm 总习惯用 ar 的方法,发现很多都要自己重写,,

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册