четверг, августа 14, 2008

Do What I Mean

Do What I Mean (DWIM) — делай, то что я думаю. Да, звучит громко, но всегда хочется, чтобы программирование, как можно больше, сводилось именно к такому принципу и подходу. Частично, внутренние средства Eclipse в этом нам сильно помогают (для критиков оговорюсь — в общем-то любая IDE если не делает этого, то просто обязана делать), например возможность быстро переименовать какое-то значение в тексте или сделать более глобальный рефакторинг по всему проекту, или даже workspace. А есть еще такие штуки, как шаблоны (Templates). Вот сейчас, я хотел бы немного поделиться своими примерами шаблонов, для облегчения рутинного постукивания по клавиатуре.

Шаблоны вещь всем известная, по умолчанию в Eclipse их имеется целая куча, для того, чтобы ими воспользоваться достаточно начать (первые 2-3 символа) писать имя (alias) шаблона и нажать Ctrl+Space. Вот например, несколько стандартных шаблонов:

в результате чего получается следующее — остается только дать названия типам и переменным, а большая часть «букв» подставленная из шаблона:


Это всё хорошо и понятно, шаблоны, как известно, задаются и правятся в окне настроек Window->Preferences->Java->Editor->Templates:


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

Объявление логгера для текущего файла:
Например, в приложении часто, т.е. в практически каждом классе приходится писать объявление логгера, такого как log4j или ему подобных. Я предпочитаю вынести код его объяевления в шаблон, примерно такой:

// log (имя шаблона):
/** logger for this class*/
static final transient private Logger ${log}
= Logger.getLogger( ${enclosing_type}.class );

Вот так это выглядит в редакторе:


Теперь можно использовать, log, Ctrl+Space:


Enter - готово:



, остаётся только сделать import (используем hotkey Ctrl+1 в месте ошибки). Для полноты картины я бы завёл ещё несколько маленьких, но очень полезных шаблонов для логгера, вот например:

// lerr:
log.error( ${e} );

// linfo:
log.info( "${text}" );

// lwarn:
log.warn( "${text}" );

В общем изголятся можно по всякому. По поводу скорости печати можно и поспорить, тут, ведь и без того, чтобы подставить строку log.error( ... ), вполне достаточно написать log.e - итого четыре буквы против двух (le, li, lw ...), так что - это для гурманов, хотя некоторые эту переменную могут обозвать logger, а это уже куда длиннее! ;)

Объявление констант:

// strconst:
public static final String ${const_name} = "${const_name}";

// intconst:
public static final Integer ${const_name} = ${cursor};

// etc...

Можно в шаблон подставить еще и комментариев, например пустой блок для дальнейшего использования - /** */. В результате получаем довольно удобное средство для написания большого количества статических констант:



В общем советую это дело изучить - и всячески использовать, насоченять шаблонов облегчающих себе жизнь можно много, средств для этого в eclipse предостаточно.

Вот например есть еще одна штука, тоже шаблоны. но их использование отличается от описанного выше - Code Templates (Preferences->Java->Code Style->Code Templates). Этими шаблонами пользуется сама IDE, для того чтобы генерить такие методы как геттеры (getter) и сеттеры (setter) и прочую фигню - вещь крайне не заменимая, но добавлять своих шаблонов сюда нельзя, можно только поламать существующие.

Как пример, скажу, что удобно использовать шаблон для подстановки блока комментариев для javadoc, например для класса:

/**
*
*
* @version 1.0
*
* @author <a HREF="mailto:${user}@somemailbox.ru">Sergej K.</a>
* @date ${date}
*/


В итоге пишешь над классом /** + Enter и получаешь:



В общем, как-то так. Остаётся, только написать программу, которая сама за тебя будет программировать! ;) Так, что всем удачи, на этом поприще.

1 комментарий:

  1. import можно делать автоматически
    .... private {:newType(org.apache.log4j.Logger)} ....

    ОтветитьУдалить