У меня есть свойство, которое указывает, может ли экземпляр быть изменен. Должно ли оно называться MayModify или CanModify?
Именование Boolean
Ответ 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
?
Ответ 4
Ни.
IMO вы должны использовать префикс Is
. Это несколько рекомендуется.
Итак, я пошел бы за IsModifiable
Смотрите эту тему: Соглашения об именах: как назвать логическую переменную.
Ответ 5
CanModify лучше, потому что can представляет способность. Но May больше похоже на то, что кто-то не против, а не что-то определенное.
Ответ 6
Название "IsReadOnly" иногда используется для таких контекстов, поэтому оно может быть хорошим. Я думаю, что полезно различать три типа экземпляров:
- Те, которые могут быть изменены напрямую
- Те, которые неизменны
- Те, которые не могут быть изменены напрямую, но могут быть изменены каким-то другим (примеры включают WaitHandle или оболочку только для чтения в записи, доступной для записи)
Если IsReadOnly является ложным, то ясно, что элемент является типом 1. Если это правда, однако, может быть неясно, будет ли он вводить 2 или 3. В зависимости от характера объекта может быть полезно иметь свойство IsFrozen в дополнение к IsReadOnly. Код, который хочет знать, может ли быть изменен внешний объект, будет использовать IsFrozen; код, который хочет знать, разрешено ли изменять сам объект, будет использовать IsReadOnly.