> For the complete documentation index, see [llms.txt](https://evgenii-afanasev.gitbook.io/ruby-course/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://evgenii-afanasev.gitbook.io/ruby-course/2_basics/2_conditions.md).

# Условия

## Булевая математика

Мы поговорили про операции над числами и строками, но ничего не сказали про Boolean. Вообще само название Boolean происходит от имени ученного George Boole и в математике есть отдельная наука изучающая комбинаторику между значением Boolean (Булевая математика)

Давайте посмотри как она работает:

```ruby
    true_var = true
    false_var = false
    true_and_false_var = true_var && false_var # = false. Оператор && называется комбинатором 'И'. Если левая часть И вторая = true, значит результат будет true. Если хотя бы одна из частей false, значит и результат false
    true_or_false_var = true_var || false_var # = true.  Оператор || называется комбинатором 'ИЛИ'. Если левая часть ИЛИ вторая = true, значит результат будет true. Если обе части false, значит результатом будет false
    difficult_bool = (true_var && false_var) || false_var # = false. Скобки в данном случае используются как в математике. Сначала происходит вычисление в самых глубоких скобках, потом уже вычисление с результатом
```

Помимо булевой математики у нас есть специальные операторы, которые возвращают в качестве результата Boolean.

```ruby
    int_var = 261
    is_more_then_100 = int_var > 100 # = true. Оператор > проверяет, что левая часть больше правой. Если все так, то результатом будет true, если нет - false.
```

Подробнее про операторы можно почитать в дополнительных материалах. Читать внимательно, так как задание будет проверят знание этих операторов

## if else

Основной сценарий использования у Boolean это условия if...elsif...else...end

```ruby
    int_var = 90
    another_var = 100

    if int_var > 50 # Если int_var больше 50
        # То выполни код внутри
        puts "int_var is more then 50" # В данном примере нужно напечатать в консоль "It's more then 50"
    elsif int_var > 30 # Если условия выше не сработали, то проверить, что int_var больше 30
        # Если условие выполнится, то выполни код внутри
        puts "int_var isn't more then 50, but more then 30"
    elsif int_var > 10 # Если условия выше не сработали, то проверь, что int_var больше 10
        # Если условие выполнится, то выполни код внутри
        puts "int_var isn't more then 50 and 30 but more then 10"
    elsif another_var < 300 # Если условия выше не сработали, то проверь, что another_var меньше 300 (мы можем работать не только с одним значением)
        # Если условие выполнится, то выполни код внутри
        puts "int_var isn't more then 50 and 30 and 10 but another_var less then 300" 
    else # Если никакие из условий выше не сработали
        # то выполни код внутри
        puts "int_var isn't more then 50 and 30 and 10"
    end
```

Запомнить достаточно просто, если знать перевод: `if` - если, `else` - иначе, `elsif` = `else` + `if` - иначе если. Из примера должно быть видно, что условие if мы объявляем один раз, else тоже один раз, а вот elsif у нас может быть сколько угодно.

## Тернарный оператор

Иногда, когда наше условие очень простое и короткое как это:

```ruby
x = 10

if x > 5
  puts 'x more then 5'
else
  puts 'x less or equals 5'
end
```

Его можно упростить до одной строки

```ruby
x = 10

x > 5 ? puts 'x more then 5' : puts 'x less or equals 5'
```

Синтаксис достаточно легко запомнить: `Boolean` ? если `true` : если `false`

### Задание brothers\_age

* Создайте проект с тремя переменными типа int с именами vasya\_age, victor\_age и misha\_age, обозначающими возрасты трёх братьев.
* Пусть vasya\_age = 32, victor\_age = 14, а misha\_age = 40
* Создайте ещё три переменные типа int с именами min, middle и max.&#x20;
* Напишите код, который будет заполнять их, сравнивая возрасты между собой.&#x20;
* Выведите значения переменных min, middle и max в консоль. Код должен корректно работать, при изменении значений в изначальных переменных vasya\_age, victor\_age и misha\_age.&#x20;

### Задание cooking

Есть следующий код:

```ruby
    milk_amount = 200 # ml
    powder_amount = 5 # g
    eggs_count = 3 # items
    sugar_amount = 5 # g
    oil_amount = 30 # ml
    apple_count = 8 # items

    #powder - 400 g, sugar - 10 g, milk - 1 l, oil - 30 ml
    puts 'Pancakes'

    #milk - 300 ml, powder - 5 g, eggs - 5
    puts 'Omelette'

    #apples - 3, milk - 100 ml, powder - 300 g, eggs - 4
    puts 'Apple pie'
```

* Напишите условные операторы if, проверьте в них количество ингредиентов для каждого рецепта.&#x20;
* Убедитесь, что печатаются названия блюд, которые можно приготовить из заданного количества ингредиентов.&#x20;
* Попробуйте изменить количество ингредиентов так, чтобы выдавались разные блюда.

#### Дополнительный материал

* [Boolean операторы](https://www.codingninjas.com/codestudio/library/boolean-operators-in-ruby)
* [Операторы сравнения](https://www.w3resource.com/ruby/ruby-comparison-operators.php)
* [Проверка делится ли число х на y](https://stackoverflow.com/questions/8817927/ruby-divisible-by-4)
* [тернарный оператор](https://www.rubyguides.com/2019/10/ruby-ternary-operator/)
* [switch case](https://www.rubyguides.com/2015/10/ruby-case/)
