Опубликован: 27.07.2006 | Доступ: свободный | Студентов: 3216 / 548 | Оценка: 4.28 / 4.13 | Длительность: 26:56:00
Специальности: Программист
Лекция 11:

Введение в ООП

< Лекция 10 || Лекция 11: 123456789
Время и дата

Экземпляр класса Time в языке Ruby содержит информацию о дате, времени и временной зоне. Для создания объекта этого класса, содержащего текущие дату и время, используется метод now. Такие объекты могут являться аргументами операций + и -:

puts Time.now
puts Time.now+60   # добавили 60 секунд к текущему времени
puts Time.now-60   # отняли 60 секунд от текущего времени

Отметим некоторые методы этого класса, для вызова которых используется точечная нотация.

Метод Назначение метода
sec Получить число секунд
min Получить число минут
hour Получить число часов
mday и day Получить день месяца
mon и month Получить номер месяца
year Получить год
wday Получить номер дня недели
yday Получить номер дня в году
zone Получить информацию о временной зоне
to_i Получить число секунд, прошедших с 1 января 1970 года

В языке Ruby имеется метод sleep, который заставляет программу "заснуть" на число секунд, указанное в качестве аргумента метода. Посмотрите на пример использования методов для работы с объектами класса Time.

puts "До Нового года осталось #{365-Time.now.yday} дней"
puts Time.now
puts "Подождем 10 секунд."
sleep(10)
puts Time.now
#!/usr/bin/env ruby
puts Time.now
puts Time.now+60   # добавили 60 секунд к текущему времени
puts Time.now-60   # отняли 60 секунд от текущего времени

puts "До Нового года осталось #{365-Time.now.yday} дней"
puts Time.now
puts "Подождем 10 секунд."
sleep(10)
puts Time.now
Пример 1.4.
Вывод данных

Мы уже видели, как осуществляется вывод информации в Ruby. Познакомимся с другими операторами, обеспечивающими печать данных. Создайте файл print.rb, включите в него следующий текст и посмотрите на результат выполнения полученной программы.

puts "puts всегда завершается переходом к новой строке."
print "А оператор print не делает этого по умолчанию, "
print "как вы видите в этом примере.\n"
print "print может быть вызван сразу  ", 
   "с несколькими аргументами.\n"

Оператор p подобен оператору puts и отображает объекты в виде, понятном человеку. Не следует использовать его для вывода русских букв - он печатает их ASCII-коды.

p Time.now, Time.now+3600

Значительно большими возможностями обладает оператор printf, обеспечивающий форматный вывод. Сразу после имени оператора указывается строка формата, содержащая как обычные символы, выводимые на печать, так и спецификации преобразования, которые вызывают преобразование и печать остальных аргументов в том порядке, в каком они перечислены. Каждая спецификация преобразования начинается с символа % и заканчивается символом-спецификатором преобразования. Между % и символом-спецификатором в порядке, указанным ниже, могут располагаться следующие модификаторы:

  • флаги (в любом порядке):

    - указывает на то, что преобразованный аргумент должен быть прижат к левому краю поля;

    + предписывает всегда печатать число со знаком;

    0 - указывает, что числа должны дополняться ведущими нулями до всей ширины поля;

    пробел - указывает, что числа должны дополняться ведущими нулями до всей ширины поля;

  • число, задающее минимальную ширину поля;
  • точка, отделяющая указатель ширины поля от указателя точности;
  • число, задающее точность.

Основные литеры-спецификаторы и разъяснение их смысла приводятся в следующей таблице.

Литера Аргумент Вид печати
d Fixnum, Bignum печать целого числа
s String печать строки
f Float печать дробного числа

Включите в файл следующие операторы форматной печати и посмотрите на результаты выполнения:

printf "%8s~~%-8s\n", "abcd", "abcd"
printf "%-8s::%8s\n", "abcd", "abcd"
printf "%06d\n", 2**10; printf "%+6d\n", 2**10
printf "%6d\n", 2**10;  printf "%+6d\n", 2.5*1.3
printf "%4.3f\n", 2.5*1.3
printf "-2/7=%+1.6f, -2/6=%2.15f\n",
      -2/7.to_f, -2/6.to_f

Обратите внимание, что строка формата заключается в двойные кавычки и может содержать специальные последовательности символов. Одной из них является \n. Эта последовательность дает указание интерпретатору Ruby продолжить вывод информации со следующей строки (newline). Другой часто используемой последовательностью является \t (табуляция), которая передвигает фокус вывода к следующей позиции табуляции.

puts "*\t*\t*\t*\t*"
puts " 1234567 1234567 1234567 1234567 "
#!/usr/bin/env ruby
puts "puts всегда завершается переходом к новой строке."
print "А оператор print не делает этого по умолчанию, "
print "как вы видите в этом примере.\n"
print "print может быть вызван сразу  ", 
   "с несколькими аргументами.\n"

p Time.now, Time.now+3600

printf "%8s~~%-8s\n", "abcd", "abcd"
printf "%-8s::%8s\n", "abcd", "abcd"
printf "%06d\n", 2**10; printf "%+6d\n", 2**10
printf "%6d\n", 2**10;  printf "%+6d\n", 2.5*1.3
printf "%4.3f\n", 2.5*1.3
printf "-2/7=%+1.6f, -2/6=%2.15f\n",
      -2/7.to_f, -2/6.to_f

puts "*\t*\t*\t*\t*"
puts " 1234567 1234567 1234567 1234567 "
Пример 1.5.
< Лекция 10 || Лекция 11: 123456789
Светлана Овчаркина
Светлана Овчаркина
Елена Митющенко
Елена Митющенко
И какова взаимосвязь между информацией и данными?