Урок Ruby №7: «Я б в бухгалтеры пошел. Начинаем работать с числами»
Америки я не открою, сказав, что компьютер создавался для работы с числами. Это сейчас, когда микропроцессоры и программы-калькуляторы имеются едва ли не в микроволновке, проблема высчитать возведения в третью степень квадриллиона какого-либо числа не составит труда. А раньше это было под силу только огромным компьютерам.
Процессор оперирует числами и поэтому они составляют фундамент всей информатики. Поэтому все языки должны уметь работать с таким простым типом данных, как число.
Любой язык программирования должен позволять написать программу, которая может проводить сложные вычисления. Конечно, здесь возникает ряд своеобразных приключений в виде разрядности процессора или реализации компилятора. Исторически сложилось так, что языки программирования, разработанные математиками избавлены от многих проблем. Например, решать математические задачи на Паскале в разы удобнее, чем на Си.
Это можно сказать и о скриптовых языках. Например, Python будет прекрасным решением для расчетных задач. Помимо его встроенных возможностей, существуют еще и внешние модули, расширяющие сферу деятельности языка. А что же Ruby?
А Ruby унаследовал все черты своих предшественников. До того, как я изучил Ruby, мне приходилось пользоваться Python для решения математических задач. Однако после Ruby я понял, что все это не более, чем детская шалость.
Ruby умеет работать с целочисленными типами данных и с числами с плавающей точкой (так называемые, вещественные числа). Помимо всего прочего, в Ruby имеются еще специальные классы Bignum, BigDecimal и Rational.
Ну вот я вновь упомянул классы. Пусть вас не пугает данный термин. В данном контексте они представляют всего лишь тип данных, хотя и предоставляют нам некоторые «вкусняшки» в виде удобных методов. В любом случае, пока не зацикливайтесь на том, что не понятно.
В Ruby все является объектом. Эти касается и чисел. Даже самое простое число является объектом класса Fixnum. Иными словами, объявив переменную а и присвоив ей значение 27, мы создали экземпляр класса Fixnum, хотя и не подозреваем об этом. Однако для Ruby это очень важно. Почему, я писал в уроке 2 по C++, где вы можете ознакомиться с проблемой типизации данных.
Итак, экземпляры класса Fixnum – это целые числа, которые могут иметь еще и знак отрицания.
a=-23
А теперь обратите внимание на одну особенность языка Ruby – если число длинное, то можно его разделять знаками подчеркивания. Это очень удобно, особенно, при программировании сайтов на RoR.
b=1_000 # так можно описать тысячу.
Все эти числа описаны в десятичной системе счисления. Однако, как вы знаете, имеются еще и двоичные, восьмеричные и шестнадцатеричные системы счисления. Посмотрите, как на Ruby описываются эти типы данных:
dec=234 # десятичная система счисления bin=0b10111101 # двоичная система (основание 2) oct=0231 # переменная хранит восьмеричное число (основание 8) hex=0x23a1d # шестнадцатеричное число (основание 16)
Заметьте, что я писал значения в нижнем регистре, но прописные символы не будут ошибкой.
Но если бы в мире все делилось без остатка, было бы скучно. Поэтому наряду с целыми числами существует такое понятие как вещественное, число или чтобы вам было понятнее – дробное число.
Боже мой, как программист игр, я сталкивался с такими погрешностями вычислений на C++, что приходилось только махнуть рукой. Самая страшная операция для многих языков программирования – это деление. Уж тут копий можно наломать. К счастью, в Ruby для хранения вещественных чисел был придуман класс Float. Подобно классу Fixnum, интерпретатор самостоятельно определяет, что программист объявил объект дробного типа.
drob=3.45 # дробное число
Как видите, десятичная дробь записывается почти как в математике (разве, что ставится точка вместо запятой). Кроме того, в классе Float можно хранить и мантиссу числа:
6.02e23 # Число Авогадро, читается как 6,02, умноженное на 10 в степени 23
Пока на этом вводный урок по числам в Ruby завершим. В следующем уроке мы рассмотрим с вами основные операции с числами.