кодесурса

Рубиновые логические операторы

script1adsense2code
script1adsense3code

Логические Операторы

Стандартные логические операторы и, или, и нет, поддерживаются Ruby. Логические операторы сначала преобразуют свои операнды в логические значения, а затем выполняют соответствующее сравнение.

Логично и:

Двоичный оператор «и» возвращает логическое соединение двух своих операндов. Условие становится истинным, если оба операнда истинны. Это то же самое, что и & &, но с более низким приоритетом. Смотрите следующую презентацию:


Приведенный выше рисунок поможет вам понять концепцию ЛОГИЧЕСКОГО И ИСПОЛЬЗОВАНИЯ с аналогией кранов и воды.

В случае 1 на рисунке оба крана закрыты, поэтому вода не стекает. Что объясняет, что если оба условия ЛОЖЬ или 0, возвращаемое значение ЛОЖЬ или 0.

В случае 2 на рисунке один из кранов закрыт, даже тогда вода не стекает. Что объясняет, что даже если любое из условий ЛОЖЬ или 0, возвращаемое значение ЛОЖЬ или 0.

case-3 картины напоминает CASE -2.

В случае 4 на рисунке оба крана открыты, поэтому вода стекает вниз. Что объясняет, что если оба условия равны ИСТИНА или 1, возвращаемое значение ИСТИНА или 1.

Таким образом, мы можем сделать вывод, что тогда и только тогда, когда оба условия равны ИСТИНА или 1, операции ЛОГИЧЕСКОГО И возвращают ИСТИНА или 1.

Логический или:

Двоичный оператор «или» возвращает логическую дизъюнкцию двух своих операндов. Условие становится истинным, если оба операнда истинны. Это так же, как "||" но с более низким приоритетом. Смотрите следующую презентацию:


Приведенный выше рисунок поможет вам понять концепцию ЛОГИЧЕСКОГО ИЛИ операции по аналогии с кранами и водой.

В случае 1 на рисунке оба крана закрыты, поэтому вода не стекает. Что объясняет, что если оба условия ЛОЖЬ или 0, возвращаемое значение ЛОЖЬ или 0.

В случае 2 на рисунке один из кранов закрыт, и мы видим, что вода стекает вниз. Это объясняет, что если какое-либо из условий имеет значение ИСТИНА или 1, возвращаемое значение ИСТИНА или 1.

case-3 картины, напоминает CASE -2.

В случае 4 на рисунке оба крана открыты, поэтому вода стекает вниз. Что объясняет, что если оба условия равны ИСТИНА или 1, возвращаемое значение ИСТИНА или 1.

Таким образом, мы можем сделать вывод, что в операции ЛОГИЧЕСКОЕ ИЛИ, если какое-либо из условий является истинным, результат равен ИСТИНА или 1.

Логично нет:

Логично нет или! Оператор используется для изменения логического состояния своего операнда. Если условие ложно, логический оператор not делает его истинным.

Пример: Ruby логический оператор

 puts ("logical operators in Ruby")
 ruby ="x"
 programming ="y" 
      if ruby =="foo" && programming =="bar"
        puts "&&"
      end
      
      if ruby =="foo" and programming =="bar"
        puts "&& and"
      end
      
      p, q, r, s = 1, 2 ,3 , 4
      if p == 1 && q == 2 && r == 3 && s == 4
        puts sum = p + q + r + s
      end
      
      programming ="ruby"
      
      if ruby =="foo" || programming =="bar"
        puts "||"
      end
      
      if ruby =="foo" or programming =="bar"
        puts "|| or"
      end
      
      ruby ="awesome"
      if ruby =="foo" or programming =="bar"
        puts "|| or"
      else
      	puts "sorry!"
      end
      
      if not (ruby =="foo" || programming =="bar")
      	puts "nothing!"
      end
      
      if !(ruby =="foo" or programming =="bar")
      	puts "nope!"
      end

Выход:

 логические операторы в Ruby
10
извиняюсь!
ничего такого!
Нету!

Пример 1: операторы Ruby (&& и) имеют приоритет

irb(main):016:0> foo = :foo
=> :foo
irb(main):017:0> bar = nil
=> nil
irb(main):018:0> x = foo and bar
=> nil
irb(main):019:0> x
=> :foo
irb(main):020:0> x = foo && bar
=> nil
irb(main):021:0> x
=> nil
irb(main):022:0> x = (foo and bar)
=> nil
irb(main):023:0> x
=> nil
irb(main):024:0> (x = foo) && bar
=> nil
irb(main):025:0> x
=> :foo

Пример-1: операторы Ruby (||, или) приоритет

irb(main):001:0> foo = :foo
=> :foo
irb(main):002:0> bar = nil
=> nil
irb(main):003:0> x = foo or bar
=> :foo
irb(main):004:0> x
=> :foo
irb(main):005:0> x = foo || bar
=> :foo
irb(main):006:0> x
=> :foo
irb(main):007:0> x = (foo or bar)
=> :foo
irb(main):008:0> x
=> :foo
irb(main):009:0> (x = foo) || bar
=> :foo
irb(main):010:0> x
=> :foo

Предыдущая: Рубиновый побитовый операторсент
Далее: Рубин Тернарный оператор

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code