些細な問題ですが、私にはよく出てきますし、他の人も想像しています。誰かが本当に良い、本当に賢い解決策を持っていますか?
void some_function (obj &A, obj &B)
{
// do stuff with A...
//e.g.
double number_A = (value - A.member_func() ) * A.other_func();
// do stuff with B. similar BUT NOT EXACTLY like A...
//e.g.
double number_B = (value + B.member_func() ) * A.other_func();
// !!!!
// Big time TYPO - should say "B.other_func()", not "A.other_func()" !!!!
// !!!!
}
これらのタイプのエラーに対する適切なガードはありますか?
私はよく、バージョン「A」と「B」という名前の 2 つの類似した変数で作業する必要があります。
それぞれのコードは似ているため、「A」で機能したコードを「B」で機能するコードの「テンプレート」として使用することがよくあります (つまり、コピー & ペースト)。 Bにふさわしい。
私は人間なので、コードをコピーするときに特定の場所で「A」を「B」に変更するのを忘れることがあります。運が良ければ、これによりプログラムがクラッシュします。いずれにせよ、これは悲惨です。
そのようなタイプミスを防ぐための巧妙なトリックを知っている人はいますか?
考えてみた...
- 括弧
{ }
を囲んで変数のスコープを制限しようとしますが、オブジェクト A と B が関数の引数にある場合、これは解決しません。 - すべての関数をサブ関数に分割します。1 つは A 用、もう 1 つは B 用です。これは、開発者の観点からは少し面倒です (多くの変数を渡したり返したりする)。
- 実際のオブジェクトではなく、オブジェクト自体へのポインターでのみ機能します。このようにして
{ scope-control }
、ポインターを取得できます。また、面倒です (そして、関数を非常に頻繁に呼び出しても、ポインターを定義するためのオーバーヘッドはごくわずかですよね?)