Типы Данных В Ruby

В этой части урока Ruby мы поговорим о типах данных.

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

Инструменты для работы с различными типами данных являются неотъемлемой частью современного компьютерного языка. Тип данных – это набор значений и допустимые операции над этими значениями.

Список типов данных рубиновый

Ruby имеет несколько типов данных. Все типы данных основаны на классах. Ниже перечислены типы данных, распознаваемые в Ruby:

  • Booleans
  • Symbols
  • Numbers
  • Strings
  • Arrays
  • Hashes

В следующем примере мы имеем все важные типы данных Ruby.
#!/usr/bin/ruby

h = { :name => “Jane”, :age => 17 }

p true.class, false.class
p “Ruby”.class
p 1.class
p 4.5.class
p 3_463_456_457.class
p :age.class
p [1, 2, 3].class
p h.class

Мы печатаем их имена классов. Класс-это шаблон, из которого создается каждый объект.

p true.class, false.class    Логические значения представлены объектами true и false.      p "Ruby".class    Система выведет нам, что это строка.    
p 1.class  p 4.5.class  p 3_463_456_457.class    Это числа.  p :age.class  # Это символ, специфический тип данных в языке Ruby    p [1, 2, 3].class  p h.class  Это два контейнера Массив и Хэш.    
$ ./types.rb  TrueClass  FalseClass  String  Fixnum  Float  Bignum  Symbol  Array  Hash    В программе перечислены классы, принадлежащие к типам данных Ruby.      

Логические значения Ruby

В нашем мире существует двойственность. Есть небо и земля, вода и огонь, мужчина и женщина, любовь и ненависть.

Такова "булева" природа нашего существования. В Ruby логический тип данных может иметь одно из двух значений: true или false. Boolean-это фундаментальный тип данных, который очень часто встречается в компьютерных программах.

Счастливые родители ждут, когда родится ребенок. Они выбрали название для обеих возможностей. Если это будет мальчик, они выбрали Джона. Если это будет девочка, они выбрали Викторию. #!/usr/bin/ruby # kid.rb bool = [true, false] male = bool[rand(2)] if male puts "We will use name John" else puts "We will use name Victoria" end Программа использует генератор случайных чисел для моделирования нашего случая. bool = [true, false] Мы используем метод rand () для создания случайного числа.

Метод возвращает либо 0, либо 1. Возвращаемое число является индексом массива bool.

if male
puts “We will use name John”
else
puts “We will use name Victoria”
end

В зависимости от мужской переменной, мы печатаем сообщение. Если переменная male имеет значение true, мы выбираем имя John.

В противном случае, мы выбираем Имя Виктория.

Структуры управления, такие как операторы if/else, работают с логическими значениями.

$ ./kid.rb We will use name Victoria $ ./kid.rb We will use name Victoria $ ./kid.rb We will use name John $ ./kid.rb We will use name John $ ./kid.rb We will use name John Программа запускается несколько раз.

Рубиновые символы

Символы используются для представления других объектов. Использование символов вместо строк может сэкономить некоторые ресурсы. Символ-это объект экземпляра класса символов.

Символы создаются с помощью двоеточия перед идентификатором, например: name. Несколько объектов также имеют методы to_sym. Эти методы преобразуют эти объекты в символы.

Символы Ruby нельзя изменить во время выполнения. Символы  часто используются в качестве хэш-ключей, потому что нам не нужны полные возможности строковых объектов для ключа.
#!/usr/bin/ruby

p :name
p :name.class
p :name.methods.size
p “Jane”.methods.size

p :name.object_id
p :name.object_id
p “name”.object_id
p “name”.object_id

В первом примере мы покажем некоторые основные операции с символами Ruby.
p :name
p :name.class

Выводим символ и его класс на консоль. Класс символа-Symbol.

p :name.methods.size
p “Jane”.methods.size
Мы сравниваем количество методов, связанных с экземплярами символов и строк. Строка имеет более чем в два раза больше методов, чем символ.

p :name.object_id
p :name.object_id
p “name”.object_id
p “name”.object_id

Те же символы имеют тот же идентификатор. Одни и те же строки имеют разные идентификаторы.
$ ./symbols.rb
:name
Symbol
79
162
10328
10328
77344750
77344730

Пример вывода.

Символы могут использоваться в качестве флагов. Константы могут использоваться и в таких ситуациях.

В C / C++ мы будем использовать перечисления.

#!/usr/bin/ruby    light = :on    if light == :on      puts "The light is on"  else      puts "The light is off"  end    light = :off    if light == :on      puts "The light is on"  else      puts "The light is off"  end    Свет либо включен, либо выключен. Для обоих состояний мы могли бы определить символы.

light = :on
Свет включен.

if light == :on
puts “The light is on”
else
puts “The light is off”
end
Логика работы программы зависит от состояния световой переменной.

Символы часто используются в качестве ключей в хэш-контейнерах. Они более эффективны, чем строки.
#!/usr/bin/ruby

domains = {:sk => “Slovakia”, :no => “Norway”, :hu => “Hungary”}

puts domains[:sk]
puts domains[:no]
puts domains[:hu]
В скрипте у нас есть хэш доменов. Ключи в хэше-это символы.

