LINUX.ORG.RU

> Правда или очередной слух?

нет, не правда. в оригинале "ходит слух, что следует избегать паскаля". а вот это - правда.

> Аргументы...

ugu, щазз..

// wbr

klalafuda ★☆☆
()

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

point.x = square.left + square.width point.y = square.top + square.height

А с ним будет получаться каша вроде with point, square do begin x = left + width; y = top + height; end;

2 строчки это конечно не страшно, но когда их несколько десятков, несколько вложенных with-ов, да ещё и возникают конфликты имён, это уже страшно.

Кажется, Вирт в новых версиях паскаля отказался от этого оператора, АФАИК.

У меня на одном из экзаменов была задача, что-то вроде with a, b, c do foo = bar; dd = zz; end;

где некоторые поля были в типах записей a, b, c, некоторые как обычные переменные, и конечно же всё перекрывалось. Чтобы разобраться, в чём дело, мне потребовались минуты 3. Разобраться в коде типа

b.foo = bar; c.dd = a.zz

намного проще, не так ли?

Ещё одним аргументом может служить отсутствие аналога в C.

anonymous
()
Ответ на: комментарий от anonymous

> Аргументом его использования может быть только лень, если его не использовать, то будет простой и понятный код типа

obj_array[ index_map[ i ] ].first_rectangle.upper_left.x := rectangle_array[ rectangle_index_map[ j ] ].left + shift_values[ k ].horizontal

И дальше в том же духе.

> намного проще, не так ли?

В таком простейшем случае - да.

> аргументом может служить отсутствие аналога в C.

"Отличный" аргумент! Аналоги есть в LISP, там ими тоже не пользоваться? А lambda из функциональных языков тоже выкинуть, за неимением аналогов в C?

В общем, пользоваться можно, но, как и во всем, нужно иметь голову на плечах и чувство меры.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

> obj_array[ index_map[ i ] ].first_rectangle.upper_left.x := rectangle_array[ rectangle_index_map[ j ] ].left + shift_values[ k ].horizontal

И что? По мне, чересчур много пробелов и чересчур информативные названия, но в общем нормально. Чем тут может with помочь?

> "Отличный" аргумент! Аналоги есть в LISP, там ими тоже не пользоваться? А lambda из функциональных языков тоже выкинуть, за неимением аналогов в C?

Я думаю, что паскаль сравнивать с Си более корректно, чем с лиспом, у них более общие парадигмы.

А аргумент нормальный, C - один из самых практичных языков (в отличие от академического паскаля), и, если бы это было бы необходимо, такой оператор в нём бы был. Раз его в нём нет, в реальной жизни без него вполне можно обойтись.

>В общем, пользоваться можно, но, как и во всем, нужно иметь голову на плечах и чувство меры.

Безусловно. Так же как и goto.

anonymous
()
Ответ на: комментарий от anonymous

> Раз его в нём нет, в реальной жизни без него вполне можно обойтись.

Макросом.

А в Паскале оператор with иногда всё-таки служит повышению наглядности 
программы:

with Pointer do
begin
   X:=fx(t);
   Y:=fy(t);
   Z:=fz(t);
end;{with}

Впрочем, на любителя. Я, например, когда писал программы на паскале,
использовал with очень редко, ибо чревато ошибками и нужен, в
сущности, из-за отсутствия макросов.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Упс, давно не имел дела с Паскалем. Pointer -- это нетипизированный указатель, зарезервированное слово, какое-нибудь другое имя надо использовать.

anonymous_incognito ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.