Top Banner
Код Чебулаев Олег, Perpetuum Mobile Lab CocoaHeads 2016
23

Код Cocoaheads Ulayanovsk (September 2016)

Apr 12, 2017

Download

Mobile

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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)

Вопросы?