puts domains[:sk]  puts domains[:no]  puts domains[:hu]  Ключи используются для доступа к значениям хэша. Здесь мы печатаем три значения хэша.    $ ./symbols3.rb  Slovakia  Norway  Hungary  Вывод примера.    Интерпретатор Ruby хранит некоторые ссылки внутри в виде символов.  #!/usr/bin/ruby

class Being

def initialize
@is = true
end

def say
“I am being”
end
end

b = Being.new

p b.method :say
p b.instance_variable_get :@is

Определяется класс существа.

Класс имеет пользовательскую переменную экземпляра @is и метод say. Эти две сущности хранятся с использованием символов Руби.
b.method :say

Метод method ищет метод приемника с заданным именем в объекте b. Мы ищем :say символ.
p b.instance_variable_get :@is

Мы используем instance_variable_get, чтобы проверить, является ли @is переменной экземпляра объекта B.

Внутренне переменная хранится как символ: @is.

$ ./symbols4.rb
#
true
Сгенерированный выход

Все символы хранятся в таблице символов. В следующем примере мы рассмотрим таблицу.

Метод all_symbols класса символа возвращает массив всех символов из таблицы.

#!/usr/bin/ruby

def info
“info method”
end

@v = “Ruby”
@@n = “16”

p Symbol.all_symbols.include? :info
p Symbol.all_symbols.include? :@v
p Symbol.all_symbols.include? :@@n

Метод, переменная экземпляра и переменная класса создаются в скрипте Ruby.

Мы проверяем, хранятся ли эти сущности в таблице символов.

p Symbol.all_symbols.include? :info

Мы проверяем, находится ли символ: info в таблице символов. Строка возвращает true.
$ ./symbols5.rb
true
true
true

Все три символа присутствуют в таблице символов Ruby.

Целые числа Ruby

Целые числа-это подмножество действительных чисел. Они записываются без дробного или десятичного компонента.

Целые числа попадают в набор Z = {…, -2, -1, 0, 1, 2, …} Это множество бесконечно.

В компьютерных языках целые числа являются примитивными типами данных. На практике компьютеры могут работать только с подмножеством целочисленных значений, поскольку их емкость ограничена.

Целые числа используются для подсчета дискретных объектов. Мы можем иметь 3, 4 или 6 человек, но мы не можем иметь 3,33 человека. Мы можем иметь 3,33 килограмма.

Числа объектов, экземпляр класса Fixnum и Bignum в Ruby. В отличие от таких языков, как Java или C, целые числа в Ruby являются объектами.

Эти два класса отличаются по размеру. Числа Fixnum-это целые числа до определенного предела. Предел зависит от машины. Значения Bignum содержат целые числа вне диапазона Fixnum.

Если какая-либо операция над Fixnum превышает его диапазон, значение автоматически преобразуется в Bignum. Программисту обычно не нужно заботиться о типе класса целых чисел.

#!/usr/bin/ruby

p -2
p 121
p 123265
p -34253464356
p 34867367893463476

p 1.class
p 23453246.class
p 234532423563456346.class
p 2345324235632363463456456346.class

p 5 / 2
p 5.div 2
В данном примере мы имеем дело с целыми числами.
p -2
p 121
p 123265
p -34253464356
p 34867367893463476
Это положительные и отрицательные целочисленные значения различных размеров.

p 1.class
p 23453246.class
p 234532423563456346.class
p 2345324235632363463456456346.class

Выведем классы этих целых чисел. Первые два целых числа являются экземплярами класса Fixnum.
Остальные два являются экземплярами класса Bignum.

p 5 / 2
p 5.div 2

Две строки показывают целочисленное деление.
Когда мы делим два целых числа с помощью оператора/метода целочисленного деления, результат также является целым числом.

$ ./integers.rb
-2
121
123265
-34253464356
34867367893463476
Fixnum
Fixnum
Bignum
Bignum
2
2

Целые числа могут быть указаны в различных нотациях в Ruby: десятичной, шестнадцатеричной, восьмеричной и двоичной. Десятичные числа используются обычно, как мы их знаем.

Шестнадцатеричным числам предшествуют 0x символов, восьмеричным-0 символов и двоичным-0b символов.

!/usr/bin/ruby

puts 122
puts 0x7a
puts 0172
puts 0b1111010
В данном примере кода мы печатаем десятичное число 122 во всех этих обозначениях.

$ ./inotations.rb
122
122
122
122
И получили такой вывод.

Если мы работаем с целыми числами, мы имеем дело с дискретными сущностями.

Мы будем использовать целые числа для подсчета яблок.

#!/usr/bin/ruby

baskets = 16
apples_in_basket = 24

total = baskets * apples_in_basket

puts “There are total of #{total} apples”
В нашей программе мы подсчитываем общее количество яблок. Мы работаем с целыми числами.
$ ./apples.rb
There are total of 384 apples

Большие числа трудно читать. Если у нас есть число, как 245342395423452, нам трудно читать его быстро. Вне компьютеров большие числа разделяются пробелами или запятыми.

Для удобства чтения Ruby позволяет целым числам содержать символы подчеркивания. Символы подчеркивания в целых числах игнорируются интерпретатором Ruby.

#!/usr/bin/ruby

p 23482345629
p 23_482_345_629
p 23482345629 == 23_482_345_629

На  сегодня все. До новых встеч, друзья!

Перейти к верхней панели