Ear*_*rlz 25 ruby coding-style
我有一个文本处理的东西,我在Ruby中做.基本上,我必须实现一个简单的状态机(一个字符后视).
我的代码目前看起来像这样:
text.each{ |c|
...
...
...
...
if @state!=:some_state
next
end
#processing stuff for if in :some_state mode
...
...
...
...
...
}
Run Code Online (Sandbox Code Playgroud)
这是对的吗?或者它应该像下面这样实现:
text.each{ |c|
...
...
...
...
if @state==:some_state
#processing stuff for if in :some_state mode
...
...
...
...
...
end
}
Run Code Online (Sandbox Code Playgroud)
有正确的方式还是只是偏好?哪一个与做事的"红宝石方式"更加融合?
nas*_*nas 21
完全同意@DigitalRoss并且我看到人们在使用next一些条件被评估之后存在复杂的代码时使用
next if @state!=:some_state
# some long complicated code
Run Code Online (Sandbox Code Playgroud)
另一方面,如果有一个简单的操作需要根据某些条件进行,那么我更愿意
if @state == :some_state
#call_a_method_to_do_something
end
OR
call_a_method if @state == :some_state
Run Code Online (Sandbox Code Playgroud)
话虽如此,编写冗长的复杂代码却是不好的做法.如果您的代码干净且设计良好,那么您将永远不必next在代码中使用.
我认为你给出的例子并没有真正反映出做出next改变的情况.考虑一下代码中有多个"next-points"的情况:
text.each do |c|
next if @state == :state1
...
next if @state == :state2
...
next if @state == :state3
...
end
Run Code Online (Sandbox Code Playgroud)
并将其与if-variant进行比较:
text.each do |c|
unless @state == :state1
...
unless @state == :state2
...
unless @state == :state3
...
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
虽然第一种可以被一些纯粹主义者视为意大利式风格,但恕我直言,它比后者更具可读性.
| 归档时间: |
|
| 查看次数: |
24949 次 |
| 最近记录: |