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

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

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

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

Сообщение alexs » 10.11.2015 14:16:28

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

Суть твоего примера - точно такая же.
Поэтому - with - зло!
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение sts » 10.11.2015 14:39:02

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


эээ, это к чему?
да, суть таже - неконтролируемое перекрытие видимости переменных - случай хуже.
sts
постоялец
 
Сообщения: 452
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение Лекс Айрин » 10.11.2015 15:07:08

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

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

Сообщение wavebvg » 11.11.2015 00:38:06

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

В целом - использование данной конструкции редко бывает обосновано при написании "чистого" кода. Зато при прототипировании позволяет решить сложную задачу в одном методе и недопустить ошибок, потому что большой метод с однозначными свойствами, пускай и небрежно написанный, по поределению имеет меньше ошибок (его легче проверить, в нем нет обращения к нескольким сложенным объектам).
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

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

Сообщение zub » 11.11.2015 19:19:05

Кстати сейчас глянул последние комиты лазаря, там довольно много с формулировкой
>>lcl: less with-blocks for FPC 3.1.1
убирают with. с чем это связано?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Лекс Айрин » 11.11.2015 19:55:01

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

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

Сообщение скалогрыз » 11.11.2015 20:56:24

Лекс Айрин писал(а):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.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

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

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

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

Сообщение Kitayets » 12.11.2015 16:08:54

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

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

Сообщение скалогрыз » 12.11.2015 17:33:40

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

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

Т.е. как только какая-нибудь программа перестанет компилироватся из-за осутствия "with" в языке, автор программы начнёт смотреть в сторону FPC.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Пред.

Вернуться в Free Pascal Compiler

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru
cron