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

Код Cocoaheads Ulayanovsk (September 2016)

  • Upload
    -

  • View
    48

  • Download
    3

Embed Size (px)

Citation preview

Код

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

CocoaHeads 2016

Литература

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

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

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

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

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

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

переменной

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

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

CustomLabel *customLabel = [CustomLabel new];

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

ScrollableLabel *ticker = [ScrollableLabel new];

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

NSArray *usersList = [NSArray new];

NSArray *usersList = [NSDictionary new];

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

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

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

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

NSArray *dreamsList;pagesCount или countOfPages

NSArray *dreamList;countPage;

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

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

переменных

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

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

ScrollableLabel *ticker;

CustomCellBackground *backgorund;Users

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

if (user.sessionToken) VS

if ([user isAuthenticated])

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

Псевдокод

Комментарии

Принципы

GRASP SOLID CQS

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

Литература

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

Вопросы?