Понимание булевых методов в Ruby с примерами

  • 25 февраля, 15:56
  • 3793
  • 0

Большинство языков программирования имеют тип данных, называемый «логический». Это форма данных только с двумя возможными значениями (обычно «истина» и «ложь»). Однако язык 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

В заключение мы узнали:

  1. Методы, заканчивающиеся знаком вопроса (?), называются логическими методами;
  2.  Булевы методы должны возвращать true или false;
  3. Вы можете создавать свои собственные логические методы в Ruby

Источник перевода


0 комментариев
Сортировка:
Добавить комментарий