Страница 4 из 10

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 09:53:58
zub
Код: Выделить всё
if a > 0 and b > boolean(0) then

вполне работает))

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 09:56:16
Лекс Айрин
скалогрыз писал(а):И кстати, попускать слюни на Си/Си++, где такие вещи можно! (т.к. boolean типа там нет... ну или не было, но по факту, им не очень руководствуются)


И где это неисчерпаемый источник ошибок. А ведь достаточно сменить приоритет оператора and и компилятор проглотит условие.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 09:57:50
скалогрыз
Лекс Айрин писал(а):И где это неисчерпаемый источник ошибок. А ведь достаточно сменить приоритет оператора and и компилятор проглотит условие.

я не завидую судьбе того шутника, который попробует изменить приоритет оператора. :mrgreen: :mrgreen: :mrgreen:
zub писал(а):вполне работает))

шикарное решение! так можно проверять людей на понимание что вообще происходит, и что-такое программирование :mrgreen: :mrgreen: :mrgreen:

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 10:04:41
Лекс Айрин
скалогрыз писал(а): который попробует изменить приоритет оператора. :mrgreen: :mrgreen: :mrgreen:


Не забывай, что у тех, кто работает в других языках приоритеты могут отличаться. И потом, если это делать не для галочки, а серьезно подумав, то ничего страшного не произойдет.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 10:07:16
скалогрыз
Лекс Айрин писал(а):Не забывай, что у тех, кто работает в других языках приоритеты могут отличаться. И потом, если это делать не для галочки, а серьезно подумав, то ничего страшного не произойдет.

ничего страшного не произойдёт - конечно.
можно, например, поменять, законадетльно, красный и зелёный цвета... ну так... серьёзно подумав.
А на утро посмотреть что будет происходить... :mrgreen:

но, если не уверен - ставь скобки ;)

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 10:16:52
Лекс Айрин
скалогрыз писал(а):можно, например, поменять, законадетльно, красный и зелёный цвета... ну так... серьёзно подумав.

Ну, если честно, то законодательно разрешено переходить на красный цвет... если он для машин... Да и, текущая ситуация со светофорами тоже не пример для подражания. На перекрестках она периодически вызывает ситуации когда машины прут перед людьми. Один такой перекресток около работы 2-3 раза в год собирает стекло. Там переход это целый квест. Так что... я добавил бы во ВСЕ светофоры сигнал "зеленый только для поворачивающих машин".
скалогрыз писал(а):но, если не уверен - ставь скобки ;)

ППКС

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 20:07:09
Дож
Не забывай, что у тех, кто работает в других языках приоритеты могут отличаться. И потом, если это делать не для галочки, а серьезно подумав, то ничего страшного не произойдет.

Как раз таки произойдёт, все выражения вида "x and mask = 0" в существующих исходниках при переходе на новую версию языка сломаются, и это очень плохо (напомню, что fpc -- это не будущий, а существующей и развивающийся язык, одной из целей которого является совместимость с существующей кодобазой).

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 19.04.2017 20:39:01
Лекс Айрин
Дож, не стоит забывать, что случаи ухода от совместимости с текущей кодобазой не единичны и зачастую заставляют переписывать код.... взять тот же переход на utf8. Причем, я не предлагаю взять и тупо увеличить приоритет булевых операций, а вначале посмотреть стоит ли это вообще делать. Подозреваю, что ничего страшного, а то и вообще обойдется без эксцессов.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 06:51:57
sign
скалогрыз писал(а):
Код: Выделить всё
var
  a,b : integer;
begin
  if a > 0 and b > 0 then

внимательно смотрим список приоритетов
видим - что у оператора "and" приоритет выше, чем у оператора сравнивания, по-этому выражение выше, оператор видит, как
Код: Выделить всё
var
  a,b : integer;
begin
  if (a > (0 and b)) > 0 then

т.к. и 0 и b это тип INTEGER, то результат его работы, это INTEGER.
и получаем выражение:
Код: Выделить всё
  if (a > NNN) > 0 then

,где NNN - это некое число.

Не, не "внимательно смотрим", а читаем ошибку:

Изображение
Потому, только вот так:
Код: Выделить всё
var
  a,b : integer;
begin
  if (a > 0) and (b > 0) then

И не нужно ничего сочинять, как там оно будет выглядеть.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 09:15:41
Лекс Айрин
sign писал(а):И не нужно ничего сочинять, как там оно будет выглядеть.


Но это же получается косяк компилятора. Т. е. программист пытается исправить то, что компилятор должен делать сам.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 09:56:18
ElectroGuard
Это не косяк компилятора, это отличная фича компилятора, который сам находит потенциально опасные и глючные места.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 10:45:12
Лекс Айрин
ElectroGuard, это помощь, которая хуже вреда.

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 10:49:51
olegy123
Лекс Айрин писал(а):Но это же получается косяк компилятора. Т. е. программист пытается исправить то, что компилятор должен делать сам.

вообще boolean это тип integer , его ввели для облечении программисту или читающего его программу..

не будете же делать так:
Код: Выделить всё
var
visible:integer;
..
begin
  visible:=0;
...
  visible:=checkbox.visible and checkbox2.visible and  checkbox2.visible;
...
  visible:=visible xor $FFFFFFFF;
..
if visible then
  format_disk_c.run();

и потом разбираться что там в if visible then ноль или не ноль.. а если кто то решил что
Код: Выделить всё
const
MY_VISIBLE=37261;
MY_NOT_VISIBLE=23842;

вот и думай тру или не тру..

а кто кодил биты портов микроконтроллеров тот меня прекрасно поймет..

Добавлено спустя 13 минут 4 секунды:
А кто то решит что ему место мало - и загонит фалжки в тип int64 ..
и потом Hex-и.. выясняй какие биты включены, а какие выключенные.. все нужно это держать в голове..
оперируй 9223372036854775807 числами, переводи в шестнадцатеричное $7FFFFFFFFFFFFFFF, а потом в биты 00011001001000010000110000010010101000010000110..

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 11:18:02
Лекс Айрин
olegy123 писал(а):вообще boolean это тип integer , его ввели для облечении программисту или читающего его программу..


Вообще, согласно правилам паскаля boolean это отдельный тип и опираться на его реализацию не есть тру "за это бьют больно и сажают надолго" (с).

Re: В паскале остро не хватает операторов &, &&, | и ||

СообщениеДобавлено: 20.04.2017 18:57:20
ElectroGuard
ElectroGuard, это помощь, которая хуже вреда.

Это отличная помощь. Это одно из того, что отличает паскаль от недо-языков типа плюсов. Зачем мне делать работу за компилятор? Думать о чем-то. Пусть он за меня думает.

По теме:

if ((($dop1 == 0) && ($dop2 == 0)) || (($dop1 != 0) && ($dop2 == 0))) {
//...
}