Ruby: Способы определения массивов
В Ruby необычно много способов создания массивов. Они помогают сделать определение короче, и достаточно часто используются на практике. Особенно любит их линтер Rubocop.
# Обычное определение
['apple', 'orange', 'melon']
# Сокращенное
%w[apple orange melon]%w позволяет задавать массив перечислением без использования дополнительных символов. Даже в примере выше видно, насколько код получается короче и даже читаемее. Единственное ограничение такого способа – наличие пробелов в значениях. Каждый пробел считается разделителем значений:
%w[first second value third]
# ["first", "second", "value", "third"]Технически, слова можно экранировать, но так обычно не делают из-за резкого ухудшения читаемости:
%w[first second\ value third]
# ["first", "second value", "third"]Похожим способом создается массив символов, только вместо %w используется %i:
%i[apple orange melon] # [:apple, :orange, :melon]Так же массивы можно создавать из диапазонов или итераторов:
(1..5).to_a # [1, 2, 3, 4, 5]
1.upto(5).to_a # [1, 2, 3, 4, 5]В некоторых достаточно редких случаях можно воспользоваться динамическим созданием значений. Для этого используется конструктор Array и блок, вычисляющий значение для нужного индекса:
Array.new(5) { |i| i ** 2 }
# [0, 1, 4, 9, 16]Задание
Реализуйте функцию valid_date?(), которая проверяет переданную дату на допустимость по двум критериям:
- Месяц находится между 1 и 12
- День находится между 1 и 31
Дата поступает на вход всегда в формате: dd-mm-yyyy. Не используйте функции для работы с датами, реализуйте все с помощью обычных типов данных.
valid_date?('11-11-2011') # true
valid_date?('13-11-2011') # true
valid_date?('11-13-2011') # false
valid_date?('55-11-2011') # falseRuby: Способы определения массивов
В Ruby необычно много способов создания массивов. Они помогают сделать определение короче, и достаточно часто используются на практике. Особенно любит их линтер Rubocop.
# Обычное определение
['apple', 'orange', 'melon']
# Сокращенное
%w[apple orange melon]%w позволяет задавать массив перечислением без использования дополнительных символов. Даже в примере выше видно, насколько код получается короче и даже читаемее. Единственное ограничение такого способа – наличие пробелов в значениях. Каждый пробел считается разделителем значений:
%w[first second value third]
# ["first", "second", "value", "third"]Технически, слова можно экранировать, но так обычно не делают из-за резкого ухудшения читаемости:
%w[first second\ value third]
# ["first", "second value", "third"]Похожим способом создается массив символов, только вместо %w используется %i:
%i[apple orange melon] # [:apple, :orange, :melon]Так же массивы можно создавать из диапазонов или итераторов:
(1..5).to_a # [1, 2, 3, 4, 5]
1.upto(5).to_a # [1, 2, 3, 4, 5]В некоторых достаточно редких случаях можно воспользоваться динамическим созданием значений. Для этого используется конструктор Array и блок, вычисляющий значение для нужного индекса:
Array.new(5) { |i| i ** 2 }
# [0, 1, 4, 9, 16]Задание
Реализуйте функцию valid_date?(), которая проверяет переданную дату на допустимость по двум критериям:
- Месяц находится между 1 и 12
- День находится между 1 и 31
Дата поступает на вход всегда в формате: dd-mm-yyyy. Не используйте функции для работы с датами, реализуйте все с помощью обычных типов данных.
valid_date?('11-11-2011') # true
valid_date?('13-11-2011') # true
valid_date?('11-13-2011') # false
valid_date?('55-11-2011') # falseВаше упражнение проверяется по этим тестам
# frozen_string_literal: true
require 'test_helper'
require_relative 'index'
describe 'function' do
it 'should works' do
assert { valid_date?('11-11-2011') }
assert { valid_date?('31-01-2011') }
assert { !valid_date?('11-13-2011') }
assert { !valid_date?('55-11-2011') }
end
endРешение учителя откроется через:
20:00
