Подтвердить что ты не робот

Именование Boolean

У меня есть свойство, которое указывает, может ли экземпляр быть изменен. Должно ли оно называться MayModify или CanModify?

4b9b3361

Ответ 1

IsModifiable

CanModify

AllowChanges

MayModify звучит слишком условно, вроде серого, а не boolean black and white.

Я обычно использовал бы глагол, за которым следует существительное. То есть:

Разрешить, затем Изменить.

CanModify - это два глагола/действия, которые, я думаю, запутывают.

Ответ 2

CanModify - это прекрасное имя, но в этом случае было бы неправильно. При наименовании свойств вы всегда должны думать о типичном использовании.

MyClass widget;

if (widget.CanModify) { ... }

Очевидно, что это виджет, который модифицирует что-то еще. Но вы хотели бы сказать, может ли потребитель модифицировать виджет. Поэтому это имя было бы очень плохим.

Мои предпочтения в этом случае были бы следующими:

if (widget.IsWritable) { ... }

или

if (widget.IsReconfigurable) { ... }

в зависимости от того, что именно означает "модификация" виджета.

Но даже

if (widget.CanBeModified) { ... }

будет намного лучше, чем CanModify или MayModify, оба из которых звучат так, как будто они дают разрешение widget для изменения чего-то еще.

Ответ 3

Экземпляр, который нельзя изменить, доступен только для чтения, нет? Итак IsReadOnly?

Ответ 5

CanModify лучше, потому что can представляет способность. Но May больше похоже на то, что кто-то не против, а не что-то определенное.

Ответ 6

Название "IsReadOnly" иногда используется для таких контекстов, поэтому оно может быть хорошим. Я думаю, что полезно различать три типа экземпляров:

  • Те, которые могут быть изменены напрямую
  • Те, которые неизменны
  • Те, которые не могут быть изменены напрямую, но могут быть изменены каким-то другим (примеры включают WaitHandle или оболочку только для чтения в записи, доступной для записи)

Если IsReadOnly является ложным, то ясно, что элемент является типом 1. Если это правда, однако, может быть неясно, будет ли он вводить 2 или 3. В зависимости от характера объекта может быть полезно иметь свойство IsFrozen в дополнение к IsReadOnly. Код, который хочет знать, может ли быть изменен внешний объект, будет использовать IsFrozen; код, который хочет знать, разрешено ли изменять сам объект, будет использовать IsReadOnly.