Ruby: Типы данных Ruby
Большая часть типов данных в Ruby работает аналогично типам в других языках. Это относится к строкам, числам или булевым значениям:
'one' # String
true # Boolean
false
3 # Integer
5.2 # Float
[] # Array
{} # Hash
1..3 # RangeРоль null в ruby играет nil. Такое название традиционно используется в Smalltalk и семействе Lisp-языков для обозначения концепции «ничего». В остальном всё очень похоже.
Тип Range используется для задания непрерывного диапазона чисел. Встречается не так часто, но бывает удобен, особенно при работе с датами в библиотеках.
# От сейчас до +24 часа
Time.now..(Time.now + 60 * 60 * 24)Массивы в Ruby, как и в любом другом динамическом языке, тоже динамические. Их можно изменять, уменьшать и увеличивать прямо в процессе работы:
companies = []
# Добавление элемента
companies << 'hexlet'Тип данных Hash хотя и называется необычно, по сути является обычным хранилищем key-value пар. В JavaScript для этого используются объекты, в PHP — ассоциативные массивы, а в Python — словари.
options = {
sanitize: true
}
options['table'] = falseКроме стандартных типов Ruby добавляет довольно необычный тип, называемый символом. Подобный тип есть во многих языках, включая Erlang (атом), Clojure (кейворд) и JavaScript (символ). Пример:
:key
:anotheroneСимвол очень похож на строку, но он представлен в памяти в единственном экземпляре — в отличие от строк, которые создаются каждый раз заново. Это если говорить про техническую сторону. На практике символ удобен там, где строка выражает саму себя. Обычно там, где в других языках создают константы, в которые записаны строки с именем этой константы, в Ruby просто используют символ. По большому счёту символ не является чем-то жизненно необходимым — он немного сокращает количество кода и местами чуть удобнее в использовании. В остальном по смыслу — это та же строка.
Символы — это такая концепция, которая «заходит» исключительно на практике. Чем больше примеров будет перед глазами, тем быстрее получится использовать этот тип по назначению.
Для проверки типа в каждом объекте присутствует метод is_a?:
1.is_a? String # false
1.is_a? Integer # true
# Либо сам тип
1.class # Integer
'hexlet'.class # StringЗадание
Реализуйте функцию type_of_type(value), которая определяет, является ли тип данных составным, и возвращает символ :complex, если да, и :simple — если нет. Составным считаются только три типа: Hash, Array и Range. Остальные — простые.
type_of_type({}) # :complex
type_of_type('') # :simpleДля проверки условия ИЛИ используйте оператор ||.
Не забудьте при этом поставить скобки вокруг вызова методов: 1.is_a?(String). Иначе код выполнится не так, как задумано, из-за приоритетов операций.
Ruby: Типы данных Ruby
Большая часть типов данных в Ruby работает аналогично типам в других языках. Это относится к строкам, числам или булевым значениям:
'one' # String
true # Boolean
false
3 # Integer
5.2 # Float
[] # Array
{} # Hash
1..3 # RangeРоль null в ruby играет nil. Такое название традиционно используется в Smalltalk и семействе Lisp-языков для обозначения концепции «ничего». В остальном всё очень похоже.
Тип Range используется для задания непрерывного диапазона чисел. Встречается не так часто, но бывает удобен, особенно при работе с датами в библиотеках.
# От сейчас до +24 часа
Time.now..(Time.now + 60 * 60 * 24)Массивы в Ruby, как и в любом другом динамическом языке, тоже динамические. Их можно изменять, уменьшать и увеличивать прямо в процессе работы:
companies = []
# Добавление элемента
companies << 'hexlet'Тип данных Hash хотя и называется необычно, по сути является обычным хранилищем key-value пар. В JavaScript для этого используются объекты, в PHP — ассоциативные массивы, а в Python — словари.
options = {
sanitize: true
}
options['table'] = falseКроме стандартных типов Ruby добавляет довольно необычный тип, называемый символом. Подобный тип есть во многих языках, включая Erlang (атом), Clojure (кейворд) и JavaScript (символ). Пример:
:key
:anotheroneСимвол очень похож на строку, но он представлен в памяти в единственном экземпляре — в отличие от строк, которые создаются каждый раз заново. Это если говорить про техническую сторону. На практике символ удобен там, где строка выражает саму себя. Обычно там, где в других языках создают константы, в которые записаны строки с именем этой константы, в Ruby просто используют символ. По большому счёту символ не является чем-то жизненно необходимым — он немного сокращает количество кода и местами чуть удобнее в использовании. В остальном по смыслу — это та же строка.
Символы — это такая концепция, которая «заходит» исключительно на практике. Чем больше примеров будет перед глазами, тем быстрее получится использовать этот тип по назначению.
Для проверки типа в каждом объекте присутствует метод is_a?:
1.is_a? String # false
1.is_a? Integer # true
# Либо сам тип
1.class # Integer
'hexlet'.class # StringЗадание
Реализуйте функцию type_of_type(value), которая определяет, является ли тип данных составным, и возвращает символ :complex, если да, и :simple — если нет. Составным считаются только три типа: Hash, Array и Range. Остальные — простые.
type_of_type({}) # :complex
type_of_type('') # :simpleДля проверки условия ИЛИ используйте оператор ||.
Не забудьте при этом поставить скобки вокруг вызова методов: 1.is_a?(String). Иначе код выполнится не так, как задумано, из-за приоритетов операций.
Ваше упражнение проверяется по этим тестам
# frozen_string_literal: true
require 'test_helper'
require_relative 'index'
describe 'function' do
it 'should works' do
assert { type_of_type(3) == :simple }
assert { type_of_type('hexlet') == :simple }
assert { type_of_type(['hexlet']) == :complex }
assert { type_of_type(0..42) == :complex }
assert { type_of_type({ one: 'two' }) == :complex }
end
endРешение учителя откроется через:
20:00
