Большинство языков программирования имеют тип данных, называемый «логический». Это форма данных только с двумя возможными значениями (обычно «истина» и «ложь»). Однако язык Ruby не имеет логического типа данных.
В Ruby есть булевы методы, иначе называемые предикатами или запросами. Это методы, которые заканчиваются знаком вопроса (?). Стоит отметить, что только значения « false» и «nil » оцениваются как false в Ruby.
Давайте возьмем пример all?
%w[ant bear cat].all? { |word| word.length >= 3 } #=> true
%w[ant bear cat].all? { |word| word.length >= 4 } #=> false
%w[ant bear cat].all?(/t/) #=> false
[1, 2i, 3.14].all?(Numeric) #=> true
[nil, true, 99].all? #=> false
[].all? #=> true
all? метод передает каждый элемент коллекции в данный блок. Метод возвращает true, если блок никогда не возвращает false или nil. Если блок не задан, Ruby добавляет неявный блок {| obj | obj}, который вызовет all? вернуть true, если ни один из членов коллекции не равен false или равен нулю.
Если вместо этого задан шаблон, метод возвращает элемент pattern === для каждого члена коллекции.
Это похожий случай с any?
%w[ant bear cat].any? { |word| word.length >= 3 } #=> true
%w[ant bear cat].any? { |word| word.length >= 4 } #=> true
%w[ant bear cat].any?(/d/) #=> false
[nil, true, 99].any?(Integer) #=> true
[nil, true, 99].any? #=> true
[].any? #=> false
Из приведенных выше примеров можно сделать вывод, что вопросительный знак (?) d конце метода устанавливается, когда у нас есть метод, который возвращает логические значения - «истина» или «ложь».
Создание булевых методов
Помимо логических методов, предоставляемых Ruby, вы также можете создавать свои собственные логические методы.
Например;
def is_even?(x)
(x % 2) == 0
end
def is_odd?(x)
(x % 2) == 1
end
def multiples_of_five?(x)
(x % 5) == 0
end
def less_than_three?(x)
x < 3
end
puts is_even?(2)
puts is_even?(3)
puts is_odd?(2)
puts is_odd?(3)
puts multiples_of_five?(3)
puts multiples_of_five?(5)
puts less_than_three?(2)
puts less_than_three?(4)
Это приведет к следующему
true
false
false
true
false
true
true
false
В заключение мы узнали:
- Методы, заканчивающиеся знаком вопроса (?), называются логическими методами;
- Булевы методы должны возвращать true или false;
- Вы можете создавать свои собственные логические методы в Ruby
0 комментариев
Добавить комментарий