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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение zub » 19.04.2017 09:53:58

Код: Выделить всё
if a > 0 and b > boolean(0) then

вполне работает))
zub
долгожитель
 
Сообщения: 1919
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Лекс Айрин » 19.04.2017 09:56:16

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


И где это неисчерпаемый источник ошибок. А ведь достаточно сменить приоритет оператора and и компилятор проглотит условие.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение скалогрыз » 19.04.2017 09:57:50

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

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

шикарное решение! так можно проверять людей на понимание что вообще происходит, и что-такое программирование :mrgreen: :mrgreen: :mrgreen:
скалогрыз
долгожитель
 
Сообщения: 1626
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Лекс Айрин » 19.04.2017 10:04:41

скалогрыз писал(а): который попробует изменить приоритет оператора. :mrgreen: :mrgreen: :mrgreen:


Не забывай, что у тех, кто работает в других языках приоритеты могут отличаться. И потом, если это делать не для галочки, а серьезно подумав, то ничего страшного не произойдет.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение скалогрыз » 19.04.2017 10:07:16

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

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

но, если не уверен - ставь скобки ;)
скалогрыз
долгожитель
 
Сообщения: 1626
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Лекс Айрин » 19.04.2017 10:16:52

скалогрыз писал(а):можно, например, поменять, законадетльно, красный и зелёный цвета... ну так... серьёзно подумав.

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

ППКС
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение Дож » 19.04.2017 20:07:09

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

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

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

Сообщение Лекс Айрин » 19.04.2017 20:39:01

Дож, не стоит забывать, что случаи ухода от совместимости с текущей кодобазой не единичны и зачастую заставляют переписывать код.... взять тот же переход на utf8. Причем, я не предлагаю взять и тупо увеличить приоритет булевых операций, а вначале посмотреть стоит ли это вообще делать. Подозреваю, что ничего страшного, а то и вообще обойдется без эксцессов.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение sign » 20.04.2017 06:51:57

скалогрыз писал(а):
Код: Выделить всё
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

И не нужно ничего сочинять, как там оно будет выглядеть.
sign
энтузиаст
 
Сообщения: 837
Зарегистрирован: 30.08.2009 09:20:53

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

Сообщение Лекс Айрин » 20.04.2017 09:15:41

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


Но это же получается косяк компилятора. Т. е. программист пытается исправить то, что компилятор должен делать сам.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение ElectroGuard » 20.04.2017 09:56:18

Это не косяк компилятора, это отличная фича компилятора, который сам находит потенциально опасные и глючные места.
ElectroGuard
новенький
 
Сообщения: 30
Зарегистрирован: 03.06.2016 12:10:22

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

Сообщение Лекс Айрин » 20.04.2017 10:45:12

ElectroGuard, это помощь, которая хуже вреда.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение olegy123 » 20.04.2017 10:49:51

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

вообще 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..
olegy123
постоялец
 
Сообщения: 225
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение Лекс Айрин » 20.04.2017 11:18:02

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


Вообще, согласно правилам паскаля boolean это отдельный тип и опираться на его реализацию не есть тру "за это бьют больно и сажают надолго" (с).
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 3240
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение ElectroGuard » 20.04.2017 18:57:20

ElectroGuard, это помощь, которая хуже вреда.

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

По теме:

if ((($dop1 == 0) && ($dop2 == 0)) || (($dop1 != 0) && ($dop2 == 0))) {
//...
}
ElectroGuard
новенький
 
Сообщения: 30
Зарегистрирован: 03.06.2016 12:10:22

Пред.След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 5

Рейтинг@Mail.ru