Всем привет!

До выпуска нашей первой группы курса «Разработчик C++» остались считанные дни. По итогам неплохо поработали напильником и надфилем над курсом: перекомпоновали домашние задания, обновили версию язык и ещё разное по мелочи. Ну, а пока продолжаем нашу традицию по интересным и полезным материалам.

Поехали.

Судя по собственному опыту разработки, многие разработчики C/C++ пренебрегают идеей, что IDE может сделать их работу продуктивней. Ведь что может быть лучше, чем простые и быстрые Vim или Emac. Что ж, позвольте продемонстрировать. Эти 10 советов CLion поднимут вас на новый уровень продуктивности, помогут сфокусироваться на важных и сложных задачах, в то время как IDE решит за вас рутинные задачи.

Прежде чем начать, познакомимся с CLion, новой кроссплатформенной IDE для разработки на C и C++, созданной JetBrains. Она изначально поддерживает C и C++, включая стандарт C++11 (с некоторыми небольшими ограничениями), libc++ и Boost. Она корректно обрабатывает макросы и шаблоны, а также работает с GCC или Clang (при работе с Windows понадобится или MinGW/MinGW-w64, или Cygwin), GDB, как встроенный дебаггер, и CMake, как система сборки и проектная модель. В дополнении к C/C++ также можно пользоваться JavaScript, XML, HTML и CSS на том же уровне редактирования кода, используя, например, подсветку синтаксиса, анализ, автодополнение, навигацию и рефакторинг.


1. Умное автодополнение знает, что вам нужно

В первую очередь, нам всем нужен редактор. Автодополнение кода крайне важно: мы просто начинаем вводить символ (переменная, функция, тип, имя класса) и редактор показывает нам список подходящих предложений. Это просто, но действительно ли нам нужны все те опции, описанные в примере ниже?



Зачастую нам нужно только что-то с типом idPlayer *. И именно это показывает умное автодополнение CLion! Она автоматически фильтрует предложения, основываясь на контексте кода:



Ах да, а если найден только один возможный вариант, он будет мгновенно использован!

2. Используйте сразу, определяйте позднее

Когда появляется гениальная идея, не хочется тратить время на скучные рутинные задачи. Предположим, вы использовали функцию, которая до сих пор не была имплементирована или даже определена. CLion выделяет ее красным. Нужно ли сразу задержаться для имплементации функции? Вовсе нет! Попросите CLion сгенерировать заглушку и вернитесь к этому моменту позднее. Просто нажмите Alt+Enter:



Объявление и определение мгновенно появятся в вашем коде:



Работает аналогичным образом для переменных и имен классов:



3. Live template’ы для ваших любимых или наиболее используемых фрагментов кода

Как получить цикл или итерацию по диапазону (в стиле C++11) просто напечатав несколько символов? Введите for и нажмите Tab, чтобы получить цикл; или введите iter или itit, а затем нажмите Tab:



При ближайшем рассмотрении окажется, что в Clion можно создавать пользовательские Live Template’ы или “Surround With” шаблоны (которые быстро заворачивают выбранный код в конструкт). Покажем пример, как быстро получить класс, с наследованием из другого существующего класса:



После добавления нового “cp” шаблона, можно ввести cp в редакторе:



Описание шаблона можно сразу увидеть в выпадающем списке автодополнения. Шаблон расширяется при нажатии Tab. Теперь можно добавить новое название класса, затем выбрать родительский класс и модификатор для него из списка автодополнения:



Вуаля! Новый класс готов.



Конечно, можно сгенерировать более сложные шаблоны, включая переменную $SELECTION$ для получения “Surround With” шаблона.

4. Следуйте иерархическому виду

Разработчики читают код значительно чаще, чем пишут его. Перед тем, как добавить новый код или обновить существующий, проводится глубокое и детальное исследование существующей кодовой базы. (Только если вы не начинаете проект с нуля, что редкость.) Во многих случаях продуктивность зависит от того, как быстро можно пробраться сквозь кодовую базу.
Для таких случаев CLion предоставляет широкий спектр возможностей навигации по коду:

  • используйте стандартные инструменты goto объявления/определения;
  • быстро переходите к соответствующему символу, недавним файлам или месту, которые вы правили последним;
  • ищите любой класс, файл или символ по названию;
  • используйте контекстный поиск с Find Usage;
  • перемещайтесь по текущему файлу с использованием вида File Structure;
  • извлекайте пользу из нескольких иерархических видов, включая Call Hierarchy, Type Hierarchy и Imports Hierarchy.

