Groovy для педагога

Продолжая знакомство с языком программирования Groovy, я всё больше убеждаюсь, что он в разы сокращает путь от идеи до реализации. На днях мне понадобилось задним числом заполнить огромный документ с расписанием занятий по дням недели: в такой-то день 2 урока, в такой-то — 4. Вроде и вручную можно, но практика показывает, что отвлекаешься, забываешь на чем остановился, постоянно заглядываешь в календарик. А что если написать программу, которая выдавала бы список дней/часов в том порядке, в котором они будут записаны в школьном журнале?

На 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 и тоже для решения собственных проблем, а не в обучающих целях.
  • +6
  • 04 июня 2010, 18:05
  • yababay

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

RSS свернуть / развернуть
+
0
Синтаксис все ближе к Visual Basic ( пардон!)
avatar

Markony

  • 04 июня 2010, 20:44
+
0
Все гениальное простоЯ верю что все игры будущего будут написаны на даркбейсике XD
avatar

ksandras

  • 04 июня 2010, 20:52
+
+1
Groovy, в отличие от VisualBasic, не простой язык, а упрощающий язык. Им пользоваться без хороших знаний по Java трудновато Нужно представлять себе что кроется за его синтаксическими конструкциями. По сути это свернутый java-код, избавленный от рутинных «фраз».
avatar

yababay

  • 04 июня 2010, 21:52
+
+1
Ты прямо в точку попал =)
Простой это basic и паскаль.
Действительно, Perl, Python, Groovy, Ruby — далеко не простые языки, но очень сильно упрощают разработку. Вникать в их синтактические конструкции тяжелее, зато потом быстро едешь =)
avatar

durman

  • 05 июня 2010, 01:25

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.