15 August 2017

Красочный код: как цвет помогает в работе с кодом

SemanticsDevelopment for iOSDevelopment for AndroidDevelopment for Windows
Как программист, работающий с разными языками и на разных платформах, я столкнулась в определенный момент времени с одной неожиданной проблемой: для проведения ревью или же написания собственного кода, приходилось тратить достаточно много времени на переключение между IDE и языками. Возникла потребность в каком нибудь инструменте, который помог бы мне делать это эффективнее и без потери концентрации. И внезапно мне на помощь пришел цвет. И я хочу поделиться этим маленьким лайфхаком.

Во всех IDE есть такая замечательная функция, как подсветка синтаксиса. Все бы хорошо, но везде она разная и даже внутри одной среды разработки может отличаться для разных языков. Но главное то, что подсветка не помогает достаточно часто (лично мне) различать структурные компоненты, такие как методы, переменные, классы, структуры… Они, как правило, отрисовываются одним цветом и я решила подобрать свою цветовую схему, которая бы выполняла функцию дифференциации не только синтаксических элементов (как то ключевые слова), но и семантических (классы, структуры, методы и функции).

Пример цветовой схемы Darkula в Android Studio
Подсвечены в принципе только ключевые слова и константы


Начало концепции положила цветовая схема Ciapre для Xcode. Она изначально (да и стоит признать, сама IDE) предоставляет такое семантическое деление именно цветом. Flat цвета не режут глаза и достаточно сильно отличаются для разных типов семантических элементов.
В результате получилось примерно следующее разделение:

  • Ключевые слова — красный
  • Reference Types (классы) — желтый
  • Интерфейсы — оранжевый
  • Value Types — фиолетовый
  • Константные значения — тоже фиолетовый, но поярче
  • Методы и функции — синий (внешние, из пакетов/модулей — чуть ярче)
  • Поля и свойства типов — зеленый

После переноса в разные IDE получилось примерно следующее (да-да, я знаю первую реакцию — «что за кислятина» :-) ):

  • Swift (Xcode)
    В Xcode проблемы с интерфейсами (в плане разделения от классов), они считаются за reference type и тоже отображаются желтым.

  • Kotlin (Android Studio) (можно сравнить с примером выше — darkula)
    В котлине существуют разного рода квалифаеры и метки, для них тоже есть отдельный цвет

  • Java (Android Studio)

  • C# (Visual Studio)
    В шарпе есть неймспейсы, для них — отдельный цвет. Ну а еще студия огорчает тем, что нет четкого семантического разделения в настройках (поле класса, метод и т.п.). В этом мне помогает ReSharper.


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

Собственно и все :)

Для желающих прикладываю цветовые схемы

Хорошего и красивого кода всем!
Tags:кодпрограммированиеswiftkotlinjavac#
Hubs: Semantics Development for iOS Development for Android Development for Windows
+15
19.3k 50
Comments 39