Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[Thinknetica, 2015] Почему код должен быть стил...

[Thinknetica, 2015] Почему код должен быть стильным?

Avatar for Vladimir Dementyev

Vladimir Dementyev

March 15, 2015
Tweet

More Decks by Vladimir Dementyev

Other Decks in Programming

Transcript

  1. Style Guide Стилистический справочник или руководство по стилю — справочное

    издание с набором стандартов и обязательных для соблюдения требований при написании и оформлении статей в конкретном издании или при составлении документов в той или иной организации.
  2. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. def some_kinda_fun a, even = false x = if even then a+1 else a end {:x => a, :y => x} end def some_kinda_fun(a, even: false) x = flag ? a+1 : a {x: a, y: x} end
  3. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. unless user.active? || address.confirmed? ... end If !user.blank? … end
  4. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. 2. История изменений содержит только изменения в логике, а не в форматировании.
  5. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. 2. История изменений содержит только изменения в логике, а не в форматировании. 3. Новым членам команды проще влиться в процесс разработки.
  6. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. 2. История изменений содержит только изменения в логике, а не в форматировании. 3. Новым членам команды проще влиться в процесс разработки. 4. Предупреждаем появление глупых ошибок.
  7. 1. Разработчикам легче понимать друг друга, когда они говорят на

    одном языке. 2. История изменений содержит только изменения в логике, а не в форматировании. 3. Новым членам команды проще влиться в процесс разработки. 4. Предупреждаем появление глупых ошибок. 5. Пишем более быстрый код.
  8. 5. Пишем более быстрый код. # плохо my_arr.reverse.each { ...

    } my_arr.select { … }.first # хорошо my_arr.reverse_each { … } my_arr.detect { … }
  9. Rubocop: Cops — Style – стиль кода (форматирование) Style/UnlessElse –

    не используй unless с else Style/TrailingWhitespace – избегай пробелов в конце строки Style/StringLiterals – использование ковычек (двойные или одинарные?)
  10. Rubocop: Cops — Lint – синтаксис и плохие практики Lint/DuplicateMethods

    – проверяет на наличие повторяющихся методов Lint/RequireParentheses – не забывай про скобки в сложных условиях (if day.is? 'monday' && month == :jan) Lint/Debugger – не забудь удалить binding.pry
  11. Rubocop: Cops — Metrics – различные метрики кода Metrics/LineLength –

    следит за длиной строки Metrics/BlockNesting – следит за глубиной ветвления Metrics/MethodLength – следит за числом строк в методе
  12. Rubocop: Cops — Rails – специфические проверки для RoR Rails/HasAndBelongsToMany

    – предостерегает от использования HABTM в пользу has_many: :through Rails/Validation – ругается на использование old school валидаций (validate_presence_of, etc) Rails/TimeZone – ругается на использование временных функций без временной зоны
  13. Rubocop: Cops — Performance – как сделать код быстрее Performance/Detect

    – используй detect вместо select.first Performance/ReverseEach – используй reverse_each вместо reverse.each Продолжение следует…
  14. Rubocop: Custom Cops — RSpec (https://github.com/nevir/rubocop-rspec) RSpec/MultipleDescribes – должен быть

    только один describe верхнего уровня в файле RSpec/InstanceVariable – используй let(:user) {…} вместо before { @user = … }
  15. Rubocop: Начало работы gem install rubocop # установили rubocop #

    запустили rubocop –l # только Lint копы rubocop –a # автоматическое исправление