Я люблю две вещи: Intellij IDEA и чистый код (Clean Code).
IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/97a/439/058/97a4390585014bb1bbac9ba1fe8d1af1.png)
Но она всё ещё не идеальна.
Когда я устанавливаю новую копию IDEA, я пробегаю по настройкам и выставляю свои любимые галочки.
Хочу ими с вами поделиться в надежде, что когда-нибудь и они станут стандартом.
Для начала напомню, что такое чистый код в моём понимании. Чистый код — это (в том числе)
Давайте посмотрим, что нужно настроить в IDEA, чтобы она способствовала написанию чистого кода.
Первым делом я всегда удаляю самый большой буллщит в Intellij IDEA — стандартный заголовок файлов:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/5a6/b29/307/5a6b29307e404168967e01580b54e125.png)
Вся информация об авторах и датах должна храниться в специально отведённом для этого месте — системе контроля версий. Я не хочу захламлять этим код!
Аналогичным образом удаляю стандартные заголовки для некоторых языков:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/fc1/7e7/a80/fc17e7a802152ad6f200cbcadaec259f.png)
Примерно в том же меню я удаляю надоедливые «throws Exception» в шаблонах для JUnit:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/50e/32c/03c/50e32c03c4d2e53dd10f28c70bc21287.png)
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/d5c/542/e8a/d5c542e8a3c3e86527b51d5e250ad7e8.png)
Они не нужны в большинстве случаев и только загрязняют код.
Чем меньше кода, не несущего полезной логики — тем лучше!
А там, где они понадобятся, IDEA добавит их на раз.
Дальше я ставлю галочку «auto import». Когда я пишу в коде новое имя класса, пусть IDEA сама его моментально импортирует. Почему я должен беспокоится о том, что компьютер может сделать за меня? Лучше я не буду отвлекаться от действительно важных мыслей.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/eb3/c81/e9f/eb3c81e9fc0e13e07cd468cf27f29390.png)
Это аццки удобная фича, попробуйте!
Возможно, это уже дело вкуса и зависит от проекта, но для меня ограничение в 5 табов — просто неприемлемо. 20 как минимум! И когда я закрываю вкладку C, я интуитивно ожидаю, что я окажусь в предпоследнем месте B (откуда я пошёл в C). А когда я закрою и B, мне кажется логичным вернуться в A. Поэтому ставлю галочку «Activate most recently used tab». Варианты «пойти налево» и «пойти направо» — просто нонсенс.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/65e/cec/880/65ecec8805c985b11714077f1c2603fe.png)
Далее я обязательно назначаю комбинацию клавиш Ctrl+F7 на действие «Show usages». Это очень удобное действие, я его использую, наверное, чаще всех остальных! По умолчанию у него какая-то другая комбинация клавиш, не такая удобная. А Ctrl+F7 по умолчанию делает что-то другое, не такое полезное.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/cfc/ed0/9b0/cfced09b09babbf7178888549c5c9194.png)
А действие «Show Usages» показывает все места, где используется данная переменная/метод, прямо тут же, в маленьком всплывающем окошке. Это чертовски удобно, не нужно переключать внимание и переносить взгляд в другое место! По нему можно удобно бегать вверх-вниз стрелками и закрывать простым ESC. Навигация на кончиках пальцев!
Вот как выглядит Show Usages в действии:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/d6a/a9d/104/d6aa9d104cdc8759c3c5c714483ce891.png)
Важная опция, про которую не все знают — это CamelHumps. Эта опция говорит, как должна вести себя IDEA со словами типа AbstractStudentFactory, где есть несколько заглавных букв. Я лично предпочитаю, чтобы
То есть если курсор стоит в начале слова AbstractStudentFactory, и я нажимаю Ctrl+вправо, я хочу, чтобы курсор скакнул к началу подслова «Student», а не сразу в конец. В IDEA по умолчанию ровно наоборот.
Первый пункт регулируется в Settings -> Editor (самая первая галочка):
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/075/a66/494/075a66494cff277a8c52675a06de8537.png)
А второй там же, в подменю «Smart keys»:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/a2f/e6b/07c/a2fe6b07ce13f7bc5cdce4e8f7ae8949.png)
Многие знают (или догадываются), что IDEA автоматически сохраняет файлы, когда ты переключаешься в другую программу. Или когда запускаешь тесты. Это здорово. Не нужно постоянно нажимать Ctrl+S.
Но ещё было бы полезно, если б IDEA сохраняла файлы и просто так, когда я иду за чаем. Поэтому ставлю галочку «Save files automatically»:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/3d6/b10/925/3d6b109255537e985883219192151ec3.png)
И благодаря этому могу смело поставить ещё одну галочку, чтобы IDEA не спрашивала меня «Are you sure you want to exit IDEA»?
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/abe/9f2/914/abe9f29141d04cc5cfccb8217bb9bbac.png)
Меня не надо об этом переспрашивать. Я не боюсь закрыть IDEA в любой момент, потому что всегда могу открыть её снова, и там будут все мои файлы в целости и сохранности.
Автоматические проверки кода — в наше время обязательное умение для IDE. В IDEA их много, полезных и не очень, не буду тут все рассматривать. Но одну я ставлю обязательно, причём строго с приоритетом «Error»: это «Missing @ Override annotation».
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/d6d/a6a/5b1/d6da6a5b1dacb00393377f42e937f740.png)
Строго говоря, это не имеет отношения к чистому коду. Просто я однажды провёл несколько вечеров в поиске зловредной неповторяемой баги, которая случалась потому, что кто-то случайно написал в подклассе метод с таким же именем, как в суперклассе (а именно, метод setUp в тесте). С тех пор я ревностно ставлю проверку на отсутствующую аннотацию @ Override.
Одна из хороших практик правильного программирования — это частые небольшие коммиты. Каждый коммит должен быть атомарным и делать одно изменение, а не сразу кучу разных.
Когда я следую этим правилам и коммичу 3 файла из 8 (остальные 5 я собираюсь тут же послать следующим коммитом), IDEA предлагает перенести остальные 5 файлов в другой «changeset». Возможно, это когда-то могло показаться удачной идеей, но в большинстве случаев я всё-таки собираюсь вскоре закоммитить и остальные 5 файлов тоже. Поэтому отключаем эту галочку:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/7ac/7b0/384/7ac7b0384b7834dc7963e2bb3cc5acd3.png)
Далее, когда я сделал несколько маленьких коммитов и хочу это дело запушить (git push), я сталкиваюсь с проблемой, что в IDEA нет комбинации клавиш для Push, а искать эту команду в меню реально неудобно. Делаем свой шорткат Ctrl+Shift+K:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/aae/df8/7e7/aaedf87e7f2835e665d8b42df9e5560b.png)
Это удобно запомнить: Ctrl+K — коммит, Ctrl+Shift+K — пуш.
IDEA хороша тем, что все необходимые плагины в ней уже есть из коробки. Для большинства ежедневных потребностей не нужно что-то искать и устанавливать дополнительно.
Но один плагин я ставлю обязательно. Это Key Promoter plugin — надоедливый подсказчик, заставляющий меня учить шорткаты. Каждый раз, когда я выбираю какое-то действие мышкой, он тут же говорит мне: «А ты таки мог это сделать такой-то комбинацией клавиш!» Он такой надоедливый, что ты волей-неволей начинаешь использовать эти шорткаты, лишь бы не видеть его лишний раз.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/00e/0c9/1da/00e0c91da05cd45b36dfc1bb9c198763.png)
И наконец, последняя галочка. Я хочу, чтобы IDEA анализировала мою работу с ней и ежедневно посылала собранную информацию в JetBrains. Это мой вклад в развитие отличного продукта Intellij IDEA.
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/854/b23/1e0/854b231e0a5ac3b5d8d5ca76ee4549d6.png)
Дорогие ребята из JetBrains, если это вам поможет сделать IDEA ещё лучше — следите за мной, анализируйте меня, берите всё что потребуется!
Чистого кода вам в наступающем!
IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.
![](https://habrastorage.org/getpro/habr/post_images/97a/439/058/97a4390585014bb1bbac9ba1fe8d1af1.png)
Но она всё ещё не идеальна.
Когда я устанавливаю новую копию IDEA, я пробегаю по настройкам и выставляю свои любимые галочки.
Хочу ими с вами поделиться в надежде, что когда-нибудь и они станут стандартом.
Чистый код — это
Для начала напомню, что такое чистый код в моём понимании. Чистый код — это (в том числе)
- Минимум комментариев. Код должен быть читаем сам по себе.
- Небольшие функции. Длинные функции должны быть разбиты на несколько маленьких с говорящими именами.
- Частые коммиты. Каждый коммит должен быть атомарным и делать одно изменение, а не кучу разных.
- Тесты. Не просто наличие тестов, а предельное внимание к ним.
Давайте посмотрим, что нужно настроить в IDEA, чтобы она способствовала написанию чистого кода.
Мои любимые галочки
Стандартные заголовки
Первым делом я всегда удаляю самый большой буллщит в Intellij IDEA — стандартный заголовок файлов:
![](https://habrastorage.org/getpro/habr/post_images/5a6/b29/307/5a6b29307e404168967e01580b54e125.png)
Вся информация об авторах и датах должна храниться в специально отведённом для этого месте — системе контроля версий. Я не хочу захламлять этим код!
Аналогичным образом удаляю стандартные заголовки для некоторых языков:
![](https://habrastorage.org/getpro/habr/post_images/fc1/7e7/a80/fc17e7a802152ad6f200cbcadaec259f.png)
Неисключительные исключения
Примерно в том же меню я удаляю надоедливые «throws Exception» в шаблонах для JUnit:
![](https://habrastorage.org/getpro/habr/post_images/50e/32c/03c/50e32c03c4d2e53dd10f28c70bc21287.png)
![](https://habrastorage.org/getpro/habr/post_images/d5c/542/e8a/d5c542e8a3c3e86527b51d5e250ad7e8.png)
Они не нужны в большинстве случаев и только загрязняют код.
Чем меньше кода, не несущего полезной логики — тем лучше!
А там, где они понадобятся, IDEA добавит их на раз.
За чистотой тестов надо следить ещё внимательнее, чем за чистотой кода!
Автоматический импорт
Дальше я ставлю галочку «auto import». Когда я пишу в коде новое имя класса, пусть IDEA сама его моментально импортирует. Почему я должен беспокоится о том, что компьютер может сделать за меня? Лучше я не буду отвлекаться от действительно важных мыслей.
![](https://habrastorage.org/getpro/habr/post_images/eb3/c81/e9f/eb3c81e9fc0e13e07cd468cf27f29390.png)
Это аццки удобная фича, попробуйте!
Работа с вкладками
Возможно, это уже дело вкуса и зависит от проекта, но для меня ограничение в 5 табов — просто неприемлемо. 20 как минимум! И когда я закрываю вкладку C, я интуитивно ожидаю, что я окажусь в предпоследнем месте B (откуда я пошёл в C). А когда я закрою и B, мне кажется логичным вернуться в A. Поэтому ставлю галочку «Activate most recently used tab». Варианты «пойти налево» и «пойти направо» — просто нонсенс.
Дорогой Дед Мороз, пожалуйста, убери их вообще из настроек IDEA, а я обещаю вести себя хорошо!
![](https://habrastorage.org/getpro/habr/post_images/65e/cec/880/65ecec8805c985b11714077f1c2603fe.png)
Show usages
Далее я обязательно назначаю комбинацию клавиш Ctrl+F7 на действие «Show usages». Это очень удобное действие, я его использую, наверное, чаще всех остальных! По умолчанию у него какая-то другая комбинация клавиш, не такая удобная. А Ctrl+F7 по умолчанию делает что-то другое, не такое полезное.
![](https://habrastorage.org/getpro/habr/post_images/cfc/ed0/9b0/cfced09b09babbf7178888549c5c9194.png)
А действие «Show Usages» показывает все места, где используется данная переменная/метод, прямо тут же, в маленьком всплывающем окошке. Это чертовски удобно, не нужно переключать внимание и переносить взгляд в другое место! По нему можно удобно бегать вверх-вниз стрелками и закрывать простым ESC. Навигация на кончиках пальцев!
Вот как выглядит Show Usages в действии:
![](https://habrastorage.org/getpro/habr/post_images/d6a/a9d/104/d6aa9d104cdc8759c3c5c714483ce891.png)
ВерблюжьиГорбы
Важная опция, про которую не все знают — это CamelHumps. Эта опция говорит, как должна вести себя IDEA со словами типа AbstractStudentFactory, где есть несколько заглавных букв. Я лично предпочитаю, чтобы
- IDEA выделяла всё слово целиков, когда я дважды кликаю на него мышкой, и
- IDEA бегала между большими буквами, когда я хожу по слову влево-вправо стрелками с нажатым Ctrl.
То есть если курсор стоит в начале слова AbstractStudentFactory, и я нажимаю Ctrl+вправо, я хочу, чтобы курсор скакнул к началу подслова «Student», а не сразу в конец. В IDEA по умолчанию ровно наоборот.
Первый пункт регулируется в Settings -> Editor (самая первая галочка):
![](https://habrastorage.org/getpro/habr/post_images/075/a66/494/075a66494cff277a8c52675a06de8537.png)
А второй там же, в подменю «Smart keys»:
![](https://habrastorage.org/getpro/habr/post_images/a2f/e6b/07c/a2fe6b07ce13f7bc5cdce4e8f7ae8949.png)
Автосохранение файлов
Многие знают (или догадываются), что IDEA автоматически сохраняет файлы, когда ты переключаешься в другую программу. Или когда запускаешь тесты. Это здорово. Не нужно постоянно нажимать Ctrl+S.
Вы не поверите: я до сих пор не могу избавиться от привычки постоянно жать Ctrl+S, хотя пересел с Eclipse на IDEA уже три года назад! Вот какая вредная привычка.
Но ещё было бы полезно, если б IDEA сохраняла файлы и просто так, когда я иду за чаем. Поэтому ставлю галочку «Save files automatically»:
![](https://habrastorage.org/getpro/habr/post_images/3d6/b10/925/3d6b109255537e985883219192151ec3.png)
И благодаря этому могу смело поставить ещё одну галочку, чтобы IDEA не спрашивала меня «Are you sure you want to exit IDEA»?
![](https://habrastorage.org/getpro/habr/post_images/abe/9f2/914/abe9f29141d04cc5cfccb8217bb9bbac.png)
Меня не надо об этом переспрашивать. Я не боюсь закрыть IDEA в любой момент, потому что всегда могу открыть её снова, и там будут все мои файлы в целости и сохранности.
Inspections
Автоматические проверки кода — в наше время обязательное умение для IDE. В IDEA их много, полезных и не очень, не буду тут все рассматривать. Но одну я ставлю обязательно, причём строго с приоритетом «Error»: это «Missing @ Override annotation».
![](https://habrastorage.org/getpro/habr/post_images/d6d/a6a/5b1/d6da6a5b1dacb00393377f42e937f740.png)
Строго говоря, это не имеет отношения к чистому коду. Просто я однажды провёл несколько вечеров в поиске зловредной неповторяемой баги, которая случалась потому, что кто-то случайно написал в подклассе метод с таким же именем, как в суперклассе (а именно, метод setUp в тесте). С тех пор я ревностно ставлю проверку на отсутствующую аннотацию @ Override.
Частые коммиты
Одна из хороших практик правильного программирования — это частые небольшие коммиты. Каждый коммит должен быть атомарным и делать одно изменение, а не сразу кучу разных.
Когда я следую этим правилам и коммичу 3 файла из 8 (остальные 5 я собираюсь тут же послать следующим коммитом), IDEA предлагает перенести остальные 5 файлов в другой «changeset». Возможно, это когда-то могло показаться удачной идеей, но в большинстве случаев я всё-таки собираюсь вскоре закоммитить и остальные 5 файлов тоже. Поэтому отключаем эту галочку:
![](https://habrastorage.org/getpro/habr/post_images/7ac/7b0/384/7ac7b0384b7834dc7963e2bb3cc5acd3.png)
Далее, когда я сделал несколько маленьких коммитов и хочу это дело запушить (git push), я сталкиваюсь с проблемой, что в IDEA нет комбинации клавиш для Push, а искать эту команду в меню реально неудобно. Делаем свой шорткат Ctrl+Shift+K:
![](https://habrastorage.org/getpro/habr/post_images/aae/df8/7e7/aaedf87e7f2835e665d8b42df9e5560b.png)
Это удобно запомнить: Ctrl+K — коммит, Ctrl+Shift+K — пуш.
Дорогой Санта, добавь Ctrl+Shift+K в IDEA по умолчанию?
Учите, учите и ещё раз учите шорткаты!
IDEA хороша тем, что все необходимые плагины в ней уже есть из коробки. Для большинства ежедневных потребностей не нужно что-то искать и устанавливать дополнительно.
Но один плагин я ставлю обязательно. Это Key Promoter plugin — надоедливый подсказчик, заставляющий меня учить шорткаты. Каждый раз, когда я выбираю какое-то действие мышкой, он тут же говорит мне: «А ты таки мог это сделать такой-то комбинацией клавиш!» Он такой надоедливый, что ты волей-неволей начинаешь использовать эти шорткаты, лишь бы не видеть его лишний раз.
![](https://habrastorage.org/getpro/habr/post_images/00e/0c9/1da/00e0c91da05cd45b36dfc1bb9c198763.png)
Обратная связь
И наконец, последняя галочка. Я хочу, чтобы IDEA анализировала мою работу с ней и ежедневно посылала собранную информацию в JetBrains. Это мой вклад в развитие отличного продукта Intellij IDEA.
![](https://habrastorage.org/getpro/habr/post_images/854/b23/1e0/854b231e0a5ac3b5d8d5ca76ee4549d6.png)
Дорогие ребята из JetBrains, если это вам поможет сделать IDEA ещё лучше — следите за мной, анализируйте меня, берите всё что потребуется!
Чистого кода вам в наступающем!