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

artone · 发布于 2016年11月15日 · 最后由 lotusfire 回复于 2016年11月17日 · 512 次阅读
3417

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

图片来源:Twitter

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

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

  # do something

end

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

共收到 8 条回复
314
kayakjiang · #1 · 2016年11月15日 2 个赞

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

13587
mengqing · #2 · 2016年11月15日 2 个赞

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

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

foo if platforms.include? platform
6061
gihnius · #3 · 2016年11月15日

Set 或 HashMap 吧

23529
mizuhashi · #4 · 2016年11月15日

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

4257
greatghoul · #5 · 2016年11月16日

#2楼 @mengqing 学到了。

3417
artone · #6 · 2016年11月16日

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

28344
lutaf · #7 · 2016年11月17日 2 个赞

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

23530
lotusfire · #8 · 2016年11月17日

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

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