Область действия ЛП после добавления её в TList

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

sts писал(а):это мелочь, главная проблема with в том что изменение кода в совсем другом месте может привести к "мутации" кода в with, например

Суть твоего примера - точно такая же.
Поэтому - with - зло!
sts
энтузиаст
Сообщения: 549
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

alexs писал(а):Суть твоего примера - точно такая же.


эээ, это к чему?
да, суть таже - неконтролируемое перекрытие видимости переменных - случай хуже.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

sts, это все относительно. Кому то хуже одно, кому-то другое... лично мне оба варианта одинаково плохи.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

with - это всего-лишь смена контекста (по замыслу великого) для работы с записями (record).
При использовании внутри классов with становится источником ошибок по нескольким причинам:
1. Злоупотребление - когда используется к месту и не к месту (тут и без классов голову сломаешь)
2. Не понимая порядка значимости при расчете области видимости - тут уже ничего не поможешь, некоторым приходится ставить скобки в любом выражении, сложнее or|and - тут уже либо перестраховка, либо ппц.

В целом - использование данной конструкции редко бывает обосновано при написании "чистого" кода. Зато при прототипировании позволяет решить сложную задачу в одном методе и недопустить ошибок, потому что большой метод с однозначными свойствами, пускай и небрежно написанный, по поределению имеет меньше ошибок (его легче проверить, в нем нет обращения к нескольким сложенным объектам).
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Кстати сейчас глянул последние комиты лазаря, там довольно много с формулировкой
>>lcl: less with-blocks for FPC 3.1.1
убирают with. с чем это связано?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

zub, видимо как раз с уже указанными причинами. А может, и вообще выпилят его.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Лекс Айрин писал(а):zub, видимо как раз с уже указанными причинами.

одна чудо-фича, столкнулась с другой.

в fpc 3.1.1 добавляют хелперы к TRect-у, добавляя property Width, Height. Всё ради делфи совместимости.

И раньше, где код был написан как:

Код: Выделить всё

procedure TSomeControl.Method;
var
  r: TRect;
begin
  with r do
    Right:=Width-... // подразумевается, что Width принадлежит TSomeControl

перестанет (правильно) работать , т.к. теперь у самого TRect есть Width.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

скалогрыз, понятно.
Kitayets
постоялец
Сообщения: 174
Зарегистрирован: 05.05.2010 21:15:24

Сообщение Kitayets »

Да и вообще ходят слухи (вроде gunsmoker такое писал), что из delphi этот оператор (with) хотят дропнуть. так что лучше уже привыкать без него программы писать.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Kitayets писал(а):Да и вообще ходят слухи (вроде gunsmoker такое писал), что из delphi этот оператор (with) хотят дропнуть. так что лучше уже привыкать без него программы писать.

это наврят ли.
синтаксис сравнительно легко добавить в язык, а вот убрать практически невозможно (ибо обратная совместимость!)
Если убрать with из делфи, то это уже не делфи... а делфи2 - другой язык, каким-то чудом (и какими-то местами) совместимый с Делфи.

Т.е. как только какая-нибудь программа перестанет компилироватся из-за осутствия "with" в языке, автор программы начнёт смотреть в сторону FPC.
Ответить