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

  • 25 февраля, 13:56
  • 5410
  • 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 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все