7

個人的には、uses句ができるだけ小さい方が好きですが、多くのアプリケーションでは、(実行可能ファイルを肥大化させるという点で) 本当に大きなユニットが好きであるFormsVirtualTrees、少なくとも別のユニットが必要です。

usesでは、最終的にプロジェクトからユニットが削除されなくても、条項を削除しても違いはありますか? もしそうなら:どのように?そして:uses節の掃除はできるだけ早くするべきですか、それとも未使用のユニットが偶然見つかるまで待つことができますか?

4

5 に答える 5

14

プロジェクトの他の場所で使用されても、読みやすいクリーンなコードを生成することを除けば、大きな違いはありません。ただし、影響する可能性のある小さなことがいくつかあります。

コンパイル順序: コンパイラは、どのユニットがどのユニットを使用するかに基づいて、ユニットをコンパイルする順序を決定します。初期のユニットの uses 句からユニットを削除すると、使用されたユニットがコンパイル サイクルの後半でコンパイルされる可能性があります。大したことではないように聞こえるかもしれませんが、初期化セクションはユニットがコンパイルされたのと同じ順序で実行されることに注意してください。ただし、これは実際にはプロジェクトに大きな違いをもたらすべきではありません。

CodeInsight: コード補完ドロップダウンをプルアップすると、現在利用可能なすべてのユニットに基づいて選択肢が提供されます。使用しているユニットの数を減らすことで、フィルタリングする必要がある選択肢の数を減らすことができます。(いいえ、私は苦くはありません。なぜあなたは尋ねますか?)

于 2009-04-18T18:16:01.970 に答える
9

一般的にいいえ。ユニットがプロジェクト内のどこかで 1 回使用された場合、それが何回使用されても問題ありません。逆に、ユニットがまだどこかで少なくとも 1 回使用されている場合は、ユニットをいくつの場所から削除してもかまいません。コンパイルされたプログラムは同じように動作し、ほぼ同じサイズになります。

唯一の違いは、ユニットの初期化セクションとファイナライズ セクションの順序です。ユニットの使用順序は、これらのセクションが実行される順序に影響しますが、正確な効果は文書化されていません (したがって、初期化順序に依存しないようにしてください)。

しかし、変数リストとパラメーター リストをクリーンアップすることをお勧めするのと同じ理由で、ユニット リストをクリーンアップすることをお勧めします。必要のないものを取り除くと、保持しているコードが読みやすくなります。これは、読んでいる内容がコードの動作を正確に把握していると確信できるからです。あなたのコードがたくさんのユニットに言及しているが、それらを実際に使用していない場合、次にあなたまたは他の誰かがコードを見るとき、あなたのコードが機能を使用している場所を見つけるのに時間を費やすことになる良い変更があります.それらのユニットの。(「うーん、このコードにはGraphics、しかし、どこに何かを描いているのかわかりません。このコードにそのような責任があるとは思わなかったので、もう一度調べた方がよいでしょう。ねえ、同僚 — 一日の時間を割いて、このユニットがどこで物事を描いているか教えてくれませんか?")

于 2009-04-18T18:23:23.140 に答える
5

私はメイソンとロブに強く同意しません。それは違いを生みます!

依存関係の削減。

メイソンとロブが説明したように、違いは現在のプロジェクトにはありません。代わりに、違いは NEXT プロジェクトにあります。不要な (サーバー) ユニットを (クライアント) ユニットに保持すると、別のプロジェクトでそのクライアント ユニットを使用すると、依存関係も取り込まれます。引き込まれたばかりのユニットに正当なクライアント ユニットが他にない場合は、肥大化が追加されています。

于 2009-04-20T09:32:31.697 に答える
5

はい、見落とされがちなトリックが 1 つあります。初期化/ファイナライズコードがある
場合は、ユニット内で呼び出されるコードがなくても常に実行されます (ユニットは常に含まれています)。あなたはそうしないと思うでしょうが)。そのため、プロジェクトで不要なユニットを削除すると、顕著な違いが生じる可能性があります。

注目に値するもう 1 つの点は、2 つの異なるユニットに同名語があり、ユニット名を前に付けずにそれらを呼び出すときに、ユニットの順序によってコンパイラがどの識別子を選択するかが決まることです (これは常にベスト プラクティスとして実行する必要があります)

それ以外では、メイソンとロブが指摘したように、ユニットの順序は、それらがコンパイルされる順序と初期化/ファイナライズの順序に影響を与えます。

コードの洞察に関しては、不要なユニットを削除すると高速になりますが、プロジェクトで使用されているすべてのユニットが別のユニットを介して暗黙的に追加されたときに検索パスに頼るのではなく、プロジェクトで使用されているすべてのユニットが明示的に dpr に追加されている場合もグローバルになります。単位。

于 2009-04-18T19:47:02.283 に答える
4

無料の Pascal アナライザーを使用して、コード内の未使用のユニットを見つけます。

于 2009-04-18T19:19:50.337 に答える