首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有更好的方法来实现这种控制结构?

是否有更好的方法来实现这种控制结构?
EN

Code Review用户
提问于 2012-08-02 11:37:12
回答 3查看 305关注 0票数 8

我有以下的控制结构,我想加以改进:

代码语言:javascript
运行
复制
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
EN

回答 3

Code Review用户

发布于 2012-08-02 12:37:25

很难更好地理解你的意思,因为你没有说明在什么方面。

关于清洁守则:

  • FunctionName doSetInc有点奇怪,它是做什么的?
  • 您正在将3个变量发送到函数中,通常的做法是尽量少使用(很少超过2、0或1以上)。
  • 您总是将"id“和"8”发送到函数中,因此该函数可能不需要这些属性,可以以另一种方式设置。

除此之外,由于我发现这些检查和该做什么之间没有简单的数学相似性,我会说不,考虑到这一小部分代码和其他上下文,您无法改进它。

票数 6
EN

Code Review用户

发布于 2012-08-04 10:57:33

1.

“doSetInc”是做什么的?这不是一个描述性的名字。

  • 那8是从哪里来的?

  • 那20是从哪来的?

坏代码好代码:http://commadot.com/wp-content/uploads/2009/02/wtf.png

2.

您有一组范围,对于每个范围都要导出一个特定的值。根据要计算的整数数量,您可能希望创建一个包含每个整数转化为什么的散列。

看起来会是这样的:

derived_id{1}->20 derived_id{2}->20 ... derived_id{64}->70 ...

这样,您就可以用一行替换整个块。

代码语言:javascript
运行
复制
doSetInc(id, 8, derived_id{number})

如果像我前面提到的那样提高可读性,它将变成一条简单易懂的行。

不过要小心,这时人们可能会觉得你什么也没做过。

票数 4
EN

Code Review用户

发布于 2012-09-13 05:38:46

1)

若要简化if of条件,请使用<而不是>=。注意:只有当number不是十进制时才能正确工作。一定要圆角

旧法典:

代码语言:javascript
运行
复制
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

新法典:

代码语言:javascript
运行
复制
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 

2)

创建一个检索第三个参数值的函数,因为这是doSetInc调用更改的唯一内容。

3)

doSetInc重命名为setInc

4)

将变量声明为local,除非需要global

最终代码

代码语言:javascript
运行
复制
-- 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 ) )

用例:

代码语言:javascript
运行
复制
local number = 10
local id = "283"
local setInc = function(a,b,c) 
    print( "setInc("..a..", " .. b .. ", " .. c .. ")" )
end

setInc(id, 8, getGrade( number ) )
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/14249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档