タグ付けされた質問 「weak-typing」

7
PHPでの変数の型キャスト、これを行う実際的な理由は何ですか?
私たちのほとんどが知っているように、PHPには弱い型付けがあります。そうでない人のために、PHP.netは次のように述べています。 PHPは、変数宣言で明示的な型定義を必要としません(またはサポートしません)。変数のタイプは、変数が使用されるコンテキストによって決まります。 好きでも嫌いでも、PHPはその場で変数を再キャストします。したがって、次のコードは有効です。 $var = "10"; $value = 10 + $var; var_dump($value); // int(20) PHPでは、次のように変数を明示的にキャストすることもできます。 $var = "10"; $value = 10 + $var; $value = (string)$value; var_dump($value); // string(2) "20" それはすべてクールです...しかし、私の人生にとって、これを行うための実用的な理由を考えることはできません。 Javaのような、それをサポートする言語での強い型付けの問題はありません。それは大丈夫で、私はそれを完全に理解しています。また、関数パラメーターの型ヒントを認識し、その有用性を完全に理解しています。 型キャストに関する問題は、上記の引用文で説明されています。PHPで型を自由に交換できる場合は、型を強制的にキャストした後でも可能です。また、操作で特定のタイプが必要な場合にオンザフライで実行できます。これにより、次のことが有効になります。 $var = "10"; $value = (int)$var; $value = $value . ' TaDa!'; var_dump($value); // string(8) "10 TaDa!" …


4
弱い型付けの言語がまだ活発に開発されているのはなぜですか?
なぜ型の弱い言語がまだ活発に開発されているのだろうか。たとえば、書くことができることからどのようなメリットが得られますか $someVar = 1; (...) // Some piece of code $someVar = 'SomeText'; 大きく異なる、型指定されたバージョンを使用する代わりに int someInt = 1; (...) string SomeString = 'SomeText'; 2番目の例で追加変数を宣言する必要があるのは事実ですが、それは本当に痛いのでしょうか?コンパイル時に型の安全性を強制し、型キャストの落とし穴を回避するため、すべての言語が厳密に型指定されるように努めるべきではありませんか?

4
動的で弱く型付けされた言語では、デザインパターンとOOPプラクティスに関する考え方がどのように変わりますか?
これらの線に沿ってすでにかなり役立つ質問があります(「非OOPデザインパターン?」)が、動的で型付けの弱い言語を始めたばかりの人の移行の観点について、私はもっと興味があります。 つまり、C ++、C#、またはJavaで長年プログラミングしており、GoFデザインパターン、エンタープライズアプリケーションアーキテクチャのファウラーパターン、SOLID原則などに沿って多くの知恵を吸収したとしましょう。 m Ruby、Python、JavaScriptなどに手を出し、自分の知識がどのように適用されるのか疑問に思う。おそらく私は多くの場合に直接翻訳を行うことができますが、ほとんど確実にそれは私の新しい設定を十分に活用していないでしょう。アヒルのタイピングだけでも、私のインターフェースベースの考え方の多くが頭に浮かびます。 何が変わりませんか?何が変わりますか?動的言語初心者が知っておくべき、SOLIDや標準パターン(おそらくまったく新しいパターン)などの基本原則はありますか?

3
動的に型付けされた言語のプロシージャの途中で変数の型を変更するのは悪いスタイルですか?
変数に固定型がないPython(および場合によってはPHP)では、コードのロジックの途中で変数に対して「型変換」を頻繁に実行します。私は(必ずしも)単純なキャストについて話しているのではなく、基本的に同じ値またはデータを表すまま、変数の型を変更する関数について話しています。 たとえば、Webリクエストを実行するときに、response変数を使用してaddurlinfoオブジェクトを格納し、次にそのオブジェクトの文字列コンテンツ、および文字列をJSONとして解析して返されるディクショナリを次のようなコードで記述します。 response = urlopen(some_url) assert response.info().type == 'application/json' response = response.read() logger.debug('Received following JSON response: ' + response) response = json.loads(response) do_something(response) (さて、それは少し不自然な例ですが、私はそれがアイデアをうまく​​示していると思います)。これは、3つの個別の変数名を使用するよりも良いと思います。これは、a)response変数に基本的に同じ情報が含まれていること、別の型に「変換」されていること、b)以前のオブジェクトがそうではないことを伝えるためです。これらの変数を再割り当てすることで、後のコードで使用できなくなったため、関数のさらに下で必要になります。 トレードオフは、おそらく、ある時点で変数がどのタイプであるかについて読者が混乱する可能性があるということです。 これは悪いスタイルですか?上記の例では、1つに再割り当てする代わりに3つの異なる変数を使用する必要がありますか?また、これは動的に型付けされた言語での標準的な方法ですか?他の人のコードを知るのに十分なほど見ていません。

3
命令型プログラミング言語での型のキャストと変換に違いはありますか?
StackOverflow での議論で問題が浮上しました。 (オブジェクトのタイプに関して)キャストと変換の 2つの概念の間に明確な違いはありますか、それともこれら2つの単語はまったく同じですか?C ++、Python、Java以外の言語はどうですか?EDIT:どのような問題の種類は次のように、プリミティブ型であるかintにfloat?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.