Call Hierarchy — мой любимый. Он позволяет увидеть в деталях весь стек вызовов с ветками. Выглядит очень просто, не правда ли? Одним кликом вы можете переместиться в нужное место в редакторе, а воспользуясь автопрокруткой в Source, сделать процесс еще быстрее:



5. Меняйте порядок и добавляйте параметры — IDE позаботится об использовании

Рефакторинг — мощный процесс, который помогает улучшить код, сделать его чище и удобней. Некоторые IDE предлагают ограниченное количество способов его автоматизации. В CLion их очень много — от простых и популярных Rename до сложных Change Signature, Extract Function или Class, Inline и многие другие. Можете положиться на CLion, корректность кода сохранится и при внесении изменений рефакторинга.

Позвольте наглядно проиллюстрировать надежность CLion. Предположим, есть функция:



Чтобы добавить новый параметр в эту функцию, я воспользуюсь рефакторингом Change Signature:



К слову, добавлять новый тип параметра в этом окне очень просто благодоря автодополнению кода. После того, как я нажимаю “Refactor”, Clion обновляет подпись и все использования, заменив значение по умолчанию для данного типа, которое в этом случае равно nullptr:



А что, если я решу упорядочить параметры во время Change Signature? Конечно же, их порядок обновится в соответствии со всеми использованиями:



6. Извлекайте все, с большим количеством опций

Извлечение части кода в отдельную функцию — популярный метод рефакторинга, но что насчет других? Например Extract Typedef, Define, Variable, Parameter или даже Subclass? Опыт их использования в CLion улучшается благодаря небольшим, но полезным деталям. Например, вы можете изменить все вхождения (если их больше одного) при извлечении константы или переменной; объявить константу или параметр статическими; использовать auto тип при извлечении переменной; и так далее и тому подобное:



7. Неиспользуемый код? “=” в условии? Не проблема!

Следуя закону Мерфи для компьютеров, в каждой нетривиальной программе есть хотя бы один баг. Но давайте сделаем все возможное и исправим как можно больше из них. Пока мы стараемся локализовать и, надеюсь, пофиксить баги, CLion постоянно мониторит ваш код на наличие потенциальных ошибок. Любая подозрительная часть кода подчеркивается в редакторе, и предлагаются опции возможных быстрых фиксов. Для их просмотра достаточно нажать Alt+Enter. IDE также проводит полный Data Flow Analysis для выявления неиспользуемого и недоступного кода:



CLion не пропустит и вездесущие ошибки C/C++, например, “=” в условии:



Эта ассистенция работает в то время, как вы печатаете, избавляя от необходимости запускать на проекте дополнительный инструмент для анализа кода.

8. Простая отладка с возможностью смотреть значения переменных прямо в редакторе!

Ключевое преимущество IDE над простым текстовым редактором — опыт дебаггинга. Конечно можно запустить отдельный процесс дебаггинга, но отладка внутри IDE экономит много времени и предоставляет дополнительный полезный функционал.

CLion интегрирует GDB бэкенд, предоставляя все необходимое в интерфейсе и
улучшая опыт отладки некоторыми крайне полезными инструментами. К примеру, каждый раз, когда вы вводите имя переменной для просмотра или выражение для оценки, можно воспользоваться преимуществами автодополнения кода. В отдельном окне инструмента показаны все детали текущего состояния программы. А вот и вишенка на торте: во время отладки IDE показывает значения переменных рядом с их объявлением:



9. Передумали во время отладки? Не перезапускайте — сразу меняйте значения переменных!

Значение отладки заключается в понимании данных и контроле их перемещения в программе. Иногда нужно проверить несколько значений переменной, например, проследить отдельную ветвь выполнения. Не нужно тратить драгоценное время на перезапуск — сразу поменяйте значения в текущей сессии отладки:



Теперь мы можем продолжить ту же самую сессию, но с новым присвоенным значением y, равным 55. Как было замечено ранее, IDE показывает значения переменной рядом с их объявлением в редакторе, подчеркивая примененные изменения:



