如何解决我注意到我在不传递参数时遇到问题
我是一个自学成才的C ++程序员。我主要从UE4中学到了知识,但还有很长的路要走。我在学校学习计算机科学,在CSC 211中学习(我猜这是第二阶段吗?我在课堂上注意到我的老师和其他学生经常吵架。我的意思是说很多。例如,我们有一个实验室,可以在有人输入他们想要在餐厅内部存放的东西后创建支票。我最终被卡住了,抬起头来。我看到了很多东西,例如:void CreateMenu(Menu MenuArray[])
,所以我最终按照了教程操作,一切都变得正确。但是当我编程时,我做了很多这样的事情(来自UE4的代码)
void AFPSCharacter::ServerFire_Implementation()
{
if (Item && Item->bPickedUp) {
if (GetLocalRole() == ROLE_Authority) {
NetFire();
UE_LOG(LogTemp,Warning,TEXT("Server Fire"));
}
}
}
我知道这段代码看起来更好,我想我的问题是:
您如何知道何时传递参数?
即使当时不使用变量,为什么还要传递参数?
如果MenuArray []变量已经存在,并且您可以在不传递参数的情况下对其进行更新,那么void CreateMenu()
和void CreateMenu(Menu MenuArray[])
有什么区别?
解决方法
我可以想到两种“不传递参数”的方法:
- 编辑类成员变量
- 编辑全局变量(或至少对您的函数“全局”的变量,这意味着该函数隐式知道它)
如果您想了解第一个要点(成员vs参考参数),那将是一个更符合风格的答案,但是我认为您正在谈论第二个要点。
第二个要点(参数还是全局)仍然是风格,但是问题是样式而不是功能。简短的答案试图不惜一切代价避免全局变量。其中包括您不一定要描述为全局变量的变量,但是函数隐式知道了这些变量(在与该函数相同的作用域中创建)。
这回答了您的第一个问题。您的第二个和第三个问题基本上是“为什么?”。我可以想到以下几个原因:
- 它使您的功能更明显。
- 您现在可以将函数重用于其他目的
一旦您开始从事大型甚至中型项目,第一点对您来说将非常明显。您想使函数的作用显而易见。如果您修改参考参数,则会自动执行此操作。更好的是从函数返回一个值,然后从该值设置变量:
Menu* CreateMenu()
如果您的函数仅修改它们碰巧有权访问的数据,那么将很难跟踪哪个函数对哪个变量执行什么操作。
第二点涉及到功能点:可重用性。
void CreateMenu()
可以完全修改您在函数内部指定的变量。
void CreateMenu(Menu Menus[])
可以修改您碰巧传入的任何菜单数组。想象一下,您需要在该行的下方创建另一个菜单。该逻辑(不是全部)中的某些逻辑将与此版本的CreateMenu共享。假设您需要再创建10个菜单...假设您在实现10个版本的CreateMenu之后突然需要更改菜单创建逻辑...
简而言之,通过传递参数可以使您的函数重新使用,从而节省大量工作。
要直接涉及第二个问题(现在已经清楚了传递变量的原因),一个函数就是一台机器。它根据给定的输入执行某些操作。如果传递的参数对于计算机来说不是必需的,那么您应该考虑重写函数。如果参数有时仅是必需的,而有时它们却什么也不做,则可能是您的函数编写不正确。与它一起生活也是值得的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。