メソッドを古いものとしてマークしたいのですが、Delphi 5 にはそのような機能がありません。
例として、推奨されていない新しい推奨形式の作成されたメソッドを次に示します。
procedure TStormPeaksQuest.BlowHodirsHorn; overload; //obsolete
procedure TStormPeaksQuest.BlowHodirsHorn(UseProtection: Boolean); overload;
注:この架空の例では、パラメーターなしのバージョンを使用することは単純に悪いと想定しています。「保護を使用しない」ことには問題があります-良い解決策はありません。保護を使用する必要があることを好む人はいませんが、保護を使用しないことを望む人もいません。そのため、 Hodir の角笛を吹くときにプロテクションを使用するかどうかを発信者に決定させます。パラメータなしのバージョンをデフォルトで保護を使用しないままにすると、次のようになります。
procedure TStormPeaksQuest.BlowHodirsHorn;
begin
BlowHodirsHorn(False); //No protection. Bad!
end;
その場合、開発者はあらゆる種類の厄介なものの危険にさらされます。パラメーターなしのバージョンで保護を使用するように強制すると、次のようになります。
procedure TStormPeaksQuest.BlowHodirsHorn;
begin
BlowHodirsHorn(True); //Use protection; crash if there isn't any
end;
開発者が保護を受けていなかったり、所有していなかったりすると、問題が発生する可能性があります。
これで、廃止されたメソッドの名前を変更できます。
procedure TStormPeaksQuest.BlowHodirsHorn_Deprecatedd; overload; //obsolete
procedure TStormPeaksQuest.BlowHodirsHorn(UseProtection: Boolean); overload;
しかし、それはコンパイル エラーを引き起こし、人々は私を愚弄します (そして、私は彼らの泣き言を聞きたくありません)。実際のエラーではなく、 nagを取得してもらいたいです。
アサーションを追加することを考えました:
procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
Assert(false, 'TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)');
...
end;
しかし、開発者がアサーションのないバージョンを出荷しないとは保証できず、顧客にとって厄介なクラッシュが発生します。
開発者がデバッグしている場合にのみ、アサーションをスローすることを考えました:
procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
if DebugHook > 0 then
Assert(false, 'TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)');
...
end;
しかし、私は本当にクラッシュを引き起こしたくありません。
デバッガーにある場合は MessageDlg を表示することを考えました (これは私が過去に行った手法です):
procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
begin
if DebugHook > 0 then
MessageDlg('TStormPeaksQuest.BlowHodirsHorn is deprecated. Use BlowHodirsHorn(Boolean)', mtWarning, [mbOk], 0);
...
end;
しかし、それでも破壊的すぎます。また、モーダル ダイアログを表示する際にコードがスタックするという問題が発生しましたが、ダイアログ ボックスは明らかに表示されませんでした。
私は、彼らが目をえぐり、最終的にコードを変更するまで、そこに座ってしつこくする警告メッセージを期待していました。
未使用の変数を追加した場合、おそらく考えました:
procedure TStormPeaksQuest.BlowHodirsHorn; //obsolete
var
ThisMethodIsObsolete: Boolean;
begin
...
end;
誰かがコードを参照した場合にのみ、これがヒントになることを望んでいました。しかし、廃止されたメソッドを実際に使用しなくても、Delphi はヒントを表示します。
他に考えられる人はいますか?