Хватит вводить исходный код вручную

Введение в ускоренное создание исходного кода без лишнего ввода с клавиатуры с помощью NetBeans 4.0.

Предисловие

Знаете ли вы, что клавиши на стандартной клавиатуре нарочно расположены так, чтобы снизить скорость печати? Это действительно так. Стандартная раскладка, называемая также раскладкой QWERTY, первоначально была создана, чтобы не позволять машинистам достигнуть скорости печати, при которой сталкивались бы литерные рычаги.

Это лишь одна из множества причин не вводить исходный код вручную или, выражаясь точнее, одна из причин позволить среде IDE NetBeans формировать исходный код автоматически. В этой статье приведен ряд советов по более быстрому написанию исходного кода с помощью среды IDE NetBeans 4.0 при минимальном вводе с клавиатуры.

Советы

Совет 1: используйте сопоставление слов

После ввода слова в исходном файле его можно повторно ввести в любом месте текста: просто вводите первые несколько букв и нажмите CTRL+K. Эта функция называется сопоставлением слов и принцип ее действия заключается в поиске слов, начинающихся с введенных букв. По сочетанию клавиш CTRL+K выполняется поиск выше по файлу, а по CTRL+L — ниже по файлу.

После написания следующего цикла for:

for(Person person : personSet) {

}

который совершает итерацию по множеству person, можно разместить курсор между фигурными скобками и ввести "pe", а затем нажать CTRL+K. Будет немедленно предложено слово "personSet" как ближайшее слово, начинающееся с "pe", а при повторном нажатии CTRL+K будет предложено слово "person", т.е. следующее слово.

В этом особом случае фактически даже не нужно вводить "pe" — достаточно просто нажать CTRL+K внутри цикла, чтобы автоматически вставить идентификаторы "personSet" и "person": это возможно, поскольку эти два идентификатора являются первыми двумя словами по направлению к началу исходного файла. Однако, если бы между началом цикла и курсором было десять слов, при нажатии CTRL+K пришлось бы прокрутить эти десять слов, прежде чем очередь дошла бы до "personSet" и "person". В этом случае ввод "pe" перед нажатием CTRL+K позволяет пропустить все слова, не начинающиеся с "pe".

Если случайно выбрано слово дальше требуемого из-за лишних нажатий CTRL+K, просто нажмите CTRL+L несколько раз до возврата к пропущенному слову. Наконец обратите внимание, что эта функциональная возможность работает с любыми типами файлов; она весьма удобна при работе с файлами XML, где с ее помощью можно вводить имена тегов, уже присутствующих в файле.

Совет 2: создание макроса идентификаторов

Длинные идентификаторы повышают читаемость кода. Бывает непросто вспомнить, что идентификатор "i" означает экземпляр типа "Invoice", а не "Iterator" или "ItemListener", особенно в длинных методах; если бы не набор текста на клавиатуре, лучше было бы использовать идентификатор "invoice". Если бы в среде IDE NetBeans автоматически подставлялось слово "invoice", не было бы необходимости использовать "i". В этом разделе рассматривается макрос, который позволяет этого добиться.

Представим, что курсор размещен непосредственно после "Invoice" (позиция обозначена символом "|") в коде ниже:

public class Order {
	public void setInvoice(Invoice |) {

	}
}

При срабатывании макроса автоматически вводится текст "invoice" в соответствии с типом "Invoice", который уже присутствует в коде. Макрос просто вводит предыдущее слово и изменяет регистр первой буквы на строчный. Теперь, когда в первый раз слово "invoice" введено автоматически, можно использовать сопоставление слов (ALT+K), которое рассматривалось в первом совете, для повторного ввода идентификатора.

Для создания макроса необходимо выполнить следующие пять действий:

  1. Выберите пункт меню "Сервис > Параметры"
  2. Разверните узел "Правка", а затем "Параметры редактора"
  3. Выберите "Редактор Java"
  4. Найдите в правой половине окна свойство "Макросы" и нажмите кнопку "..." справа.
  5. Добавьте макрос с именем "Ввод имени идентификатора по предыдущему слову", состоящий из следующего кода макроса (просто скопируйте код отсюда):
    selection-previous-word copy-to-clipboard
    caret-next-word " " paste-from-clipboard caret-previous-word
    selection-forward to-lower-case caret-next-word
    

