嵌套 if...else...代码格式化,内部的 if 会提升为 else if,这个是不是不合理?

原始代码:

if target > value {
      start = m + 1
} else {
     if reverse {
      start = m + 1
    } else {
      end = m - 1
    }
}

格式化文档后

if target > value {
      start = m + 1
} else if reverse {
     start = m + 1
} else {
      end = m - 1
}

这两个代码是等价的,你认为它的不合理之处是?

这个我理解,就像数电的电路化简一样,化简前后两个结构差异巨大的组合电路实现的逻辑是一样的,只看化简后的电路可能看不出设计时的想法;格式化后的代码就类似于化简后的电路,有时候并不希望格式化时改动原本的结构。不过话说回来,一般代码结构都不会太复杂以至于格式化导致的差异太大。

1 个赞

如果是块级语句,这样化简就显得步子很大(在 js 里这甚至还有块级 scope 的问题)
但 moonbit 里,if 是一类表达式 —— 因此这种跨一整块的化简没有任何问题,显得很自然(就像你写加减法多写了括号编译器帮你去掉那样自然)

如楼上 violin 所言。
我习惯认为 if …else… 是对相同对象的检查判断。现在这种提升,是对不同对象的检查,虽然代码效果等价,但感觉怪怪的。
这种变更,是不是放在代码编译中更好些?

感谢您的建议,moonfmt后续会考虑保留else{ }分支的花括号的