10. Все необходимые инструменты на борту — Не нужно переключаться!
IDE расшифровывается как Integrated Development Environment (Интегрированная Среда Разработки), ее использование означает, что в работе вам больше не потребуется переключаться между несколькими инструментами, например, отдельным vcs приложением, баг-трекером в браузере или даже терминалом. Весь этот инструментарий уже встроен в CLion IDE, чтобы вы могли сфокусироваться на коде с минимумом отвлечений.

Опробуйте эти советы в CLion и убедитесь, что они помогут вам стать эффективней и продуктивней!

THE END

Как всегда ждём вопросы, комментарии тут или заходите на день открытых дверей.

Комментарии (14)


  1. berezuev
    30.05.2018 00:11

    sed -i 's/CLion/PHPStorm/g'
    И получаем ещё одну статью про IDE от Jetbrains. В общем-то, как-то так большинство из них и пишутся)


  1. anastasiak2512
    30.05.2018 00:51

    Спасибо за перевод.
    Правда оригинальную статья я написала еще 3 года назад, и надо сказать, что за 3 года в молодом продукте (коим является CLion) очень много всего поменялось. Суть, конечно, остается неизменной, но фактических неточностей в итоге много. Начиная от поддерживаемых стандартов, заканчивая интегрированными инструментами. Да и именно интересных для C++ возможностей появилось больше за эти годы. Мы про нововведения регулярно пишем в нашем русскоязычном блоге компании здесь на Хабре. Заходите почитать.


    1. MaxRokatansky Автор
      30.05.2018 13:50

      Это вам спасибо за текст и мааааленький выговор, что на русском такого не было :)

      И не смотря на возраст статьи она, по сути, до сих пор актуальна и полезна, как короткое знакомство с CLion


      1. anastasiak2512
        30.05.2018 14:46

        Это правда, суть и правда верна до сих пор)


  1. Kepp
    30.05.2018 06:49
    -1

    Не очень понимаю такую кроссплатформенность.
    Поддержки нативной разработки под Windows так и нет, даже на уровне простой компиляции.
    Это не говоря уже про дебаггер.


    1. anastasiak2512
      30.05.2018 12:32

      Почему же нет компиляции — MSVC поддержан. И WSL еще есть на винде, кому интересно.
      А отладчик — тут да, но Майкрософтовский проприетарный, так что нам приходится писать самим отладчик для этого случая. Мы пишем, но медленно)

      Но кстати именно кросс-платформенный проекты зачастую на Windows (по опросам пользователей) не MSVC как раз используют, а GCC/Clang, чтобы сильно платформы не отличались.


  1. SidMeier
    30.05.2018 08:52

    Глупый вопрос — если у меня проект не CMake-based, сможет ли CLion его открыть и спокойно работать со всеми фичами рефакторинга и прочего?


    1. anastasiak2512
      30.05.2018 12:34

      Сейчас в 2018.2 EAP добавили поддержку Gradle for C++. И вот-вот на днях покажем поддержку compilation database json. Остальные проектные модели пока в планах.


      1. SidMeier
        30.05.2018 12:45

        Скачал пробную версию. Всё плохо. Не в том смысле, что у Вас, а в том что сходу не получается. Без CMakeLists не работает ни один рефакторинг и автоподстановка, я правильно понял?
        Пока придётся по прежнему использовать VSCode/Sublime…


        1. anastasiak2512
          30.05.2018 12:50

          Если хотите попробовать Gradle — нужен CLion 2018.2 EAP. А compilation database json еще не в публичном билде. Других вариантов (если не CMake) пока нет.


        1. anastasiak2512
          31.05.2018 12:26

          Вчера анонсировали compilation database в EAP билде blog.jetbrains.com/clion/2018/05/clion-2018-2-eap-open-project-from-compilation-database


          1. SidMeier
            31.05.2018 20:50

            Я поговорю с разработчиками нашей билдсистемы насчёт возможности генерации необходимых файлов. А пока попробую CLion на чём нибудь попроще. Спасибо, что держите в курсе.


  1. technic93
    30.05.2018 12:56

    У вас класс Animal наследуется от Mammal. Мне это сразу резануло глаз, ведь млекопитающее это частный случай животного а не наоборот.


    1. anastasiak2512
      30.05.2018 13:01

      Есть такое. Это древний игрушечный пример) Там много всего странного с точки зрения биологии.