忽略方法的返回值是否一定是坏的风格

Jon*_*ono 2 .net c#

假设我有一个C#方法

public void CheckXYZ(int xyz) {
  // do some operation with side effects
}
Run Code Online (Sandbox Code Playgroud) 在同一类别的其他地方是另一种方法
public int GetCheckedXYZ(int xyz) {
  int abc;
  // functionally equivalent operation to CheckXYZ, 
  // with additional side effect of assigning a value to abc
  return abc; // this value is calculated during the check above
}
Run Code Online (Sandbox Code Playgroud) 通过删除CheckXYZ方法并CheckXYZ()使用GetCheckedXYZ()忽略返回值替换所有现有调用来重构这一点是不一定的坏风格?IDisposable在这种情况下,返回的类型不是.它归结为自由裁量权吗?

编辑:在所有回复之后,我已经扩展了一些示例.(是的,我意识到它已经进入out了它,特别是对于@Steven)

public void EnsureXYZ(int xyz) {
  if (!cache.ContainsKey(xyz))
    cache.Add(xyz, random.Next());
}
Run Code Online (Sandbox Code Playgroud)
public int AlwaysGetXYZ(int xyz) {
  int abc;
  if (!cache.TryGetValue(xyz, out abc))
  {
    abc = random.Next();
    cache.Add(xyz, abc);
  }
  return abc;
}
Run Code Online (Sandbox Code Playgroud)

Ira*_*ney 5

这完全取决于返回值告诉您的内容以及知道与否的重要性.如果方法返回的数据与调用它的代码无关,则忽略它完全有效.但是,如果它表明某种失败/反击/有影响力的价值,那么忽视它就是你的危险.


Mor*_*dur 5

通常这是糟糕的风格,是的.允许并且确定方法返回类的实例以进行链接(foo.bar().baz().xyz().asdf()=> asdf返回实例foo但你不再需要它了)

在你的情况下,坏样式的点不会是忽略的返回值,而是具有副作用的方法.CheckXyz()函数应始终返回一个布尔值,并且没有其他副作用.

通常,副作用很糟糕,如果调用方法并且可以忽略返回的值,则意味着方法/对象/库/程序可能设计得很差.