SlideShare a Scribd company logo
1 of 23
Download to read offline
Код
Чебулаев Олег,
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.h

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

static CGSize const iconSize = {18.0f, 18.0f};
Соблюдайте порядок слов
и окончания
NSArray *dreamsList;

pagesCount или countOfPages
NSArray *dreamList;

countPage;

Прилагательное+Существительное
Числа
Никаких чисел в названиях
переменных
Имена классов
• Состоят из существительных, прилагательных и их
комбинаций
• Отражают суть намерений
ScrollableLabel *ticker;
CustomCellBackground *backgorund;

Users
Одно слово для одной
концепции
Points, Coins, Rewards, Stars

Appointment, 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/
Вопросы?

More Related Content

Similar to Код Cocoaheads Ulayanovsk (September 2016)

kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDKrivoy Rog IT Community
 
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахСпособы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахSQALab
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем ТитаренкоCodeFest
 
Next Gen Applications
Next Gen ApplicationsNext Gen Applications
Next Gen ApplicationsVittorio Cioe
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"DataArt
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)e-Legion
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3rit2011
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать кодMoscowDjango
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Качество кода авто-тестов @ uatestingdays
Качество кода авто-тестов @ uatestingdaysКачество кода авто-тестов @ uatestingdays
Качество кода авто-тестов @ uatestingdaysartkoshelev
 
Разработка и внедрение PHP SDK myTarget
Разработка и внедрение PHP SDK myTargetРазработка и внедрение PHP SDK myTarget
Разработка и внедрение PHP SDK myTargetSocialKey Ads
 
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)Егор Тютюников
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
 
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникSigma Software
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияandreyborue
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 

Similar to Код Cocoaheads Ulayanovsk (September 2016) (20)

UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерахСпособы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
Next Gen Applications
Next Gen ApplicationsNext Gen Applications
Next Gen Applications
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)
 
документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3документирование долгоживущих веб проектов. г. белогорцев. зал 3
документирование долгоживущих веб проектов. г. белогорцев. зал 3
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в коде
 
TDD или как я стараюсь писать код
TDD или как я стараюсь писать кодTDD или как я стараюсь писать код
TDD или как я стараюсь писать код
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Качество кода авто-тестов @ uatestingdays
Качество кода авто-тестов @ uatestingdaysКачество кода авто-тестов @ uatestingdays
Качество кода авто-тестов @ uatestingdays
 
Разработка и внедрение PHP SDK myTarget
Разработка и внедрение PHP SDK myTargetРазработка и внедрение PHP SDK myTarget
Разработка и внедрение PHP SDK myTarget
 
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)
Разработка и внедрение PHP SDK myTarget. Василь Кулаков (DSL)
 
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
 
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 

Код Cocoaheads Ulayanovsk (September 2016)