Friday, February 8, 2013

Искусство программирования. Позитивные логические выражения.

Немного не про java и openGL, но тем не менее это фундаментальная вещь часто остающаяся без внимания. Не многие люди не имеют проблем с непониманием не коротких не положительных фраз, т.е. большинство людей имеют трудности с понимаем большого количества отрицаний. Старайтесь избегать подобного. 

Например:
if (!statusOk) {
   ...
   // делаем что то
   ...
} else {
   ...
   // делаем что то еще
   ...
}

Эту конструкцию можно заменить более читабельной, как:

if (statusOk) { // условие в этой строке было заменено на противоположное
   ...
   // делаем что то
   ...
   // код в этом блоке был поменян местами... ->
} else {
   // ->... с этим кодом
   ...
   // делаем что то еще
   ...
}

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

Так же, в похожих ситуациях применение теоремы Деморгана для упрощения логических проверок с отрицанием может оказаться эффективным решением для борьбы со сложностью. Теоремы Деморгана позволяют эксплуатировать логическую взаимосвязь между некоторыми выражениями и версией этого выражения , обозначающего то же самое, благодоря использованию двойного отрицания. 

Например:

if (!displayOk || !orinterOk) {
   ...
}

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

if (!(displayOk && printerOk)) {
   ...
}



Данный пример взят из книги "Совершенный Код" автор Стив Макконнелл. Название книги говорит само за себя. 

Для многих данная оптимизация вероятно известна, тем не менее, если хоть кто то почерпнет для себя что то новое, то я буду считать, что моя миссия выполнена.

Всем спасибо

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.