フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: withの使い方
iwatenoryu
メンバー
投稿数: 11
withの使い方
on: 2013/10/03 17:35 Thu

withの使い方について質問です。

with create(add) do begin
  ~
end

という使い方を目にしたのですが、これは昔から使われてた利用方法なのでしょうか?

DELPHI5を長年利用してて、XE5へ移行を始めたところですが、
上記のような記述が出てきて、どう理解すればよいのかというところです。
オブジェクトパスカルの文法では、下記のように記載されてます。
フィールドの参照などはなじみがありますが、
これ以外にもwithの使い方があるということなのでしょうか?

【オブジェクトパスカルの文法より】
with 文は,レコードのフィールドやオブジェクトのフィールド,プロパティ,およびメソッドを参
照するための簡便な方法です

DEKO
管理者
投稿数: 2693
Re: withの使い方
on: 2013/10/03 18:10 Thu

引用 iwatenoryu on 2013/10/03 17:35 Thu
これは昔から使われてた利用方法なのでしょうか?

 
結構昔から使われていますね。将来的には with 文の使用が非推奨となるようなのであまり使わない方がいいのかもしれませんが。

コンストラクタ Create は宣言だけ見ると戻り値がないように見えますが、実際には生成されたオブジェクトが返ります。なので、

with TStringList.Create do
begin
Add('ABC');
Add('DEF');
SaveToFile('TEST.TXT');
Free;
end;

 
このようなコードが通る事になります。

SL := TStringList.Create;
try
SL.Add('ABC');
SL.Add('DEF');
SL.SaveToFile('TEST.TXT');
finally
SL.Free;
end;

 
コンストラクタに戻り値があるからこそ、このようなコードになるのだと考えれば納得して頂けるかと。

[with 文 (DocWiki)]
http://docwiki.embarcadero.com/RADStudio/ja/%E5%AE%A3%E8%A8%80%E3%81%A8%E6%96%87#with_.E6.96.87

[コンストラクタ (DocWiki)]
http://docwiki.embarcadero.com/RADStudio/ja/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89#.E3.82.B3.E3.83.B3.E3.82.B9.E3.83.88.E3.83.A9.E3.82.AF.E3.82.BF

iwatenoryu
メンバー
投稿数: 11
Re: withの使い方
on: 2013/10/04 09:11 Fri

回答ありがとうございます。

with文を使用しないようにしようと、with文で検索して
対応しようとしてたらこのような記載があって困ってた
というところです。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.022 sec.