在 getter 中声明变量
Declaring variables in a getter
我有一个复杂的getter如下
public bool IsOk
{
get
{
return (IsFirstCondition && (IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem
|| IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem);
}
}
为了简单和更好的可读性,我想把我的 getter 变成这样的东西:
public bool IsOk
{
get
{
var isBestItemm = IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem;
var isMostUsedItem = IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem;
return (IsFirstCondition && (isBestItemm || isMostUsedItem);
}
}
据我所知,getter 仅用于 return 数据而不是 set/declare/initialize 事物...我的简化 getter 是否适用于最佳实践和编码指南?
setter 中的副作用仅限于局部变量。 API 呼叫者看不到它们。这使它们变得无害。
换句话说,这并没有打破人们对属性的通常期望。
你可以做到。该代码无需担心。
首先,属性指南通常规定:
应该很便宜
尽量避免昂贵的计算或从数据库中获取数据,以及
诸如此类。
它们应该是一致的
两次读取 属性 两次应该 return 相同的值。
他们不应该引入副作用
读取 属性 会以某种方式更改基础对象。
如果可以避免这种情况,请使用任何正常的 "tricks" 将 属性 getter 重构为
- 更具可读性
- 更易于维护
- 更可重用(或使用更多可重用代码)
根据你的实际例子,我肯定会声明那些变量。
A Getter 不应该有副作用和改变对象的状态。否则,增加可读性的代码是受欢迎的。
如果我是你,我会选择第二种解决方案。由于您的变量范围没有从您的 getter 方法中指出,因此它们不能被视为 "real" 声明,但它们更易于阅读和调试。 (编译器会优化您的代码以获得最佳的运行时间和内存使用率,因此不必担心 "extra" 变量。)此外,当您知道变量的确切类型时,为什么还要使用 "var"?
我有一个复杂的getter如下
public bool IsOk
{
get
{
return (IsFirstCondition && (IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem
|| IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem);
}
}
为了简单和更好的可读性,我想把我的 getter 变成这样的东西:
public bool IsOk
{
get
{
var isBestItemm = IsSecondCondition.Items.First.Item == MyItems.PublicItems.BestItem;
var isMostUsedItem = IsThirdCondition.Collection.EditedItem.IsTheMostUsedItem;
return (IsFirstCondition && (isBestItemm || isMostUsedItem);
}
}
据我所知,getter 仅用于 return 数据而不是 set/declare/initialize 事物...我的简化 getter 是否适用于最佳实践和编码指南?
setter 中的副作用仅限于局部变量。 API 呼叫者看不到它们。这使它们变得无害。
换句话说,这并没有打破人们对属性的通常期望。
你可以做到。该代码无需担心。
首先,属性指南通常规定:
应该很便宜
尽量避免昂贵的计算或从数据库中获取数据,以及 诸如此类。
它们应该是一致的
两次读取 属性 两次应该 return 相同的值。
他们不应该引入副作用
读取 属性 会以某种方式更改基础对象。
如果可以避免这种情况,请使用任何正常的 "tricks" 将 属性 getter 重构为
- 更具可读性
- 更易于维护
- 更可重用(或使用更多可重用代码)
根据你的实际例子,我肯定会声明那些变量。
A Getter 不应该有副作用和改变对象的状态。否则,增加可读性的代码是受欢迎的。
如果我是你,我会选择第二种解决方案。由于您的变量范围没有从您的 getter 方法中指出,因此它们不能被视为 "real" 声明,但它们更易于阅读和调试。 (编译器会优化您的代码以获得最佳的运行时间和内存使用率,因此不必担心 "extra" 变量。)此外,当您知道变量的确切类型时,为什么还要使用 "var"?