Skip to content

Instantly share code, notes, and snippets.

@tonyhex
Created March 22, 2017 14:30
Show Gist options
  • Save tonyhex/c7061f16192183666e3b7969ed84c8d3 to your computer and use it in GitHub Desktop.
Save tonyhex/c7061f16192183666e3b7969ed84c8d3 to your computer and use it in GitHub Desktop.
Имена булевых свойств в Objective-C
В Objective-C принятно, что имена булевых свойств должны быть причастиями, связками с причастиями или связками с глаголами в третьем лице.
Например, так делать нельзя: @property(nonatomic, readonly) BOOL isShowTileOverlay;
Вот список причин, почему так делать нельзя:
1. Имя свойства никогда не должно начинаться с is. С глагола is может начинаться только getter.
2. Даже если isShowTileOverlay переместить в getter, получившееся свойство все равно будет неверно, поскольку show — глагол и на английском языке нельзя сказать is show - это грамматическая ошибка.
3. Вызов [self showTileOverlay] судя из названия означает буквально "покажи tile overlay", но у нас это не метод, а свойство, которое возвращает BOOL и не делает ничего больше.
Нужно исходить из того, чем является сам объект self и к чему относится данное свойство. Сам объект, чьему свойству мы хотим придумать название, всегда должен быть сказуемым. Исходя из этого и вытекает название свойства. В нашем случае объектself — карта и у этой карты есть объект overlay. Исходя из этой структуры свойство должно называться некотораяКарта.отображаетЛиOverlay. Заметьте, ненекотораяКарта.видимЛиOverlay и не некотораяКарта.отображаетсяЛиOverlay — в этих неверных примерах сама карта не является сказуемым, а как сказано выше объект должен быть сказуемым, то есть отвечать на вопрос сказуемого "Что делает?".некотораяКарта что делает ли? — отображаетЛиOverlay. Отсюда понятно, то сказать "некотораяКарта что делает ли? — видимЛиOverlay" — нельзя. Итак верным вариантом будет некотораяКарта.отображаетЛиOverlay, что на англ. переводится как [self showsTileOverlay]:
@property(nonatomic, readonly) BOOL showsTileOverlay;
Заметьте, в данном случае используется не причастие, а глагол show, поэтому форма геттера isShowsTileOverlay — неверная и не должна использоватья.
Итого вот только две формы BOOL-свойств, которые могут использоваться
@property(nonatomic, readonly) BOOL глагол3ЛицаЧтото;
@property(nonatomic, readonly, getter = isПричастиеИлиПрилагательное) BOOL причастиеИлиПрилагательное;
В качестве глагола 3-го лица используется
@property(nonatomic, readonly) BOOL shouldDoSomething;
@property(nonatomic, readonly) BOOL showsSomething;
@property(nonatomic, readonly) BOOL reloadsSomething;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment