Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#46: 2009-11-20 23:13:27 ЛС | профиль | цитата
nesco писал(а):
По первому пункту, в корне не согласен.
нормальным CASE там и не пахнет. И там и там работает IF COMPARE

procedure THIIf_else._work_doCompare;
var
op1,op2,dt:TData;
begin
dt := _Data;
Op1 := ReadData(_Data,_data_Op1,@_prop_Op1);
Op2 := ReadData(_Data,_data_Op2,@_prop_Op2);
if Compare(Op1,Op2,_prop_Type) then
_hi_CreateEvent(_Data,@_event_onTrue,Dt)
else
_hi_CreateEvent(_Data,@_event_onFalse,Dt);
end;

procedure THICase._work_doCase;
var dt:TData;
begin
dt := _Data;
if Compare(ReadFromThread(_Data),_prop_Value,0) then
_hi_OnEvent_(_event_onTrue, FData)
else
_hi_OnEvent(_event_onNextCase,dt);
end;
Как ты говоришь : Не смешите мои тапочки.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#47: 2009-11-20 23:27:51 ЛС | профиль | цитата
Tad писал(а):
Не смешите мои тапочки

Действительно, насмешил я свои тапочки, о чем-то другом думал, наверное . Одно только у него приимущество осталось -- это выдача какого-то значения при совпадении, для чего If_else приходится цеплять лишний компонент и увеличивать занимаемое поле на один такой юнит
карма: 22

0
Ответов: 8928
Рейтинг: 823
#48: 2009-11-21 09:00:00 ЛС | профиль | цитата
nesco,
старушка писал(а):
Старый-то способ хорош был!
Очень раньше If_else по свойствам мог выдавать значения не только слева, но и с верхних точек или просто событие
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#49: 2009-11-21 09:10:52 ЛС | профиль | цитата
По хорошему, то на роль Case больше подходит hiIndexToChanel с добавочными компонентами.
Что мы и делаем, например, при подключении Menu, PopUpMenu и т.д.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1926
Рейтинг: 172
#50: 2009-11-21 09:38:52 ЛС | профиль | цитата
Tad писал(а):
на роль Case больше подходит hiIndexToChanel


Не совсем. hiIndexToChanel проверяет только числа, а если сравнивать надо со словом?

If_else лучше всего, а case... Единственное, что мне в нём нравится, это то, что реакдтировать параметр Value можно двойным щелчком по компоненту, а в If_else приходится целиться в маленький квадратик
Наверное, добавлю себе в ini плюсик напротив одного из параметров If_else.
карма: 9
0
Ответов: 16884
Рейтинг: 1239
#51: 2009-11-21 10:59:24 ЛС | профиль | цитата
3042, не путай людей.
Case на сто вариантов:
Есть длинный коридор и сто дверей.
И мы заранее знаем, что Иванов в 78 комнате.
И идем прямо к нему и все.
Case - это релейный переключатель сразу в нужное положение

If_Else на сто вариантов (цепочка из 100 If_Else):
Есть сто проходных комнат. Дверь входная одна. Где этот Иванов мы не знаем.
Заходим в первую.
-Иванов здесь ?
-Нет пройдите дальше.
Проходим через комнату. Заходим в следующую.
- Иванов здесь ?
-Нет пройдите дальше.
и так 78 раз.
If_Else - это шаговый переключатель в нужное положение с опросом каждого.

И цепочка наших компонент Case работает точно так, как написано выше для If_Else, т.е никакой это не Case, а имитатор Case на базе If_Else.
Если тебя зовут Владимир Владимирович, то совсем не факт, что ты Путин


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 4698
Рейтинг: 426
#52: 2009-11-21 13:32:12 ЛС | профиль | цитата
3042 писал(а):
Не совсем. hiIndexToChanel проверяет только числа, а если сравнивать надо со словом?

И что?
code_15755.txt
карма: 10
0
файлы: 1code_15755.txt [2KB] [147]
Ответов: 1926
Рейтинг: 172
#53: 2009-11-21 17:06:03 ЛС | профиль | цитата
Assasin, с IC можно вообще без всех компонентов обойтись. Просто написать весь код в IC и забить и на IndexToChanel, и на другие.

Tad, это в pas-коде как if-else, а в схеме - очень похож на реальный Case (потому что сравнение одного элемента - из потока - проводится со многими). Но если код у них одинаковый, то надобность в двух элементах отпадает.

Просто Dilma стремился сделать так, чтобы компоненты схемы соответствовали функциям pascal, и если там есть case и IF, то и в hiasm надо оба. А так, думается, делать не надо, потому что уже одна пролема была обнаружена. http://www.hiasm.com/forum.html?q=3&p=129107
карма: 9
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#54: 2009-11-21 18:11:45 ЛС | профиль | цитата
3042, тебе не нравится, не ешь. Поубирай все свои ненужные компоненты в скрытую вкладку и живи спокойно, но вот такие глобальные изменения, какие ты предалагаешь, никто и никогда делать не будет. Совместимость -- превыше всего.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#55: 2009-11-21 18:19:56 ЛС | профиль | цитата
Tad писал(а):
Case - это релейный переключатель сразу в нужное положение

If_Else на сто вариантов (цепочка из 100 If_Else):

это верно для кода, а не для элементов HiAsm. Аналогом case в схеме является IndexToChannel. Элементы же If_Else и Case с точки зрения логики своей работы полностью идентичны.
карма: 27
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#56: 2009-11-21 18:26:11 ЛС | профиль | цитата
С точки зрения логики, да, они -- идентичны. Но представить себе, сколько этих Case народ понаставил у себя в схемах... Послушав 3042, надо убрать все Case и смело кинуться на переделку всех своих схем. Меня, например, больше для простых случаев устраивает, именно Case, а не If_Else
карма: 22

0
Ответов: 1926
Рейтинг: 172
#57: 2009-11-21 18:31:14 ЛС | профиль | цитата
nesco, я ничего не предлагаю, просто только сейчас задумался об этих элементах. Разумеется, ничего никуда убирать не надо, мне тоже больше нравится case.

Да и вообще, вся тема - сплошная философия...
карма: 9
0
57
Сообщение
...
Прикрепленные файлы
(файлы не залиты)