1

だから、私たちは多くの間違いを犯すので、型付けされた言語を持っているという仮定の下で作業しています.私の仮定が間違っているかどうかを知ってください)。

しかし、型付き言語にキャストを導入すると、変数を型付けできなかったときに抱えていた問題のほとんどが再導入されるのではないでしょうか。

また、変数を入力する理由は私の仮定だけではないことも認識しています。型付き言語を使用するその他の理由をいくつか教えてください。

4

8 に答える 8

13

肝心なのは、強い型付けはコンパイラーにチェックさせキャストは必要に応じて強い型付けをオーバーライドできるということです。

于 2008-10-07T22:43:17.887 に答える
3

私は「ほとんどノー」と言うつもりです。

明示的なキャストを行う必要がある場合でも、動的型付けで発生する問題のほとんどを回避できます。メソッドはまだ新しいクラスに存在する必要があります。オブジェクトは、相互に何らかの階層関係を持っている必要があります。

XmlTextReaderをTextReaderにキャストできることと、実行時にリーダーに「読み取り」と呼ばれるブール値またはメソッドである可能性のあるメンバーがあるかどうかを判断できることには、違いがあります。

于 2008-10-07T22:44:39.583 に答える
2

したがって、タイピングは、コンパイラーに多くのチェックを行わせ、少し助けてもらうための1つの方法です。

はい。

ただし、型付き言語にキャストを導入する場合、変数を型指定できなかったときに発生した問題のほとんどを再導入しませんか?

はい。

可能な限り避けるべきですが、それでも汚い仕事をする必要がある場合があります。

もちろん、厳密なタイピングを強制しない言語はたくさんあり、それらを気に入って有用な仕事をする人もたくさんいます。

于 2008-10-07T22:40:38.000 に答える
1

はい、厳密な型を使用すると、コンパイラーは多くのチェックを行うことができます。

いいえ、キャストを許可しても、それが役立つことを止めることはできません。重要なのは、キャストを行う必要があるまれな場合、それは明示的であるということです。プログラマーはキャストを決定する必要があり、それに注意することができます。鋳造は、多くの強力なツールと同様に、注意して使用する必要がある便利なツールです。

于 2008-10-07T22:41:56.063 に答える
1

少なくともJavaでは、そうではありません。期待するクラスの子にのみキャストできます。したがって、クラスがRuntimeExceptionを返す場合、それを文字列にキャストすることはできません。また、例外(親)としてアクセスするためにクラスをキャストする必要はありません。

これが実際にはRuntimeExceptionの子/実装であり、RuntimeExceptionが知らないことについて子が知っているものにアクセスする必要があることを知っていると言うためにキャストする必要があります。

とはいえ、キャスティングが多すぎると、OOの臭いが悪くなります。親の公開されたメソッドを介して、ほぼ排他的に子の一意のコードにアクセスする必要があります。多くのキャストを行っていることに気付いた場合は、このルールを忘れている可能性があります。

于 2008-10-07T22:53:00.037 に答える
0

キャストするときは、明示的にコンパイラーに強い型付けを緩和するように要求します。これにより、99%のケースでコンパイル時のチェックを行うことができますが、絶対に必要な場合はタイプを混在させることができます。

とにかく、コンパイラがコンパイル時に「悪い」キャストを見つける可能性があります。これは、成功する可能性がないキャストです。

したがって、キャストを有効にすると強い型付けの利点が無効になると言うのは間違いです。ただし、これはキャスティングの使いすぎと言えます。

于 2008-10-07T22:44:25.653 に答える
0

入力すると、Visual Studios Intellisenseなどのツールも機能し、生産性が大幅に向上します。

しかしそれを超えて、マイクBは正しいです。場合によっては、インターフェイスをクラスにキャストしたり、intに憧れたりするなど、何か汚いことをする必要があります。

于 2008-10-07T22:45:50.987 に答える
0

しかし、型付き言語にキャストを導入すると、変数を型付けできなかったときに抱えていた問題のほとんどが再導入されるのではないでしょうか。

指定された言語は見ませんでしたが、キャスティングに関してさまざまな程度があることを指摘する必要があります。

たとえば、C++ には、継承関係を介してオブジェクトを別のオブジェクトにキャストできない場合に NULL を返す dynamic_cast があります。

const_cast は、オブジェクトの constness をキャストします。これは、const として宣言されていないが、オブジェクトを変更しないことがわかっているメソッドに const オブジェクトを渡す場合に役立ちます。

于 2008-10-07T23:32:48.380 に答える