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

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

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

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 # автоматическое исправление