我有以下的控制结构,我想加以改进:
if(number >= 100) then doSetInc(id, 8, 20)
elseif(number >= 91) then doSetInc(id, 8, 30)
elseif(number >= 81) then doSetInc(id, 8, 50)
elseif(number >= 7) then doSetInc(id, 8, 70)
elseif(number >= 1) then doSetInc(id, 8, 100)
end
发布于 2012-08-02 12:37:25
很难更好地理解你的意思,因为你没有说明在什么方面。
关于清洁守则:
除此之外,由于我发现这些检查和该做什么之间没有简单的数学相似性,我会说不,考虑到这一小部分代码和其他上下文,您无法改进它。
发布于 2012-08-04 10:57:33
1.
“doSetInc”是做什么的?这不是一个描述性的名字。
坏代码好代码:http://commadot.com/wp-content/uploads/2009/02/wtf.png
2.
您有一组范围,对于每个范围都要导出一个特定的值。根据要计算的整数数量,您可能希望创建一个包含每个整数转化为什么的散列。
看起来会是这样的:
derived_id{1}->20 derived_id{2}->20 ... derived_id{64}->70 ...
这样,您就可以用一行替换整个块。
doSetInc(id, 8, derived_id{number})
如果像我前面提到的那样提高可读性,它将变成一条简单易懂的行。
不过要小心,这时人们可能会觉得你什么也没做过。
发布于 2012-09-13 05:38:46
若要简化if of条件,请使用<
而不是>=
。注意:只有当number
不是十进制时才能正确工作。一定要圆角。
旧法典:
if(number >= 100) then doSetInc(id, 8, 20)
elseif(number >= 91) then doSetInc(id, 8, 30)
elseif(number >= 81) then doSetInc(id, 8, 50)
elseif(number >= 7) then doSetInc(id, 8, 70)
elseif(number >= 1) then doSetInc(id, 8, 100)
end
新法典:
if( 99 < number ) then doSetInc(id, 8, 20)
elseif(90 < number ) then doSetInc(id, 8, 30)
elseif(80 < number ) then doSetInc(id, 8, 50)
elseif( 6 < number ) then doSetInc(id, 8, 70)
elseif( 0 < number ) then doSetInc(id, 8, 100)
end
创建一个检索第三个参数值的函数,因为这是doSetInc
调用更改的唯一内容。
将doSetInc
重命名为setInc
。
将变量声明为local
,除非需要global
。
-- core function
local getGrade = function(x)
local val
if ( 99 < number ) then val = 20
elseif (90 < number ) then val = 30
elseif (80 < number ) then val = 50
elseif ( 6 < number ) then val = 70
elseif ( 0 < number ) then val = 100
return val;
end
setInc(id, 8, getGrade( number ) )
用例:
local number = 10
local id = "283"
local setInc = function(a,b,c)
print( "setInc("..a..", " .. b .. ", " .. c .. ")" )
end
setInc(id, 8, getGrade( number ) )
https://codereview.stackexchange.com/questions/14249
复制相似问题