Форум: "Начинающим";
Текущий архив: 2017.02.19;
Скачать: [xml.tar.bz2];
ВнизOperator not applicable to this operand t Найти похожие ветки
← →
aik_has (2015-06-17 06:48) [0]
procedure TFAgent.DBGrid1CellClick(Column: TColumn);
var
X:integer;
begin
X :=DBGrid1.SelectedIndex;
if X=3 and D.Agent.State = dsEdit then
D.AgentDolg_log.AsBoolean:=true;
end;
[Error] Agent.pas(125): Operator not applicable to this operand type
Что не так чтоб выдавала эту ошибку?
← →
aik_has (2015-06-17 06:51) [1]D.Agent = TADOQuerty
← →
aik_has (2015-06-17 06:55) [2]Ух ты так работает:
procedure TFAgent.DBGrid1CellClick(Column: TColumn);
var
X:integer;
begin
X :=DBGrid1.SelectedIndex;
if D.Agent.State = dsEdit then
If X=3 then
D.AgentDolg_log.AsBoolean:=true;
end;
Почему?
← →
Ega23 © (2015-06-17 07:27) [3]
> Что не так чтоб выдавала эту ошибку?if (X=3) and (D.Agent.State = dsEdit) then
← →
icWasya © (2015-06-17 09:37) [4]Приоритеты операций в Delphi очень странные. То есть and считается арифметической операцией и приоритет у неё выше, чем у операции сравнения. По этому ставь побольше скобок, как в [3].
← →
Игорь Шевченко © (2015-06-17 10:13) [5]Феерично. Народ про ошибки компилятора на форумах спрашивает. До чего довел планету этот фигляр ПЖ!
← →
Ega23 © (2015-06-17 10:41) [6]
> и приоритет у неё выше, чем у операции сравнения
А почему он ниже должен быть?
← →
Юрий Зотов © (2015-06-17 14:15) [7]> Ega23 © (17.06.15 10:41) [6]
Чтобы скобок меньше ставить.
if x = 3 and y > 2 then ... // Синтаксическая ошибка
if (x = 3) and (y > 2) then ... // Пришлось поставить скобки
В первом варианте - смешение разнотипных операций:
- сначала арифметическая операция3 and y
- потом логическая операцияx = (3 and y )
← →
Юрий Зотов © (2015-06-17 14:21) [8]> icWasya © (17.06.15 09:37) [4]
Приоритеты операций отношения в Delphi действительно странные, но с AND все в порядке. Если операнды арифметические, то и AND считается арифметическим, если логические - то логическим, а если разнотипные - то ошибка.
← →
Юрий Зотов © (2015-06-17 17:27) [9]Хотя не исключаю, что приоритет операций отношения Вирт сделал таким умышленно (вынуждая ставить скобки и, тем самым, делая код более читаемым и менее склонным к ошибкам). Если да, то сделал он это по своему обычаю - просто и красиво.
← →
Rouse_ © (2015-06-17 17:52) [10]
> Юрий Зотов © (17.06.15 17:27) [9]
> Хотя не исключаю, что приоритет операций отношения Вирт
> сделал таким умышленно
Это умышленная шутка лишила нас нет побитового И (&) и логического И (&&).
Поэтому имея на руках, смещенный приоритет операций и приходится извращаться народу:if (x == 3) & (y > 2) {}
хотя казалось бы:if x == 3 && y > 2 {}
← →
Rouse_ © (2015-06-17 17:53) [11]Забыл смайл добавить :)
← →
Юрий Зотов © (2015-06-17 18:21) [12]> Rouse_ © (17.06.15 17:52) [10]
Не лишила. Есть и побитовый AND, есть и логический AND. Только различаются они не явно, а по контексту (по типу операндов). Возможно, для практики это и не очень удобно, но не забывай, что Вирт делал язык обучающий, а не практический. То есть, защищенный от ошибок. И с этой точки зрения вынужденная простановка скобок - очень малая плата за страховку.
← →
Ega23 © (2015-06-17 19:54) [13]
> Чтобы скобок меньше ставить.
И всё? Неубедительно.
You don"t scare me. Work on it! (c)
По-хорошему, надо разносить логические or, not, and, xor и арифметические.
Как присваивание и равенство.
← →
Rouse_ © (2015-06-17 20:34) [14]
> Юрий Зотов © (17.06.15 18:21) [12]
> но не забывай, что Вирт делал язык обучающий, а не практический.
> То есть, защищенный от ошибок.
Юрч, ну ты не перегибай - не защищенный от ошибок, а затрудняющий неопытному программисту их совершить :)
← →
Ega23 © (2015-06-17 21:01) [15]
> затрудняющий неопытному программисту их совершить :)
С удовольствием перечитал про "Выстрелить себе в ногу"
http://lurkmore.to/%D0%92%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%B8%D1%82%D1%8C_%D1%81%D0%B5%D0%B1%D0%B5_%D0%B2_%D0%BD%D0%BE%D0%B3%D1%83
← →
Германн © (2015-06-18 01:37) [16]
> ouse_ © (17.06.15 20:34) [14]
>
>
> > Юрий Зотов © (17.06.15 18:21) [12]
> > но не забывай, что Вирт делал язык обучающий, а не практический.
>
> > То есть, защищенный от ошибок.
>
> Юрч, ну ты не перегибай - не защищенный от ошибок
Защищенный Сань. Защищенный. Если уже компилятор сообщает об ошибке, значит защищённый.
Но эта защита как любая другая защита не может быть совершенной/абсолютной. Но пусть хотя такая защита!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.02.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c