Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
@roman = value.to_s @decimal = Roman.decode(@roman) when Numeric @decimal = value @roman = Roman.encode(@decimal) end end def to_i @decimal end def to_s @roman end def succ Roman.new(@decima1 +1) end def <=>(other) self.to_i <=> other.to_i endenddef Roman(val) Roman.new(val)endСначала несколько слов о самом классе. Его конструктору можно передать строку, символ (представляющий число, записанное римскими цифрами) или
FixnumRomanRoman.newencodedecodeДля простоты я опустил контроль данных. Кроме того, предполагается, что римские цифры представлены прописными буквами.
Метод
to_ito_ssuccRoman(:IV).succRoman(:V)Оператор сравнения сравнивает десятичные эквиваленты. Мы включили с помощью директивы
includeComparable<=>Обратите внимание на использование символов в следующем фрагменте:
op = that > this ? :- : :+sum = sum.send(op,this)Здесь мы решаем, какую будем выполнять операцию (она обозначается символом): сложение или вычитание. Это не более чем краткий способ выразить следующую идею:
if that > this sum -= thiselse sum += thisendВторой вариант длиннее, зато более понятен.
Поскольку в этом классе есть метод
succrequire 'roman'y1 = Roman(:MCMLXVI)y2 = Roman(:MMIX)range = y1..y2 # 1966..2009range.each {|x| puts x} # Выводятся 44 строки.epoch = Roman(:MCMLXX)range.include?(epoch) # truedoomsday = Roman(2038)range.include?(doomsday) # falseRoman(:V) == Roman(:IV).succ # trueRoman(:MCM) < Roman(:MM) # true6.3. Заключение
В этой главе мы познакомились с тем, что такое символы в Ruby и как они применяются. Мы продемонстрировали как стандартные, так и определенные пользователем способы употребления символов.
Также мы подробно остановились на диапазонах: поговорили о том, как преобразовать диапазон в массив, как применить его в качестве индекса для массива или строки, как обойти диапазон и т.д. Рассмотрели оператор переключения (и альтернативу старому синтаксису). Наконец, создали класс, который корректно работает в сочетании с операторами диапазона.
На этом обсуждение символов и диапазонов заканчивается. Но, поскольку они используются в Ruby очень часто (и, несомненно, полезны), то мы еще не раз встретимся в ними в примерах кода.
Глава 7. Дата и время
Знает ли кто-нибудь, что такое время на самом деле?
Один из самых сложных и противоречивых аспектов человеческой жизни — измерение времени. Чтобы приблизиться к истинному пониманию предмета, необходимо хорошо знать физику, астрономию, историю, юриспруденцию, бизнес и религию. Астрономам известно (в отличие от большинства из нас!), что солнечное и звездное время — не совсем одно и то же. Ведомо им и то, почему иногда к году добавляется «високосная секунда». Историки знают, что в октябре 1582 года, когда Италия переходила с григорианского календаря на юлианский, из календаря было изъято несколько дней. Немногим известна разница между астрономической и церковной Пасхой (почти всегда они совпадают). Многие не в курсе, что год, который не делится на 400 (например, 1900), високосным не является.
Вычисления, в которых участвуют дата и время, выполняются компьютерами уже давно, но в большинстве языков программирования это весьма утомительное занятие. Это относится и к Ruby в силу самой природы данных. Но в Ruby было последовательно предпринято несколько шагов с целью упрощения этих операций.
Для удобства читателя мы определим некоторые термины, которые, возможно, не всем известны. Они пришли как из естественного языка, так и из других языков программирования.
Среднее время по Гринвичу (Greenwich Mean Time, GMT) — устаревший термин, который теперь официально не употребляется. Новый глобальный стандарт называется «всеобщее скоординированное время» (Coordinated Universal Time, или UTC от французской аббревиатуры). GMT и UTC — по существу, одно и то же. По прошествии ряда лет разница между ними составит несколько секунд. В большинстве промышленных программ (в том числе в Ruby) эти системы измерения времени не различаются.
На летнее время переходят раз в полгода, сдвигая официальное время на один час. Поэтому обозначения часовых поясов в США обычно заканчиваются на ST (Standard Time — стандартное время) или DT (Daylight Time — летнее время). Это происходит в большинстве штатов США (если не во всех), да и во многих других странах.
