Всякий раз, когда разрабатываемое вами решение требует использования слишком большого количества логических связей, таких как «и», «или» и «не», вы можете нужен чистый и прямой способ записать его в виде кода, чтобы повысить удобочитаемость и производительность.

В этой статье я напишу несколько простых математических советов, которые вы можете добавить в свой набор навыков программиста.

Перевод выражения в математику

Чтобы упростить написание кода, начните с перевода логических выражений в математические обозначения, выполнив следующие шаги:

  • Назовите каждое отдельное логическое предложение буквой:

пример:

расходы › доходы → A

«Затраты выше доходов»является логическим (верным или ложным) утверждениеми будет представлен буквой A.

  • Переведите соединители:

и →

or →

не →

правда →1

ложь →0

пример:

«Затраты выше доходов и цена не ниже 100» можно перевести как:

Расходы выше доходов → A

и →

цена ниже 100 →B

Ну наконец то:

(A ∧ B’)

Упрощение выражения

После написания выражения в математических терминах, как указано выше, используйте следующие тавтологические эквивалентности и законы Моргана, чтобы упростить логику:

Коммутативность:

ABBA

ABBA

Ассоциативность:

(AB) ∨ CA ∨ (BC)

(AB) ∧ CA ∧ (BC)

Распределение:

A ∨ (BC) ⇔ (AB) ∧ (AC)

A ∧ (BC) ⇔ (AB) ∨ (AC)

Свойства нейтрального элемента:

A ∨ 0' ⇔ 1

A ∧ 1 ⇔ A

Дополнительные свойства:

AA’ ⇔ 1

AA’ ⇔ 0

Законы Моргана:

(AB)’ ↔ A’B’

(AB)’ ↔ A’B’

Пример кода

Давайте возьмем этот фрагмент кода, написанный на Java, и применим предыдущие концепции, чтобы упростить его логику:

if ((income>costs) && !((income>costs) && (price<100)) ) {
        System.out.println("profit");
    } else {
        System.out.println("loss");
    }
}

Здесь выражение внутри «если» можно записать в математической форме так:

A ∧ (AB)’

Где:

A →доход › затраты

B →цена ‹ 100

Упрощение выражения:

A ∧ (AB)' A ∧ ( A′ ∨ B′) — закон Моргана

(AA') ∨ (AB') — Распределение

0 ∨ (AB′) — Дополнительные свойства

(AB′) ∨ 0 — Коммутативность

AB′ — Свойства нейтрального элемента

Теперь выражение становится:

AB

Который можно записать в более чистом коде как:

if ((income>costs) && !(price<100)) {
        System.out.println("profit");
    } else {
        System.out.println("loss");
    }
}

Некоторые задачи намного сложнее, чем этот пример. Если вы разобьете его на эти простые шаги, вы можете получить блестящее упрощенное решение, которое вы не видели на первый взгляд.

Вывод

На этом простом примере я хочу показать потенциал использования простых математических инструментов для повышения удобочитаемости кода и уменьшения ненужной обработки во время выполнения.

Пожалуйста, поделитесь своими мыслями об этой статье, и если у вас есть какие-то советы, я буду рад их услышать.

Удачного кодирования!