重构 [讨论] 大量 String 判断式的重构方法

artone · 2016年11月15日 · 最后由 lotusfire 回复于 2016年11月17日 · 6998 次阅读

Dash for iOS open source 了,先来看看里面这段精美的 if statement:

图片来源:Twitter

虽说我不会写 Objective-C,不过如果在 Ruby 上遇到应该我会这样写:

if [
    "bash",
    "Chai",
    "D3JS",
    "Go",
    "Javascript",
    "Ruby",
].include? platform

  # do something

end

阵列内容可以按照字母排序,肉眼看也比较容易阅读。大家都怎么写呢?

对于一位年收入上百万的程序员,实在是不好意思重构他的代码

当涉及到大量 String 的时候,记得用 Set,O(1) vs O(n)

platforms = Set.new %w[bash Chai D3JS Go Javascript Ruby]

foo if platforms.include? platform

Set 或 HashMap 吧

图里的代码还有&&,还有 caseInsensitiveEqual,还有 contains 啊....

#4 楼 @mizuhashi 画面太花了我还真没细看。😅

和用 set/map 相比,这样可以节省内存,硬编码的字符串都会放到资源段

有没有可能是代码生成器的结果

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