YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Код  Cocoaheads Ulayanovsk (September 2016)

Код

Чебулаев Олег, Perpetuum Mobile Lab

CocoaHeads 2016

Page 2: Код  Cocoaheads Ulayanovsk (September 2016)

Литература

Page 3: Код  Cocoaheads Ulayanovsk (September 2016)

Грязный код• Увеличивает количество ошибок в приложении • Снижает производительность и скорость разработки

• Увеличивает стоимость поддержки и дальнейших изменений

Page 4: Код  Cocoaheads Ulayanovsk (September 2016)

Чистый код«Чистый код прост и прямолинеен. Чистый код читается, как хорошо написанная проза.

Чистый код никогда не затемняет намерения проектировщика; он полон четких абстракций и простых линий передачи управления»Грэди Буч

Page 5: Код  Cocoaheads Ulayanovsk (September 2016)

Главный принцип именования

Имя должно полно и точно описывать сущность, представляемую

переменной

Page 6: Код  Cocoaheads Ulayanovsk (September 2016)

Передают намерения программиста

NSObject *dataObject = [self dataObjectWithRow:indexPath.row];

CustomLabel *customLabel = [CustomLabel new];

id<SectionDescription> sectionDescription = [self sectionDescriptionByRow:indexPath.row];

ScrollableLabel *ticker = [ScrollableLabel new];

Page 7: Код  Cocoaheads Ulayanovsk (September 2016)

Не дают ложную информацию

NSArray *usersList = [NSArray new];

NSArray *usersList = [NSDictionary new];

Page 8: Код  Cocoaheads Ulayanovsk (September 2016)

Длинна имениДолжна соответствовать размеру его области видимости

// StyleDefines.hstatic CGSize const TransportSectionCellIconSize = {18.0f, 18.0f};

// StyleDefines.hstatic CGSize const iconSize = {18.0f, 18.0f};

Page 9: Код  Cocoaheads Ulayanovsk (September 2016)

Соблюдайте порядок слов и окончания

NSArray *dreamsList;pagesCount или countOfPages

NSArray *dreamList;countPage;

Прилагательное+Существительное

Page 10: Код  Cocoaheads Ulayanovsk (September 2016)

ЧислаНикаких чисел в названиях

переменных

Page 11: Код  Cocoaheads Ulayanovsk (September 2016)

Имена классов• Состоят из существительных, прилагательных и их комбинаций

• Отражают суть намерений

ScrollableLabel *ticker;

CustomCellBackground *backgorund;Users

Page 12: Код  Cocoaheads Ulayanovsk (September 2016)

Одно слово для одной концепции

Points, Coins, Rewards, StarsAppointment, record, registration, reservation

Page 13: Код  Cocoaheads Ulayanovsk (September 2016)

Часто используемые антонимы

add/remove increment/decrement

open/close begin/end

insert/delete show/hide

create/destroy lock/unlock

source/target first/last min/max start/stop get/put

next/previous up/down get/set

old/new

Page 14: Код  Cocoaheads Ulayanovsk (September 2016)

Конвенции именованияNYTimes Style Guide https://github.com/NYTimes/objective-c-style-guide

Raywenderlich Style Guide https://github.com/raywenderlich/objective-c-style-guide

Page 15: Код  Cocoaheads Ulayanovsk (September 2016)

Конвенции везде• Исходные коды • Файлы локализации • Именорование ресурсов

Page 16: Код  Cocoaheads Ulayanovsk (September 2016)

Разумные причины создать метод

• снижение сложности; • формирование понятной

промежуточной абстракции; • предотвращение дублирования

кода; • поддержка наследования; • сокрытие очередности действий; • сокрытие операций над

указателями; • улучшение портируемости; • упрощение сложных булевых

проверок; • повышение быстродействия

• изоляция сложности; • сокрытие деталей реализации; • ограничение влияния

изменений; • сокрытие глобальных данных; • создание центральных точек

управления; • облегчение повторного

использования кода; • выполнение специфического

вида рефакторинга.

Page 17: Код  Cocoaheads Ulayanovsk (September 2016)

Ментальные барьеры

if (user.sessionToken) VS

if ([user isAuthenticated])

Page 18: Код  Cocoaheads Ulayanovsk (September 2016)

Side эффекты функций- (BOOL)isValidEmail:(NSString *)email - andPassword:(NSString *)password { if ([email isEqualToString:@""] || [email isEqualToString:@""]) { return NO; } self.session = [PMSession sessionWith:email password:password]; return YES; }

Page 19: Код  Cocoaheads Ulayanovsk (September 2016)

Псевдокод

Page 20: Код  Cocoaheads Ulayanovsk (September 2016)

Комментарии

Page 21: Код  Cocoaheads Ulayanovsk (September 2016)

Принципы

GRASP SOLID CQS

Law of Demeter Единый уровень абстракции

Page 22: Код  Cocoaheads Ulayanovsk (September 2016)

Литература

Блог Александра Бындю http://blog.byndyu.ru/

Page 23: Код  Cocoaheads Ulayanovsk (September 2016)

Вопросы?


Related Documents