Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

With do

276
14 октября 2005 года
Rebbit
1.1K / / 01.08.2005
Сестра моя сейчас паскаль учит. Они структуры какраз проходили, и я увидел в примере обучающем
как они к полям обращаются. Только через

with ar do begin ... end

(там масив структур)
А чтоб через ar.field - ниразу. Студенты понятия не имеют что так вообще можно.
Я сам забыл что такое with вообще есть. Я его никогда не юзал. У меня возник вопрос.
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?
10
14 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Rebbit
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?


В Дельфи пишется код с with, ставится на нем бряк, после останова нажимается Ctrl+Alt+C.

3.7K
15 октября 2005 года
bioflash
169 / / 01.10.2005
Цитата:
Originally posted by Rebbit
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?



;-)

Разници нету: можно писать ar.field, а можно и юзать with. WITH - он рекомендується для того чтоби не писать долгие строки опирации, если есть многоуровневое вкладивание структур, кроме Pascal, такой фичи нигде нету, от нее отказались, потому что тежело следить за кодом и нету "колизий", хотя я ее всегда юзал, если в блоке кода било не меньше 3-х оспользований той самой стуктури.

;-)

10
15 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Freeman
В Дельфи пишется код с with, ставится на нем бряк


И еще. Нельзя поставить бряк на строке, не производящей объектного кода. :D

5
16 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Freeman
И еще. Нельзя поставить бряк на строке, не производящей объектного кода. :D


На самом деле она является рекомендацией компилеру для генерации кода: если слева стоит выражение, которое возвращает некоторый объект, а у этого объекта мы берём или назначаем свойства, то целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D

276
16 октября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by hardcase
На самом деле она является рекомендацией компилеру ..... целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D



Спасибо. Тепер понял. Действительно хорошая вещь. Я ее недооценил.

Для Freeman

Наверно здесь недороботка Borland :-)

Вот два кода:

Код:
type
  TRec = record
    a,b: integer;
  end;

var
  r: TRec;

begin
  with r do
  begin
    a := 3;
  end;  
end.

Тут бряк можно поставить на with r do, но нельзя на a := 3

А вот второй:
 
Код:
with r do
  begin
    a := 3;
    b := 4;
  end;

Все остальное без изменений.
Здесь бряки уже на присваивании, а на with r do не ставится.
299
16 октября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by hardcase
На самом деле она является рекомендацией компилеру для генерации кода: если слева стоит выражение, которое возвращает некоторый объект, а у этого объекта мы берём или назначаем свойства, то целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D


А мне больше нравица как это решено и придумано на СИ:P

10
17 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Rebbit
Наверно здесь недороботка Borland :-)


Действительно смешно. Давно уже не сталкивался - последний "процессорный алгоритм" писал года два назад. Я, кстати, в таких случаях сразу смотрю подстрочник ассемблера, чтобы не было сомнений.

5
18 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by Rebbit
Для Freeman

Наверно здесь недороботка Borland :-)

Код:
type
  TRec = record
    a,b: integer;
  end;

var
  r: TRec;

begin
  with r do
  begin
    a := 3;
  end;  
end.

Тут бряк можно поставить на with r do, но нельзя на a := 3



С точки зрения компилятора всё логически правильно:
в этом случае выражение with... вырождается в прстое r.a:=3 и как следствие - бряк на первой строчке.

это как если бы мы написали

 
Код:
1: MyProcedure(Param1,
2:    Param2,
3:    Param3);

тут бряк можно поставить только на (1)
276
19 октября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by hardcase
С точки зрения компилятора всё логически правильно:



Но с точки зрения лексики - все что между begin end - ето составной оператор. А тут на нем бряк не ставится. Конечно ето мелочь несущественная.

10
20 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Rebbit
Но с точки зрения лексики - все что между begin end - ето составной оператор. А тут на нем бряк не ставится.


Возникает закономерный философский вопрос: можно ли считать составной оператор с одним оператором внутри одиночным? Если у Борланда так в реализации получилось - неспроста это.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог