Functions」の日本語参考訳です。版はこちらからご利用になれます。私は以前、プログラマーはテキストブロックの最後の行でミスをすることが多いのに気付き、「最後の行問題」という記事で紹介しました。この記事では、私が新しく発見した傾向をお知らせします。つのオブジェクトを比較する関数でミスをするというものです。俄かには信じられないかもしれませんが、読者の皆さんが驚きを感じると思われる多くのエラーの例を紹介します。これは新しい試みであり、非常に興味深く、そして恐るべきものです。つのオブジェクトを比較する単純な関数でミスをすることが多い。記述された多くのオープンソース・プロジェクトを調査したチームの経験に基づいたものです。ようなオーバーロードされた演算子です。書いているときに、比較関数に関連するエラーが多いことに気付きました。細部まで確認しました。単語を含む関数の検索を行いました。結果は印象的かつ衝撃的なもので、「最後の行問題」を書いたときに感じたことに似ていました。私は同様の例外に気付き、それらをさらに詳しく調べることにしました。残念ながら、以前の記事とは異なり、この記事に統計や図を追加する方法が明確でないため、統計を利用したソリューションは、別の機会に紹介することにします。現時点では、直感に基づいて得られた考えを述べるに止めます。比較関数には多くのミスが含まれています。多くの印象的な例を見た後、皆さんも同じ思いを共有されると確信しています。心理状態ここで、「最後の行問題」を振り返ってみましょう。この記事をまだお読みでない方は、この機会に目を通してみてください。一般に、最後の行におけるエラーの原因は、開発者はコードを書き終える前に新しい行やタスクのことを考えている、という事実に関連しています。そのため、同様のテキストのブロックを記述するときに、プログラマーは最後の行でミスをする確率が高いことが分かりました。私は比較関数を記述する場合も同じだと考えています。一般に、開発者はこれらの作業を大した作業ではないと考えがちです。深く考えることなく、無意識にコードを記述してしまうのです。なければ、プログラマーがこのような過ちを犯す説明がつきません。演算子の左辺と右辺に同じ部分式があります。1511)これは単純な入力ミスです。コードは非常に単純です。コードの単純さがすべての原因かと思われます。プログラマーは、典型的で退屈な関数を定義するタスクを考えます。この関数を定義する方法を考えて、コードを実装します。これがプログラマーの日常ですが、必然的に、さらに重要で、複雑で、興味深いコードを書くというタスクもあます。この新しいタスクに集中しすぎると、過ちを犯すことになります。プログラマーがこれらの関数の単体テストについて深く考えることはまずありません。ここでも、関数の単純さが邪魔をしています。これらの関数は単純で、単に繰り返し使用されるため、テストは必要ないと考えてしまうのです。そのような関数を多く開発したプログラマーは、別の関数でも同じミスをするでしょうか。同じ過ちを犯すこともあるでしょう。念のために述べておきますが、この記事で説明することは、プログラミングを始めたばかりの初心者が記述したコードだけではありません。ような、本格的なプロジェクトのコードにありがちなミスについて話しています。多くのさまざまなエラーの例を具体的に紹介していきましょう。比較関数のエラーのパターン比較関数のすべてのエラーは、いくつかのパターンに区分できます。プロジェクトのエラーについて紹介しますが、ほとんどのパターンはほかの言語でも類似しているため、言語を区別することは無意味でしょう。A比較関数では、多くの場合、次のようなチェックを行います。使用するのではなく、次のように変数を入れ替えてチェックする方法を好むプログラマーもいます。Aしかし、不注意により、次のようなチェックが行われることがあります。これだけでは問題点は不明ですが、これから紹介する具体的な例を見れば、問題点は明らかでしょう。演算子の条件式が同じです。前の行で行われたチェックと同じで、常に偽になります。正しいコードは次のとおりです。パターンの使用を検出しました。論理的なエラーの可能性があります。