Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вернуть boolean из сравнения / 15 сообщений из 15, страница 1 из 1
20.08.2021, 07:15
    #40092097
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
Законно ли так использовать boolean() при любом сравнении или могут быть подводные камни?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TSelct = (slOne, slTwo);
...
procedure myProc();
var
  slt: TSelct;
begin
  slt := slOne; 
  lab1.Visible := boolean(slt = slOne);
...
Рейтинг: 0 / 0
20.08.2021, 07:33
    #40092098
iStrannik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
Законно для условных операторов только зачем?
Масло масленое, можно сразу написать
lab1.Visible := slt = slOne;

Обертки вроде Boolean() и т.д. нужны когда нужно явно компилятору указать
о приведении к определенному типу.
...
Рейтинг: 0 / 0
20.08.2021, 12:03
    #40092192
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
antox
Законно ли так использовать boolean() при любом сравнении или могут быть подводные камни?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TSelct = (slOne, slTwo);
...
procedure myProc();
var
  slt: TSelct;
begin
  slt := slOne; 
  lab1.Visible := boolean(slt = slOne);

не, не, не!
надо так:
Код: pascal
1.
lab1.Visible := not LongBool(slt);


зы: индусы и не такое пишут...
...
Рейтинг: 0 / 0
20.08.2021, 13:15
    #40092220
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
[quot Мимопроходящий#22362166]
antox
Законно ли так использовать boolean() при любом сравнении или могут быть подводные камни?
Код: pascal
1.
lab1.Visible := not LongBool(slt);


зы: индусы и не такое пишут...


Код: pascal
1.
2.
3.
4.
5.
6.
if slt = slOne then begin
  lab1.Visible := true;
end
else begin
  lab1.Visible := false;
end;
...
Рейтинг: 0 / 0
20.08.2021, 13:31
    #40092232
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
antox
Законно ли так использовать boolean() при любом сравнении или могут быть подводные камни?


Очень опасно: можно попасть в патологическую рекурсию:

Код: pascal
1.
  lab1.Visible := boolean(......boolean(slt = slOne).....);


Зачем писать приведение к типу, если выражение и так имеет требуемый тип?
...
Рейтинг: 0 / 0
20.08.2021, 13:33
    #40092234
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
20.08.2021 13:31, x1ca4064 пишет:
> Зачем писать приведение к типу, если выражение и так имеет требуемый тип?

ну, во-первых, это красиво.. ©
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.08.2021, 13:33
    #40092235
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
[quot DimaBr#22362210]
Мимопроходящий
пропущено...


Код: pascal
1.
2.
3.
4.
5.
6.
if slt = slOne then begin
  lab1.Visible := true;
end
else begin
  lab1.Visible := false;
end;


Код: pascal
1.
2.
3.
4.
5.
6.
if (slt = slOne)=true then begin
  lab1.Visible := true;
end
else begin
  lab1.Visible := false;
end;

Поправил чуть))
...
Рейтинг: 0 / 0
20.08.2021, 13:36
    #40092237
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
20.08.2021 13:33, Barmaley57 пишет:
> Поправил чуть))

привести к типу Boolean забыл
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.08.2021, 13:37
    #40092239
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
Barmaley57,

Код: pascal
1.
2.
3.
4.
5.
6.
if boolean((slt = slOne))=true then begin
  lab1.Visible := boolean(true);
end
else begin
  lab1.Visible := boolean(false);
end;



Никаких полумер!
...
Рейтинг: 0 / 0
20.08.2021, 13:43
    #40092242
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
antox
Код: pascal
1.
2.
type
  TSelct = (slOne = Integer(true), slTwo = Integer(false));


Проще же.
...
Рейтинг: 0 / 0
20.08.2021, 13:50
    #40092243
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
зануда!
...
Рейтинг: 0 / 0
20.08.2021, 14:01
    #40092247
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
rgreat
Barmaley57,

Код: pascal
1.
2.
3.
4.
5.
6.
if boolean((slt = slOne))=true then begin
  lab1.Visible := boolean(true);
end
else begin
  lab1.Visible := boolean(false);
end;



Никаких полумер!

Нееее, не так.
Код: pascal
1.
2.
3.
4.
5.
6.
if boolean((slt = slOne))=true then begin
  lab1.Visible := boolean(true);
end
else if boolean((slt = slOne))=false then begin
  lab1.Visible := boolean(false);
end;
...
Рейтинг: 0 / 0
21.08.2021, 03:18
    #40092386
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
Блин, сначала написал без boolean, появилась ошибка (видимо что-то не то написал) подумал, что так низя. Спасибо.
...
Рейтинг: 0 / 0
21.08.2021, 03:29
    #40092388
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
Barmaley57
rgreat
Barmaley57,

Код: pascal
1.
2.
3.
4.
5.
6.
if boolean((slt = slOne))=true then begin
  lab1.Visible := boolean(true);
end
else begin
  lab1.Visible := boolean(false);
end;




Никаких полумер!

Нееее, не так.
Код: pascal
1.
2.
3.
4.
5.
6.
if boolean((slt = slOne))=true then begin
  lab1.Visible := boolean(true);
end
else if boolean((slt = slOne))=false then begin
  lab1.Visible := boolean(false);
end;



Вот самый надежный вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
case Boolean( slt = slOne ) of
  True: lab1.Visible := True;
  False: lab1.Visible := False;
  else
    lab1.Visible := Boolean( slt = slOne );
end;
...
Рейтинг: 0 / 0
21.08.2021, 03:47
    #40092391
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть boolean из сравнения
YuRock
Вот самый надежный вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
case Boolean( slt = slOne ) of
  True: lab1.Visible := True;
  False: lab1.Visible := False;
  else
    lab1.Visible := Boolean( slt = slOne );
end;

Тут напрашивается рекурсия...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вернуть boolean из сравнения / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]