我有一个类作业,老师对我同意的很多事情进行了扣分,但其中有一些我不太确定。
“我不喜欢像 i 这样命名变量,而实际上计数器代表一个真实的东西,一个端口号:”
“最好将其称为 portNum 之类的名称。”
回应以下几行:
for(int i = 1; i <= boat.getLastPort(); ++i){
boat.load();
boat.move(i);
boat.unload();
}
我的第一个问题是,这个建议是合理的,还是根本不值得?我很少看到命名循环变量。我认为大多数人会立即知道在这种情况下发生了什么(在程序其余部分的上下文中)。
第二次也是最后一次反馈:
“首先,方法名称需要以小写字母开头,而不是大写字母。这是 OOP 中非常严格的约定。但更糟糕的是,没有理由通过引用传递范围值。请求的值是返回,这就是方法通常如何相互协作的方式。” ---“......没有程序想要调用类方法并通过引用传递任何东西:你永远不会相信你的程序变量的类。在方法中使用按值传递。”
这个引用引用了这个成员函数:
int FerryBoat::Rand(const int& range)
{
return rand() % (range+1);
}
赋值需要成员函数,否则我会创建一个宏来在类之外执行此操作。说明没有指定名称,所以我只是以库函数命名,但我想我应该随机命名,这样它的首字母就不会大写。
无论如何,我的第二个问题是:
如果函数引用常量数据(常量变量听起来很矛盾),您为什么不相信它?它不能因为常量而改变数据吗?
最佳答案
我会接受并继续前进 :-) 即使您的老师是边缘精神病患者,您的工作就是通过考试。离开学校后,您可以遵循自己的指导方针(如果他们更好的话)(当然要遵守公司的规章制度)。
我不得不同意自boat.move(portNum)
以来的第一个观点。然后传达更多信息boat.move(i)
.
更好的是boat.moveTo(portNum)
甚至 boat.moveToPortNumber(i)
.
如果这三行都存在,可能太不好,但即使对于这么小的样本,“正确”完成它也不会花费太多。考虑到人们花在维护代码上的时间,代码的可读性越高越好。
第二个,我认为你的老师专注于错误的事情。不是它是否可以损坏,而是传递 int
绝对没有意义也没有优势。通过引用除非你想在函数中修改它。
引用在 C++ 中很好地避免了在必须用指针模拟按引用传递时遇到的 C 问题,并最大限度地减少了大型结构的复制。事实上,我希望 ISO 将它们添加到下一个迭代中。但是,如果它是一个复制成本低的变量(如 int
)并且您不想更改变量并将其反射(reflect)回调用者,那么引用就是浪费时间。
我非常不同意方法名称需要以小写字母开头。虽然这是一个通用约定(我自己实际使用的约定),但它不是 OOP 的要求。代码不会突然变得不那么面向对象,因为你的方法被称为 IsTeacherLoony()
而不是 isTeacherLoony()
.
关于c++ - 程序反馈: named loop index and reference to constant data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444632/