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

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

СообщениеДобавлено: 17.04.2017 12:41:24
Cheb
В паскале остро не хватает операторов &, | (однозначно побитовые) и &&, || (однозначно булевы)
Почему: and и or убоги тем, что не позволяют писать логические выражения без костылей-скобок.
Ежели бы добавить хотя бы && и ||, которые чётко скажут парсеру: boolean or GTFO
то можно было бы уменьшить количество геморроя.

if (a > 0) and (b > 0) then
супротив
if a > 0 && b > 0 then

Тем более, что символы & и |, ЕМНИП, вообще в языке не используются.

- что думаете? :mrgreen:

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

СообщениеДобавлено: 17.04.2017 12:51:31
Awkward
Во-первых, амперсенд & используется.
Во-вторых, думаю, непрактичная идея. То, что есть, на мой личный взгляд даже удобнее. по крайней мере, я не путаюсь, где надо одиночный знак, а где двойной ставить.

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

СообщениеДобавлено: 17.04.2017 13:12:02
vitaly_l
Cheb писал(а):что думаете?

Переопределите операторы, напишите к ним обработчик и...
"мучайтесь" :wink: с "новыми" операторами &,&& и |, ||.
:roll: Никто же в Паскале не запрещает переопределить все операторы?

PS: программисты совсем обленились... скобочки им лень поставить. :cry: :evil:

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

СообщениеДобавлено: 17.04.2017 13:44:30
zub
& используется.
Раньше тоже "мучился" потом привык. Сейчас считаю (a > 0) and (b > 0) лучше чем a > 0 && b > 0

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

СообщениеДобавлено: 17.04.2017 14:58:59
alexs
Cheb
В нормальных человеческих языках нет таких символов. А паскаль должен быть похож на человеческий язык.

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

СообщениеДобавлено: 17.04.2017 15:22:04
Дож
На самом деле если бы изначально у операторов and и or был самый низкий приоритет, жилось гораздо лучше. Мне кажется, что какой-нибудь MODESWITCH, занижающий приоритет, был бы хорошим решением.

a > 0 && b > 0 гораздо лучше, чем (a > 0) and (b > 0), но если тупо ввести вторую разновидность оператора and, просто с другим приоритетом, то это излишне усложнит язык.

В нормальных человеческих языках нет таких символов. А паскаль должен быть похож на человеческий язык.


Согласен! Нужно пойти дальше:
Код: Выделить всё
// не по-человечески:
P = ^T;
comment по-человечески
P is pointer to T end of statement

// не по-человечески:
a := @b;
comment по-человечески:
a assign from address of b end of statement

// не по-человечески:
f(a + b);
comment по-человечески:
call f with parameter a plus b end of statement


Паскаль должен быть похож на человеческий язык!

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

СообщениеДобавлено: 17.04.2017 16:12:17
vada
Этак можно дойти и до того что код в комментариях { } писать захотят!
ЗЫ. Некоторые пытаются завышать линию талии. Вот с этим мы будем нещадно бороться! (с)

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

СообщениеДобавлено: 17.04.2017 18:25:38
java73
и LINQ )))))))

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

СообщениеДобавлено: 17.04.2017 18:36:48
скалогрыз
Cheb писал(а):В паскале остро не хватает операторов &, | (однозначно побитовые) и &&, || (однозначно булевы)
Почему: and и or убоги тем, что не позволяют писать логические выражения без костылей-скобок.

- что думаете? :mrgreen:

мне кажется, факт того, что язык заставляет тебя расставить скобки, в итоге играет тебе же в плюс. ;)

на самом деле, можно предположить, что в язык добавлены | и & - однозначно побитовые, а "or" и "and" оставлены для однозначно булевых.

НО если, такие операторы добавлены, ТО тебе нужно определить с каким приоритетом они идут:
т.е. выражение a or b | c это:
Код: Выделить всё
(a or b) | с

или
Код: Выделить всё
a or (b | c)

В отличии от С-образных языков, паскаль наслаждется всего 5ью уровнями приоритетов операторов. (если кто хочет, то можете погуглить "period table of perl operators").

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

я часто вижу выражения, вроде:
(a * b)+c
люди делают это для себя. Они прекрасно помнят из школьного курса что умножение идёт вперёд (и компилятор тоже это понмнит), но тем не менее пишут же... для наглядности.

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

СообщениеДобавлено: 17.04.2017 18:50:59
Дож
В отличии от С-образных языков, паскаль наслаждется всего 5ью уровнями приоритетов операторов.

«Наслаждается»? Звучит так, будто 1 уровень приоритетов был бы абсолютным наслаждением :)

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

Вывод ошибочен, при использовании С++ многие не используют скобок (я, например) и ног отстрелить не боятся.

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

СообщениеДобавлено: 17.04.2017 18:56:04
скалогрыз
Дож писал(а):«Наслаждается»? Звучит так, будто 1 уровень приоритетов был бы абсолютным наслаждением :)

ну... в ассемблере всего один уровень. (лол, т.к. одна операция)
я чё-то не припомню, ни одного ассемблериста, который бы бегал и рвал на себе волосы, стеная "хочу два уровня операций"
:mrgreen: :mrgreen: :mrgreen:

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

не бояться <> не отстрелить
;)
но всем и всегда очень легко говорить "за себя". Проблемы выскакивают при работе в команде, или при поддержке старого/чужого кода.

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

СообщениеДобавлено: 17.04.2017 19:15:52
vitaly_l
скалогрыз писал(а):писать программу нужно не до того момента, когда в неё ничего уже нельзя добавить, а до того момента, когда из неё ничего нельзя убрать

У художников, наивысшей формой искусства считается "чистый лист". :roll: Судя по вышеприведённому утверждению - чистый лист является идеальной программой, постольку поскольку оттуда уже нечего убрать! :wink:

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

СообщениеДобавлено: 17.04.2017 19:21:24
Дож
ну... в ассемблере всего один уровень. (лол, т.к. одна операция)

И как там, здорово писать программы на ассемблере? Как там у него обстоят дела по части отстрела ног, читабельности, поддержки старого кода, работы в команде? Надо полагать из контекста, по всем параметрам выигрывает у страшного и ужасного C++, да?

но всем и всегда очень легко говорить "за себя". Проблемы выскакивают при работе в команде, или при поддержке старого/чужого кода.

Что скажете за себя? 5 уровней приоритетов — это идеал или нет? 1 уровень лучше?

Можно же не останавливаться на 1 уровне, а пойти и ещё дальше: ошибкой компиляции обязать везде ставить скобки! Например, для выражений вида a * b + c выдать неаккуратному программисту «Fatal Error: Ambiguous operators order.»

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

СообщениеДобавлено: 17.04.2017 19:23:35
vitaly_l
Дож писал(а):обязать везде ставить скобки! Например, для выражений вида a * b + c выдать неаккуратному программисту «Fatal Error

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

ИМХО, ЛОЛ

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

СообщениеДобавлено: 17.04.2017 19:38:49
Лекс Айрин
vitaly_l писал(а):У художников, наивысшей формой искусства считается "чистый лист".


Это устаревшее мнение... наивысшей формой искусства считается точка на чистом листе.