Наконец нажмите кнопку "ОК" в окне "Макросы" для закрытия, однако оставьте открытым окно "Параметры" — оно понадобится для создания сочетания клавиш для вызова нового макроса:

  1. Откройте окно "Сочетания клавиш" нажатием на кнопку "..." свойства "Сочетания клавиш".
  2. Щелкните "Сортировать по имени" и выберите новый макрос, который присутствует в списке под именем "macro-Ввод имени идентификатора по предыдущему слову".
  3. Добавьте сочетание клавиш "ALT+N" кнопкой "Добавить".

При создании макросов обычно используется функциональная возможность записи макросов, позволяющая записывать манипуляции мышью и клавиатурой, сохраняя их в качестве макроса. Однако макрос, показанный здесь, содержит действие "to-lower-case", которое пока что невозможно выполнить путем манипуляции мышью или клавиатурой, поэтому это действие добавляется вручную.

Совет 3: создание макроса присвоения

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

public Person(String name, String emailAddress) {
	this.name = name;
	this.emailAddress = emailAddress;
}

Если определить следующий макрос и присвоить его сочетанию клавиш ALT+=, то вместо ввода "this.emailAddress = emailAddress;" достаточно ввести "this.e" и нажать CTRL+K для получения "this.emailAddress", а затем ALT+= для ввода остального текста.

Указания по созданию макроса приведены в разделе "Совет 2". Ниже приведен код макроса:

selection-previous-word copy-to-clipboard caret-next-word " = " paste-from-clipboard ";"

После периода первоначального привыкания к макросу ALT+= его использование позволяет вводить текст быстрее, чем какие-либо другие способы.

Совет 4: используйте сокращения

В среду IDE NetBeans встроен широкий спектр сокращений для ввода широко известных слов или даже многострочных конструкций кода. Попробуйте ввести "sout" и нажать клавишу ПРОБЕЛ: при этом автоматически вставляется полное выражение стандартного вывода, т.е.

System.out.println("|");

В среде IDE NetBeans не выводится показанный здесь символ "|"; после замены сокращения в эту позицию помещается курсор.

Встроенные сокращения позволяют экономить время, однако еще более удобна функция определения собственных сокращений.

Для начала можно просмотреть существующие исходные файлы и определить часто используемые конструкции. Типичный пример часто используемой конструкции — конструкция if/throw в этом методе:

public void remove(int lower, int upper) {
	if(lower < 0)
		throw new IllegalArgumentException(
			"Параметр \"lower\" должен быть " +
			"неотрицательным числом."
		);
}

Этот метод начинается с предохранительного выражения, подтверждающего, что первый параметр является допустимым аргументом; в противном случае вызывается исключение IllegalArgumentException.

Поскольку использование подобного предохранительного выражения — разумная и обычная практика, удобно добавить сокращение, которое будет автоматически разворачиваться в конструкцию if/throw. Для этого необходимо выполнить следующие действия:

  1. Выберите пункт меню "Сервис > Параметры"
  2. Разверните узлы "Правка", "Параметры настройки редактора" и "Редактор Java".
  3. Нажмите кнопку "..." в ряду, содержащем свойство "Сокращения".
  4. Добавьте сокращение "ill", которое разворачивается в
    if(|)
    	throw new IllegalArgumentException("");
    

Обратите внимание, что в среде IDE NetBeans символ "|" распознается как местоположение курсора после развертывания.

Попробуйте ввести "ill" и нажать ПРОБЕЛ: voila!

Безусловно, можно создать макрос, который вводил бы то же самое, однако важное преимущество сокращений заключается в простоте запоминания: им можно давать мнемонические имена вроде "ill" или даже "illarg" вместо трудных для запоминания сочетаний клавиш вроде "CTRL+ALT+I". Недостаток сокращений заключается в невозможности (по крайней мере, на момент написания статьи) вызова макросов из них.

Совет 5: пользуйтесь шаблонами исходного кода

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

Например, во многих системах предусмотрены правила определения класса исключения или правила, утверждающие, что все классы, расширяющие класс X, должны содержать определенные методы, переменные, документацию и т.д.

При написании нового класса разработчики часто начинают с пустого шаблона "Класс Java" и пишут все вручную; часто при этом приходится вводить код, уже написанный ранее. Вместо этого следует найти класс, который можно использовать как отправную точку, щелкнуть его узел дерева правой кнопкой мыши и выбрать "Сохранить как шаблон...". Теперь при создании похожего класса достаточно щелкнуть правой кнопкой пакет, в который нужно поместить создаваемый класс, выбрать пункт меню "Новый > Файл/каталог..." и выбрать шаблон.

