With do
как они к полям обращаются. Только через
with ar do begin ... end
(там масив структур)
А чтоб через ar.field - ниразу. Студенты понятия не имеют что так вообще можно.
Я сам забыл что такое with вообще есть. Я его никогда не юзал. У меня возник вопрос.
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?
В Дельфи пишется код с with, ставится на нем бряк, после останова нажимается Ctrl+Alt+C.
Етот with вообще както на генерируемый код влияет, или просто для того чтобы меньше текста набирать ?
;-)
Разници нету: можно писать ar.field, а можно и юзать with. WITH - он рекомендується для того чтоби не писать долгие строки опирации, если есть многоуровневое вкладивание структур, кроме Pascal, такой фичи нигде нету, от нее отказались, потому что тежело следить за кодом и нету "колизий", хотя я ее всегда юзал, если в блоке кода било не меньше 3-х оспользований той самой стуктури.
;-)
В Дельфи пишется код с with, ставится на нем бряк
И еще. Нельзя поставить бряк на строке, не производящей объектного кода. :D
И еще. Нельзя поставить бряк на строке, не производящей объектного кода. :D
На самом деле она является рекомендацией компилеру для генерации кода: если слева стоит выражение, которое возвращает некоторый объект, а у этого объекта мы берём или назначаем свойства, то целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D
На самом деле она является рекомендацией компилеру ..... целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D
Спасибо. Тепер понял. Действительно хорошая вещь. Я ее недооценил.
Для Freeman
Наверно здесь недороботка Borland :-)
Вот два кода:
TRec = record
a,b: integer;
end;
var
r: TRec;
begin
with r do
begin
a := 3;
end;
end.
Тут бряк можно поставить на with r do, но нельзя на a := 3
А вот второй:
begin
a := 3;
b := 4;
end;
Все остальное без изменений.
Здесь бряки уже на присваивании, а на with r do не ставится.
На самом деле она является рекомендацией компилеру для генерации кода: если слева стоит выражение, которое возвращает некоторый объект, а у этого объекта мы берём или назначаем свойства, то целесообразно завернуть всё это в with - do.
В этом случае компилер создаст временную ссылку, с которой и будут производится действя.
Оптимизация!:D
А мне больше нравица как это решено и придумано на СИ:P
Наверно здесь недороботка Borland :-)
Действительно смешно. Давно уже не сталкивался - последний "процессорный алгоритм" писал года два назад. Я, кстати, в таких случаях сразу смотрю подстрочник ассемблера, чтобы не было сомнений.
Для Freeman
Наверно здесь недороботка Borland :-)
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 и как следствие - бряк на первой строчке.
это как если бы мы написали
2: Param2,
3: Param3);
тут бряк можно поставить только на (1)
С точки зрения компилятора всё логически правильно:
Но с точки зрения лексики - все что между begin end - ето составной оператор. А тут на нем бряк не ставится. Конечно ето мелочь несущественная.
Но с точки зрения лексики - все что между begin end - ето составной оператор. А тут на нем бряк не ставится.
Возникает закономерный философский вопрос: можно ли считать составной оператор с одним оператором внутри одиночным? Если у Борланда так в реализации получилось - неспроста это.