我经常需要使用一个执行的功能,而动作X是设置了条件Y.命名这样一个函数的最佳方法是什么?
我不想重复 if 语句,因为它们可能很复杂。
例如,如果我想在设置属性时修剪字符串,则可以将函数命名为:
C#/ .Net或任何类似的语言是否有针对这种情况的约定?
答案 0 :(得分:4)
尝试类似:
if(IsComplexCondition(complexData))
{
DoThing(otherData);
}
您通常不希望将条件与操作耦合,因为您在此时使单个函数捕获过多的语义信息。这是“不止一件事。”相反,如果您有复杂的条件,请在函数中捕获该条件以封装它。
如果您指的是更常见的情况,例如函数顶部的参数验证,请考虑fluent parameter validation之类的内容。如果你没有做类似参数验证的事情,那么我可能会质疑为什么它在每个函数的顶部,而不是在公共位置捕获或在系统边界执行一次。
我不认为对一般ActionIfSomething()
案例进行命名有一个很好的答案,因为它通常不是解决问题的好方法。我可能只是说调用函数Action()
并将其记录在<remarks>
中,以便仅在Something
为真时执行操作。如果Action
属于函数中的条件,那么它只在该条件的上下文中有意义,因此在函数名中重新指定它是多余的。
答案 1 :(得分:2)
这可以通过使用访问器来解决吗?
public class MyObject
{
private string _content = string.Empty;
public bool Trim { get; set; }
public string Content
{
get
{
return this.Trim ? _content.Trim() : _content;
}
internal set
{
if (string.IsNullOrEmpty(value))
_content = string.Empty;
else
_content = value;
}
}
}
每当访问内容时,这将采用Trim布尔值确定的操作。我已经保护了set访问器,因为当Trim为true时设置Content的值时可能会有些不确定,并检查尝试将内容设置为null的特殊情况。好的文件应该涵盖这些案例。
答案 2 :(得分:2)
鉴于有限制,我会选择TrimIfOptionSet
或TrimIfNeeded
。
TryTrim
感觉它总是总是运行修剪操作(在try
块中),这与仅在需要时运行它不同ConditionalTrim
太长了 - 读者的眼睛保持“有条件”而永远不会“修剪”