Определение шаблона на основе существующего исходного файла может привести к добавлению лишнего содержимого, однако после определения шаблона можно убрать ненужный код: выберите пункт меню "Средства > Параметры" и перейдите к шаблону в разделе "Создание исходного кода и управление им". Можно просто щелкнуть правой кнопкой мыши соответствующий узел дерева и выбрать пункт меню "Правка", изменить файл и сохранить его.

Если разработчик предоставляет коллегам интерфейс API, в котором они часто реализуют один и тот же интерфейс, можно помочь им, предоставив вместе с интерфейсом API шаблон исходного кода. Распространение шаблона сводится просто к копированию с одного компьютера на другой. Шаблоны хранятся в папке

"... [домашний каталог пользователя]\.netbeans\4.0\config\Templates\[каталог шаблона]"

Если используется управление версиями, рекомендуется создать набор шаблонов проекта и распространять их через систему управления версиями.

Совет 6: эффективная правка методов получения и установки

При написании компонентов Java масса времени затрачивается впустую на написание и обслуживание тривиальных методов получения и установки. К счастью в среде IDE NetBeans предусмотрена автоматическая генерация этих методов, и в среду IDE даже встроен механизм эффективного управления ими. Начиная с выпуска среды IDE NetBeans 4.0 механизм реорганизации кода поддерживает генерацию стандартных методов получения и установки из переменных класса. Ниже показано создание методов getName и setName:

public class Customer {
  private String name;

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }
}
		

Для создания этих методов достаточно объявить свойство name, щелкнуть его правой кнопкой мыши и выбрать пункт всплывающего меню "Реорганизация кода... > Инкапсулировать поля...".

После генерации методов может потребоваться изменить имя свойства "name". Это может оказаться весьма трудоемкой операцией, поскольку слово "name" или "Name" уже упоминается по всему исходному файлу. К счастью в среде IDE NetBeans предусмотрена весьма удобная функциональная возможность "Шаблоны компонентов", позволяющая решить эту проблему. Найдите класс в дереве проекта и разверните соответствующий узел дерева. В среде IDE NetBeans отображается узел с именем "Шаблоны компонентов", содержащий подузел для каждого свойства компонента класса. Этот узел можно переименовать: нажмите клавишу F2 или щелкните узел правой кнопкой мыши и выберите "Переименовать...". При подобном переименовании все необходимые изменения выполняются автоматически.

Функциональная возможность "Шаблоны компонентов" также позволяет эффективно изменять типы свойств. Щелкните правой кнопкой мыши узел дерева компонента и выберите пункт меню "Свойства": откроется окно, содержащее сведения о свойстве. Здесь можно изменить тип, после чего NetBeans изменит исходный код соответствующим образом.

Совет 7: пользуйтесь средством "Исправить выражения импорта"

Буду краток: никогда не пишите выражений импорта. В среде IDE NetBeans 4.0 появилась блестящая функциональная возможность "Исправить выражения импорта", вызываемая сочетанием клавиш ALT+SHIFT+F. Эта функциональная возможность позволяет анализировать исходный код и обнаруживать имена классов, которые еще не импортированы. Если класс X еще не импортирован, и во всем проекте присутствует лишь один класс с именем X, этот класс автоматически импортируется. Если в двух разных пакетах существует два класса X, выводится диалоговое окно с запросом на выбор одного из классов. Функциональная возможность "Исправить выражения импорта" исключительно надежна и удобна, и она также автоматически удаляет выражения импорта, которые больше не используются.

Заключение

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

Чем выше степень индивидуальной настройки среды IDE в соответствии с потребностями конкретного проекта, тем быстрее можно реализовать систему. С точки зрения скорости и удовольствия от использования среда IDE NetBeans 4.0 подобна идеальному гоночному автомобилю. Однако как и для гоночного автомобиля, без тюнинга не обойтись. Для индивидуальной настройки среды IDE можно настроить сокращения, макросы и шаблоны в соответствии с потребностями проекта. Велика мощь среды IDE NetBeans 4.0!

Об авторе

основатель датской компании по разработке программного обеспечения ROCK IT и главный разработчик инновационной полностью написанной на Java компонентно-ориентированной системы управления содержимым Puls, полностью разработанной с помощью NetBeans (планируется к выпуску в 2005 г.).