Я думаю, что иногда люди слепо следуют «стандартам кодирования» , которые говорят: «Не используйте жестко закодированные значения, определите их как константы, чтобы было проще управлять кодом, когда его нужно обновить», - что достаточно справедливо для таких вещей, как:
const in MAX_NUMBER_OF_ELEMENTS_I_WILL_ALLOW = 100
Но не имеет смысла для:
if(str1.CompareTo(str2) == STRINGS_ARE_EQUAL)
Поскольку каждый раз, когда я вижу этот код, мне нужно искать, что STRINGS_ARE_EQUAL
определяется как , а затем проверять документы, если это правильно.
Вместо этого, если я увижу:
if(str1.CompareTo(str2) == 0)
Я пропускаю шаг 1 (ищите, как определяется STRINGS_ARE...
) и могу проверить спецификации для значения 0
.
Вы бы правильно захотели заменить это на Equals()
и использовать CompareTo()
в тех случаях, когда вас интересует больше, чем один случай, например ::
switch (bla.CompareTo(bla1))
{
case IS_EQUAL:
case IS_SMALLER:
case IS_BIGGER:
default:
}
с использованием if/else
операторов, если это необходимо (не знаю, что CompareTo()
возвращает ...)
Я бы все равно проверил, правильно ли вы определили значения в соответствии со спецификациями.
Это, конечно, отличается, если спецификации определяют что-то вроде ComparisonClass::StringsAreEqual
value или что-то в этом роде (я только что сделал это), тогда вы бы не использовали 0, а соответствующую переменную.
Так что это зависит от того, когда вам конкретно нужен доступ к первому элементу в массиве arr[0]
лучше, чем arr[FIRST_ELEMENT]
, потому что я все равно пойду и проверю то, что вы определили как FIRST_ELEMENT
, потому что я не буду вам доверять, и это может быть чем-то отличным от 0
- например, ваш 0
элемент dud и настоящий первый элемент хранится в 1
- кто знает.