我对函数参数的使用有疑问。
过去,我总是编写代码,将函数所需的所有信息作为参数传入。 IE。不使用全局参数。
然而通过查看其他人的代码,不带参数的函数似乎是常态。我应该注意到,这些是类的私有函数,并且作为参数传入的值实际上是该类的私有成员变量。
这会导致代码看起来更整洁,我开始倾向于将其用于私有函数,但希望了解其他人的观点。
E.g.
Start();
Process();
Stop();
比以下内容更简洁、更具可读性:
ParamD = Start(paramA, ParamB, ParamC);
Process(ParamA, ParamD);
Stop(ParamC);
从方法的角度来看,它确实破坏了封装,但从类的角度来看,它没有破坏封装。
原则上让函数访问对象字段没有任何问题,但是您给出的特定示例让我感到害怕,因为简化函数调用的代价是您混淆了数据的生命周期。
要将您的 args 示例转换为字段,您将具有以下内容:
void Start() {
// read FieldA, FieldB, and FieldC
// set the value of FieldD
}
void Process() {
// read FieldA and do something
// read FieldD and do something
}
void Stop() {
// read the value of FieldC
}
Start()
sets FieldD
通过副作用。这意味着调用可能无效Process()
直到你打电话之后Start()
。但代码并没有告诉你这一点。你只有通过搜索才能知道在哪里FieldD
已初始化。这是在寻求错误。
我的经验法则是,函数应该只访问对象字段,如果它是always可以安全地访问该字段。如果它是在构造时初始化的字段,那么最好,但存储对协作者对象或其他内容的引用(可能会随着时间的推移而改变)的字段也可以。
但是,如果除非另一个函数产生了一些输出,否则调用一个函数是无效的,则应该传入该输出,而不是将其存储在状态中。如果您将每个函数视为独立的,并避免副作用,您的代码将更易于维护且更易于理解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)