Delphi: Result への代入で、DCC ヒントが出るコードと出ないコードがある
ちょっとした動作についてのお話なんですけどね。
変数の型が違うことで、ヒントが出るコードと出ないコードがあったんですよ。
まずヒントが出ないコード。
[code lang=’delphi’]
function TForm1.f: string;
begin
Result := ‘0’;
Result := ‘1’;
end;
[/code]
続いてヒントが出るコード。
[code lang=’delphi’]
function TForm1.f: Integer;
begin
Result := 0;
Result := 1;
end;
[/code]
違いは、戻り値の型だけ。
後者は「’TFrorm1.f’ に代入された値は使われていません」DCC ヒントが3行目(Result := 0;)に対して出ます。
確かに代入した「0」は使われていませんわ。
どちらも複数回 Result に対して値を代入していますので、両方にヒントが出るのなら納得もできるのですが・・
何となく微妙な気持ちが消えません。
*
2010/08/03 追記
月夜見命さんのコメントで、値型と参照型の違いでは無いかとのこと。
下記のコードで試してみました。
[code lang=’delphi’] typeTMyClass = class
public
i: Integer;
end;
implementation
function TForm1.f: string;
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass.i := 10;
Result := IntToStr(MyClass.i);
Result := IntToStr(MyClass.i);
end;
[/code]
確かにクラス型で参照させると、やはりヒントは出ないようです。
と言うことは、内部ででも参照が入るコードについてはヒントを出さない仕様と考えても良さそうでしょうかね。
月夜見命さん、ありがとうございます。
10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント
あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?
私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。
それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。
しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。
そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。
・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!
という方は今すぐ無料でダウンロードしてください。
期間限定で、無料公開しています。
※登録後に表示される利用条件に沿ってご利用ください
.NET視点から見ると、値型と参照型の違い…?
ネイティブDelphiは詳しくないです(´・ω・`)
>月夜見命さん
コメントありがとうございます。
型の違いは可能性高いですね。
検証してみます!
Delphi 2007上でCPUウィンドウで生成コードを確認してみましたが、整数の代入はオプティマイザが不要な代入を削除して最後の代入のコードのみが生成されているのに対し、文字列の代入はLStrAsgというRTLの呼び出しで、オプティマイザが副作用の発生の可能性からコードの削除を行えないようです。これがヒントの有無の差になっているのではないでしょうか。
>福士さん
コメントありがとうございます&気づきませんでしたすみません
CPUウィンドウでまで検証されたんですね!すばらしい!
ヒントの有無が、RTLの呼び出しに関係すると言うのはすごく納得のいく内容です。
ありがとうございます。