Groovy для педагога
Продолжая знакомство с языком программирования Groovy, я всё больше убеждаюсь, что он в разы сокращает путь от идеи до реализации. На днях мне понадобилось задним числом заполнить огромный документ с расписанием занятий по дням недели: в такой-то день 2 урока, в такой-то — 4. Вроде и вручную можно, но практика показывает, что отвлекаешься, забываешь на чем остановился, постоянно заглядываешь в календарик. А что если написать программу, которая выдавала бы список дней/часов в том порядке, в котором они будут записаны в школьном журнале?
На Java я бы такое писать не стал: программа, конечно, простая, но это ж нужно прописывать импорты, компилировать, упаковывать. А вот на Groovy такую программулю наколбасить можно за 15 минут и запускаться скрипт будет без всякой компиляции, стоит лишь присвоить файлу атрибут исполняемости.
Обратите внимание, как лаконично здесь всё сформулировано. Например, даты обрабатываются в обычном цикле.
Для реализации такого классическими средствами пришлось бы городить изрядный огород.
Вместо java-вского
можно использовать
т.е. выполнить 4 раза.
Ну всё для блага человека!
Интересно отметить, что эту задачу уже решал Кен Коусен преподаватель из США. Тоже на Groovy и тоже для решения собственных проблем, а не в обучающих целях.
На Java я бы такое писать не стал: программа, конечно, простая, но это ж нужно прописывать импорты, компилировать, упаковывать. А вот на Groovy такую программулю наколбасить можно за 15 минут и запускаться скрипт будет без всякой компиляции, стоит лишь присвоить файлу атрибут исполняемости.
#!/usr/bin/groovy
// Первая строка делает скрипт запускаемым через bash
q = 90 // Количество часов, которые нужно вычитать
sdf = new java.text.SimpleDateFormat("E dd.MM.yy") // Форматировать выводимые даты будем как "День_недели число.месяц.год"
cld = Calendar.getInstance() // Создаем календарь
cld.set(Calendar.DAY_OF_MONTH, 1) // Дата начала занятий -
cld.set(Calendar.MONTH, Calendar.SEPTEMBER) // 1 сентября
cld.set(Calendar.YEAR, 2009) // 2009 года
d1 = cld.getTime() // Извлекаем ее из календаря
cld.set(Calendar.DAY_OF_MONTH, 31) // Крайняя дата окончания занятий -
cld.set(Calendar.MONTH, Calendar.MAY) // 31 мая
cld.set(Calendar.YEAR, 2010) // 2010 года
d2 = cld.getTime() // Извлекаем ее из календаря
for(d in d1..d2){ // Для каждого дня в диапазоне
cld.setTime(d)
switch(cld.get(Calendar.DAY_OF_WEEK)){
case Calendar.MONDAY:
2.times {println sdf.format(cld.getTime()); q--} // Если это понедельник - вывести 2 строки на экран
break
case Calendar.TUESDAY:
4.times {println sdf.format(cld.getTime()); q--} // Если это вторник - вывести 4 строки на экран
break
}
if(q < 1)break; // Каждый раз выводя даты на экран мы уменьшали счетчик
// Если количество занятий исчерпано - завершить цикл (и программу)
}
Обратите внимание, как лаконично здесь всё сформулировано. Например, даты обрабатываются в обычном цикле.
for(d in d1..d2)
Для реализации такого классическими средствами пришлось бы городить изрядный огород.
Вместо java-вского
for(int i = 1; i < 4; i++){...}
можно использовать
4.times {...}
т.е. выполнить 4 раза.
Ну всё для блага человека!
Интересно отметить, что эту задачу уже решал Кен Коусен преподаватель из США. Тоже на Groovy и тоже для решения собственных проблем, а не в обучающих целях.
Комментарии (4)
RSS свернуть / развернутьMarkony
ksandras
yababay
Простой это basic и паскаль.
Действительно, Perl, Python, Groovy, Ruby — далеко не простые языки, но очень сильно упрощают разработку. Вникать в их синтактические конструкции тяжелее, зато потом быстро едешь =)
durman
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.