ハンガリー語表記の短所と短所

w多分、wheadline wof this warticle wyou wa whint wabout wmy wposition wthe whungarian wnotation p.

上の文もそうかもしれません。

ハンガリー語表記は、プログラミングにおいていくつかの意味を持つ場合がありますが、一般的な意味は、コード内の各オブジェクトの名前の前にその型に関するタグを付けるという慣習です。

ハンガリー語表記の何が問題なのかを説明するために、この記事の最初の文を考えてみてください。ハンガリー語表記法に準じています。実際、いくつかの要素があり、そのほとんどが単語であり、それを示すために先頭に「w」という文字が付けられています。そして、句読点であるピリオドで終わるため、その前に p があります。

役に立ちますか?

下位レベルの抽象化のスピルオーバー

わかりました、その例は少し押し付けるかもしれませんが、それが要点です:ハンガリー語の表記法は、あなたが気にしない情報でコードを汚染します.

しかし、なぜこの情報はあまり役に立たないのでしょうか?種類についてです。タイプは重要ではありませんか?

オブジェクト タイプは、コードの設計と記述に非常に役立ちます。 .たとえば、特定の型のみを特定の関数に渡すことができます。しかし、コードを読むときは 、いくつかの特殊なケース (より高いレベルの抽象化を持つ強力な型など) を除いて、型についてはあまり気にしないと思います.

実際、コンパイルされるコードを読んでいる場合 (コードを読むときはほぼ常にそうです)、適切な型が適切な関数に渡されていることがわかります。そうでなければ、コードはコンパイルされないからです。

あなたが気にするのは役割です タイプではなく、オブジェクトの。型は抽象化のレベルが低い:型は方法です オブジェクトが実装されています。コードを読むときに知りたいことは、かということです つまり、彼らの役割を意味します。オブジェクトの役割は、その名前にすでにエンコードされています。

そのため、ハンガリー語表記によってもたらされる情報は、コードを読むのにあまり役に立ちません。そして、コードは、書かれたものよりもはるかに頻繁に読み取られます。しかし、知っているコードを書いているとしましょう。 あまり読まれません。では、ハンガリー語表記は役に立ちますか?

実際には、コードを書くときは、作成するオブジェクトがどのタイプであるかについて明確なビジョンを持っている必要があります。書いているコードをたどることができず、オブジェクトの型を覚えるのに視覚的な助けが必要な場合は、別の問題があります。

実際、私たちがコードの断片について最も明確に理解できるのは、それを書いているときです。なぜなら、頭の中にすべてのコンテキストがあるからです。私たちは「ゾーン内」にいます。独自のコードを書くときにフォローできない場合は、後で他の誰かがそれを読むのがどれほど難しいか想像してみてください。

さらに、ハンガリー語表記にはとにかく多くの情報がありません。実際、プリミティブ型ではないすべてのオブジェクトの接頭辞 (したがって int ではありません) 、 doublechar* など)は x です . Employee x あります 、シリアル番号の強力な型が x を持つように .それほど豊富な情報ではありません。

しかし、私のコードベースはすべてハンガリー語表記です!

これは、既存のコードベースでコードを記述する際にハンガリーの概念の習慣を維持するための主要な議論の 1 つです。

実際、ハンガリー語の表記法は少し前のものです (当時、BCPL など、型をまったく持たない一部の言語では、疑わしい理由からでも、ハンガリー語の表記法が魅力的に見えました)、いくつかのコードベースは

しかし、これはプログラミングが進んでいるところではありません。 C++11 以降、多くの場合、型名に型さえ表示されなくなりました auto の出現とともに .そして、これは C++ だけではありません。Java には、Java 10 以降、同等の機能があります:var .

コードベースがハンガリー語表記に従っている場合、そうでないオブジェクトを導入しても問題ないでしょうか?一貫性が失われませんか?

一貫性は価値のあるものですが、一貫性がありすぎると、何も変更できないため、改善できないことを意味するポイントがあります。これは、Jon Kalb が有名な Foolish Consistency の記事で述べている点です。

そして、ハンガリー語表記の特定のケースでは、一貫性を崩しても問題ないと思います。私はまさにそのケースに直面しており、最初は真新しいコードでのみハンガリー語表記法から解放されるべきだと考えていました.

しかし、コードの同じ領域で、ハンガリー語表記に従わないオブジェクトと従うオブジェクトがある場合、コードをまったく混乱させないことが判明しました。前者は後者よりも読みやすいだけです。個人的な意見かもしれませんが、問題の少なさに驚きました。

名前に何も追加しませんか?

これは、名前の前に何かを付けてはならないということですか?必ずしもそうではありません。

プレフィックスの情報は コメント と似ていると思います .実際、どちらもソース コード内の追加情報であり、読者に何らかの指示を与えることを目的としています。

コードにコメントを書くかどうかについて、私の主なガイドラインは次のとおりです。

「コメント」を「プレフィックス」に置き換えることで、このガイドラインを適応させることができます。

この例えで言えば、ハンガリー語の表記法を読むことは、誰かがあなたの隣に座って、オブジェクトごとに「おい、これは整数だ!」、「これはポインタだ!」、「これはユーザー定義型だ!」と言うようなものです。 」、「これもユーザー定義型です!」、「これも!」、役に立たないものから迷惑なものまでさまざまです。

しかし、コードの作成者があなたの隣に座っていれば教えてくれる貴重な情報があります。そして、そのオブジェクトに遭遇するたびにこの情報について思い出させる必要がある場合は、接頭辞に入れてみませんか.

これは、そもそもハンガリー語表記が設計されたもののようですが、時間が経つにつれてひどく誤解されました.これに関するその他の例については、 Joel Spolsky のウェブサイトをチェックしてください。彼は、ハンガリー語表記の当初の意図に従う特定の接頭辞を擁護しています。

しかし、ほとんどの人が使用するハンガリー語表記の意味については、それをやめて、代わりに残りの名前の適切な命名に焦点を当て、プログラミングの未来に沿って進むべきだと私は考えています.

あなたも好きかもしれません

  • ハンガリー語表記に関する原論文
  • コードで適切な名前を選択する方法
  • コメントするかコメントしないか? // それが問題です