このトピックに関するいくつかのSOスレッドを読んだ後、グローバル変数/シングルトンが悪い理由を思いついた。
- グローバル状態の関数を理解することはますます難しくなり、コードが大きくなるにつれて、ますます多くの関数がそのグローバル状態を変更します。
- ユニットテストが難しくなります。
- 依存関係を非表示にします。
- グローバル変数が実際には単一のオブジェクト/変数ではないことがいつか判明した場合は、コードを書き直す必要があります。
C ++でゲームを作りたいのですが、ゲーム内の世界の風景をハイトマップとして表す「ハイトマップオブジェクト」があります。このハイトマップは変更される可能性があります。グローバルオブジェクトを使用したい。(このハイトマップオブジェクトを参照する他の静的変数がないため、静的初期化順序の問題が発生することはないと思います)。
上記の理由により、グローバル状態が悪く、グローバル可変状態がさらに悪いことがわかりました。しかし、別の方法を実行するのは本当に本当に面倒なようです。main()
スコープでハイトマップオブジェクトを作成し、そのハイトマップオブジェクトをそれを使用するすべての関数に渡します。
アプリケーションにハイトマップが1つしかないことを100%確信している場合はどうなりますか?また、これは小さなソロプロジェクトなので、各機能がグローバルな状態に対して何をしているのかを理解できると確信しています。そして、この場合のグローバル変数の使用が単体テストにどのように影響するかはわかりません。globalHeightmap = generateMockHeightmap();
モックハイトマップを使用したい場合、テストしたい関数を呼び出す前に使用できませんか?