![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
||
|
zim22 |
|
||||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Читаю "Совершенный Код" Макконнелла
Не хочу соглашаться с ним в этом совете: Упорядочение числовых выражений в соответствии со значениями на числовой прямой в двух словах - его смысл в том, что необходимо слева от знака сравнения ставить константное число (к примеру), а неизвестную - справа. т.е. так:
проблема в том, что моему мозгу сложно понять это выражение ![]() чтобы его осмыслить, я разбираю это выражение за 3 шага:
если бы выражение в самом начале было записано как
то мне не пришлось бы выполнять 1 и 2 шаг. Я сразу бы "осознал" допустимый диапазон для x. в каком стиле вы предпочитаете писать логические условия? какой случай вам легче понять? согласны ли вы с Макконнелом? ![]() текст совета Макконнелла:
не для меня... |
||||||||
|
|||||||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
И моему. Как правило, такой вид записи, наблюдаю чаще всего в коде батаников/зазубриков/и еще людей, знающих что такое числовая ось. Так как опыт практического программирования у них крайне мал. Это сообщение отредактировал(а) Andrew121 - 25.6.2009, 19:39 |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
незачем. у меня было предубеждение, что при инвертировании операндов в логическом условии необходимо добавлять или отнимать знак равенства например я думал так:
я ошибался. ![]() Это сообщение отредактировал(а) zim22 - 25.6.2009, 20:03 |
|||
|
||||
Леопольд |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Вам не кажется что он имел ввиду вот это?
Вполне понятно и не надо делать финт ушами. Но я предпочитаю так же как и Вы:
Хотя на самом деле мне одинаково понятно, что так, что эдак. Так что "по барабану"... Это сообщение отредактировал(а) Леопольд - 25.6.2009, 20:13 -------------------- вопросов больше чем ответов |
||||||||||
|
|||||||||||
zim22 |
|
||||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
вы имели ввиду это?
там было ИЛИ, а не И. И быть не может ![]() *** избавившись от заблуждения
уже проще в голове держать условие! ![]() *** но всё-равно, интересно узнать, практикуете ли вы в коде выравнивание по числовой прямой? Это сообщение отредактировал(а) zim22 - 25.6.2009, 20:09 |
||||||||
|
|||||||||
kemiisto |
|
||||||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Это плохо. Незнание таких элементарных вещей... И поэтому, дальше, как отметил Леопольд, Вы ошиблись.
Именно так и рекомендует автор. Неплохой, кстати, совет. Добавлено через 2 минуты и 43 секунды zim22, у Вас в голове каша. Очень запущено. Там два разных случая по тексту. Первый - когда переменная принадлежит некому онранийченному замкнутому отрезок и это MIN_ELEMENT <= i and i <= MAX_ELEMENT. Второй, наоборот, переменная лежит вне такого отрезка и это i < MIN_ELEMENTS or MAX_ELEMENTS < i. Добавлено через 4 минуты и 16 секунд А понял! Леопольд тоже ошибся. Там or надо, а не and. А иначе бессмыслица. -------------------- |
||||||
|
|||||||
Леопольд |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Опс... Не успел поправить... ![]() ![]() Добавлено через 4 минуты и 16 секунд
Нет. Даже не задумывался. А что, есть какие-то серьёзные выгоды, кроме красоты? ![]() Вот от паттернов проектирования выгоды весьма существенны... -------------------- вопросов больше чем ответов |
||||
|
|||||
zim22 |
|
||||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я понял эти два случая, спасибо. не соглашусь. Леопольд ошибся.
если конвертировать выражение в "понятный" для меня вид, то получим это:
скажите, как может x быть меньше нуля и одновременно больше 10? *** я думаю, если команда разработчиков включит эту рекомендацию в свои стандарты кодирования - будет меньше неразберихи в логических условиях и код будет быстрей читаться. ***
может быть наоборот: практический опыт у них очень большой? ![]() Это сообщение отредактировал(а) zim22 - 25.6.2009, 20:38 |
||||||||
|
|||||||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Ага. ![]() ![]()
zim22, отбросим на секунду, то что в примере Леопольда будет пустое множество значений. Что понятнее:
Первый вариант. Ибо не надо дополнительных усилий, чтобы преобразовать его в двойное неравенство. А мы именно это математичсекую запись пытаемся закодировать. И с примером с or тоже самое. Этот ваш Макконнелл об этом и говорит. Это сообщение отредактировал(а) kemiisto - 25.6.2009, 20:51 -------------------- |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
zim22, поправь подпись, он Де Морган, а не "Деморган"
|
|||
|
||||
zim22 |
|
||||||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
преобразование в двойное неравенство - это преобразование Де Моргана что-ли? мне никаких усилий не нужно, чтобы преобразовать любое логическое условие с двумя операндами и оператором ИЛИ или И. очень просто делается: отрицаем каждый операнд, меняем знак между операндами (И <=> ИЛИ) и отрицаем всё выражение. *** я понял, откуда было моё заблуждение! я не различал между собой два случая: 1) отрицание логического выражения 2) перестановка операндов в логическом выражении с левой стороны на правую от знака операнда т.е. если мы отрицаем логическое условие, то я правильно тогда предполагал. < меняется на >=, > на <= возьмём к примеру это:
отрицаем и получаем:
что равнозначно варианту:
т.е. > меняется на <= ![]() ***
Я придумал, как визуализировать такие выражения. Представлять у себя в голове прямоугольнички разного размера. 1) a < x два прямоугольника. a маленький. x большой 2)x < b ещё один прямоугольник представляю. самый большой. b что дальше с ними делать - не знаю ![]() ![]() ![]() поправил. хотя фамилию я не с головы придумал. в книжечке Совершенный Код он был написан именно как Деморган. Но корявый русский перевод мог иметь место. Это сообщение отредактировал(а) zim22 - 25.6.2009, 21:43 |
||||||||||
|
|||||||||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Да нет. ![]() ![]() Это сообщение отредактировал(а) kemiisto - 25.6.2009, 21:36 -------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |