将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?

Posted

技术标签:

【中文标题】将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?【英文标题】:Is it good practice to put if statements in main() or inside functions to respond to user input? 【发布时间】:2017-07-11 04:17:04 【问题描述】:

我正在为大学终端编写一个 2048 程序。

要玩游戏,我的程序需要左移、右移、上移或下移。所以我有两个选择:

    写一个以方向为参数的函数,然后 通过 if 语句进行相应的操作。

    void move(string direction) 
        if (direction == "up")
            //do stuff
        if (direction == "left")
            //do stuff
        //etc.
    
    

    写四个函数,一个上下左右,把if语句放在main()中。

    int main() 
        cin << direction;
        if (direction == up)
            moveup();
        //etc.
    
    

我阅读了 google 的 cpp 样式指南,它说函数最好保持简短。但是如果我写四个函数我也会有很多重复的代码。到目前为止,我已经使用了选项 1,我的 move() 函数有 70 行长。

什么被认为是更好的做法?

【问题讨论】:

googles 风格的 guid 非常关注 google 代码库(即数百万行代码)。个别项目可能适用于您的代码,也可能不适用。 Iirc 每个项目都有优缺点和推理,因此您可以自行决定要应用的样式。 重复代码到底是什么意思?你可以解释吗?如果您的函数有重复代码,那么您可能需要更多(或更少)函数。 @tobi303 这将是重复的代码,因为到目前为止,使用方向,我在函数的开头定义变量,指示如何到达向量中的下一个图块。定义这些变量后,所有方向的代码都是相同的。它只是做了不同的事情,因为变量不同。因此,如果我为方向创建了四个单独的函数,我只需在每个函数中定义变量,然后使用相同的代码进行移动。 然后编写一个包含相同代码的函数,并将它们之间不同的变量作为参数传递。这正是函数的好处;) 【参考方案1】:

第二个选项通常被认为是最好的。我不明白为什么你会重复代码,因为左移(例如)所做的可能与上移所做的不同。如果有 重复代码,则将该代码放在另一个函数中并从您的移动函数中调用它。一般来说,初学者程序员写的函数不够多——很难写太多。

【讨论】:

这些函数之间的唯一区别在于定义下一个图块相对于当前图块的位置的变量。进行移动的代码将是相同的。【参考方案2】:

将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?

这两个选项都很好。后一个选项允许重复使用功能,如果您在主函数中有重复模式,我建议您使用它。

但是如果我写四个函数我也会有很多重复的代码。

解决方案是引入第五个函数,其中包含其他函数共有的部分。然后从其他人那里调用该函数。这就是函数的用途:划分可重用的功能。

【讨论】:

以上是关于将 if 语句放在 main() 或函数内部以响应用户输入是一种好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

将wordpress php短代码挂钩放在if语句中是不是正确,其中if语句是post方法的响应?

解决延时函数耗费单片机内部资源的问题。可以将延时函数放在中断中……方法解释一下

重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”

函数内部的JavaScript if语句以避免除以零NaN结果?

在递归函数中使用while循环和if语句之间有区别吗?

内部选择语句未注册为单组函数...“不是单组组函数”