Магические числа, как правило, плохой знак, но я бы не сказал, что вы должны их запретить.Другими словами, если -1
в противном случае является недопустимым значением, вы могли бы использовать это, но я бы по крайней мере создал для него константу, чтобы вызов этого метода выглядел так:
someEntity.SetHealth(Health.Infinite)
или аналогичный, присвоение имени константе зависит от вас.
Однако, лучший способ (на мой взгляд) - это инкапсулировать значение, чтобы дать ему дополнительные данные, например, выможно создать такой тип в C #:
public struct Health
{
private readonly int _Value;
public int Value { get { return _Value; } }
public Health(int value)
{
if (value < 0 || value > SOME_ARBITRARY_MAX_NUMBER)
throw new ArgumentOutOfRangeException("value");
_Value = value;
}
public static Health Infinite
{
get
{
Health result = new Health(0);
result._Value = -1;
return result;
}
}
public bool IsInfinite
{
get
{
return _Value == -1;
}
}
}
Затем вы также добавите необходимые методы сравнения, операторы и т. д., чтобы вы могли, например, сделать это:
Health a = Health.Infinite;
Health b = 100; // automatic type coercion
if (b < a) // custom operator, knows that Infinite > *
...