首先这个不是黑 ruby,每个语言都有优缺点,都有历史包袱。这个只是从个人实践观点谈 ruby 的一些语法设计带来的问题。
比如 . block 支持 do ... end 和{} 两种语法, 但是模块,函数等定义不支持花括号。
导致在编程时一部分注意力需要思考到底是使用哪种方式
2 if 的单行形式与多行相差很大,导致编程思维不一致
如果你要写 if + 单表达式的逻辑。有两种选择
2 exp if testExp
可以发现两种 if 对应的编程思考逻辑是完全不同的 单行的语法貌似看上去可读性很高,其实隐藏着一个大问题。因为代码应该反映·逻辑的顺序· 而是一味地最求像自然语言。这是一种舍本逐末的行为。 你会发现写单行 if 的时候 你需要先思考 if 成立后做什么,而不是 if 什么。也就是说你需要把 if 的 testExp 暂时记录到脑子里,然后思考成立后的逻辑, 写完后再把暂存在脑子里的 testExp 拿出来。这样其实加大了编程的心智负担。而且这种先 exp 在 if testExp 的语法和其他 if 格式不一致。也影响了 代码阅读的流畅性。
几种单行if的比较。
if testExp then exp end # 支持但是冗余
if testExp {exp} # 不支持
exp if testExp # 支持但是思考和书写方式又和其他if不一样
testExp and expt ; 支持,但是没有if前导 影响阅读性
个人的一些感受: