Created
March 22, 2017 14:30
-
-
Save tonyhex/c7061f16192183666e3b7969ed84c8d3 to your computer and use it in GitHub Desktop.
Имена булевых свойств в Objective-C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
В 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