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

20
静的型付けはトレードオフの価値がありますか?
主にタイプセーフがないPythonでコーディングを開始し、次にC#とJavaに移行しました。Pythonでの作業が少し速くなり、頭痛が少なくなることがわかりましたが、C#およびJavaアプリの複雑度ははるかに高いため、Pythonに本当のストレステストを与えたことはありません。 JavaとC#のキャンプは、タイプセーフティが適切に設定されていないように聞こえます。ほとんどの人は、あらゆる種類の恐ろしいバグに遭遇し、その価値以上の問題を抱えています。 これは言語の比較ではないため、コンパイル済みと解釈済みなどの問題に対処しないでください。型の安全性は、開発の速度と柔軟性に打撃を与える価値がありますか?どうして? 動的型付けのほうが速いという意見の例を望んでいた人たちに: 「開発中に動的に型指定された言語を使用します。これにより、フィードバック、ターンアラウンドタイム、および開発速度が速くなります。」- http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

7
動的型付けではどのような機能が許可されますか?[閉まっている]
私は数日前からPythonを使用していますが、動的型付けと静的型付けの違いを理解していると思います。私が理解していないのは、どのような状況下でそれが好ましいかということです。柔軟性があり読みやすいですが、実行時のチェックが多くなり、ユニットテストが必要になります。 柔軟性や読みやすさなどの非機能的な基準とは別に、動的型付けを選択する理由は何ですか?そうでなければ不可能な動的型付けで何ができますか?動的型付けの具体的な利点を示す具体的なコード例は何ですか?

5
プロジェクトの規模と言語の厳密さとの間に相関関係はありますか?
私の同僚に言語の厳密さとパラダイムの違いを説明して、私は次のように断言しました: 動的言語やインタープリター言語などのトレラント言語は、プロトタイプや小規模プロジェクト、または中規模のWebアプリケーションに最適です。Node.jsでPythonやJavaScriptなどのエレガントな動的言語を選択する場合の利点は次のとおりです。 迅速な開発、 定型コードの削減、 Javaのような「企業言語」から逃げる若くて創造的なプログラマを引き付ける能力。 静的に型指定された/コンパイルされた言語は、ビジネスに不可欠なアプリや、中規模から大規模のアプリ向けのアプリなど、より厳密なものが必要なアプリケーションに最適です。 数十年にわたって開発された有名なパラダイムとパターン、 静的チェックの容易さ、 数十年の経験を持つ多くのプロの開発者を見つける能力。 Haskell、Adaなどの厳格な言語、またはC#のコードコントラクトなどの手法は、ライフクリティカルなシステムや非常に安定していると予想されるシステムなど、柔軟性よりも安全性を重視するシステム(Has​​kellが非常に柔軟である場合でも)に適しています。利点は次のとおりです。 コンパイル時に可能な限り多くのバグをキャッチする機能、 静的チェックの容易さ、 正式な証明のしやすさ。 しかし、大企業が大規模プロジェクトに使用している言語と技術を見ると、私の主張は間違っているようです。たとえば、Pythonは、YouTubeやその他のGoogleアプリケーションなど、重要な量の厳密性を必要とする大規模システムに使用されています。 プロジェクトの規模と使用すべき言語/パラダイムの厳密さとの間にはまだ相関関係がありますか? 考慮するのを忘れた3番目の要因はありますか? 私はどこが間違っていますか?

7
動的対静的型付け言語の研究[終了]
静的に型付けされた言語と動的に型付けされた言語の有効性に関する研究はありますか? 特に: プログラマーの生産性の測定 不良率 単体テストが採用されているかどうかの影響も含まれます。 私はどちらの側の長所についても多くの議論を見てきましたが、だれかがそれについて研究したかどうか疑問に思っています。

4
Haskellの型システムはJavaの型システムと形式的に同等ですか?[閉まっている]
ある言語では他の言語よりも簡単/難しいこともありますが、興味があるのは、ある言語では可能で、別の言語では不可能/無関係なタイプ関連の機能だけです。より具体的にするために、Haskell型の拡張機能を無視しましょう。あらゆる種類のクレイジー/クールなことを行うものが非常に多くあるからです。

14
動的に型付けされた言語の単一の関数から異なるデータ型を返すのは悪い考えですか?
私の第一言語は静的に型付けされています(Java)。Javaでは、すべてのメソッドから単一の型を返す必要があります。たとえば、条件付きでを返すメソッドStringや、条件付きでを返すメソッドを持つことはできませんInteger。しかし、たとえばJavaScriptでは、これは非常に可能です。 静的に型付けされた言語では、これが悪い考えである理由がわかります。すべてのメソッドが返された場合Object(すべてのクラスが継承する共通の親)、あなたとコンパイラはあなたが何を扱っているのか分かりません。実行時にすべての間違いを発見する必要があります。 しかし、動的に型付けされた言語では、コンパイラーさえ存在しない場合があります。動的に型付けされた言語では、複数の型を返す関数が悪い考えである理由は私には明らかではありません。静的言語の私のバックグラウンドにより、このような関数を書くことは避けられますが、コードを見えないようにすっきりさせることができる機能については気にされているのではないかと心配しています。 編集:私の例を削除します(より良い例を考えることができるまで)。私がやろうとしているのではない点に返信するように人々を誘導していると思います。

10
主流の強力な静的OOP言語がプリミティブの継承を妨げるのはなぜですか?
なぜこれが大丈夫であり、ほとんど期待されているのですか: abstract type Shape { abstract number Area(); } concrete type Triangle : Shape { concrete number Area() { //... } } ...これはOKではなく、誰も文句を言いません: concrete type Name : string { } concrete type Index : int { } concrete type Quantity : int { } 私の動機は、コンパイル時の正当性検証のために型システムの使用を最大化することです。 PS:はい、私はこれを読んでおり、ラッピングはハッキングの回避策です。

1
なぜ.Netの世界は、静的に型付けされた代替の代わりに魔法の文字列を受け入れるように見えるのですか?
だから、私は.Netで働いています。.Netでオープンソースプロジェクトを作成します。それに関する私の最大の問題の1つは、.Netではなく、その周辺のコミュニティとフレームワークに必要なことです。魔法のネーミングスキームと文字列は、すべてを行うための最良の方法として扱われているようです。大胆な発言ですが、見てください: ASP.Net MVC: Hello world route: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); これが意味することは、ASP.Net MVCが何らかの形でHomeControllerコードを検索するということです。どういうわけか、それの新しいインスタンスを作成してから、Index 明らかidに何らかのパラメーターで関数を呼び出します。そして、次のようなものがあります: RenderView("Categories", categories); ...or.. ViewData["Foobar"]="meh"; そして、XAMLにも同様のことがあります。DataContextオブジェクトとして扱われ、希望するタイプに解決されることを期待し、祈らなければなりません。DependencyPropertiesは、マジックストリングとマジックネーミング規則を使用する必要があります。そして、このようなもの: MyData myDataObject = new MyData(DateTime.Now); Binding myBinding = new Binding("MyDataProperty"); …


9
動的型付け言語はすべての批判に値しますか?[閉まっている]
企業でのプログラミング言語の選択に関するインターネット上の記事をいくつか読みました。最近、Ruby、Python、PHP、Erlangなど、多くの動的型付け言語が普及しています。しかし、多くの企業は、C、C ++、C#、Javaなどの静的型付き言語を引き続き使用しています。 そして、はい、静的型付き言語の利点の1つは、プログラミングエラーが実行時ではなくコンパイル時に早く検出されることです。しかし、動的型付け言語には利点もあります。(ウィキペディアの詳細) 企業がErlang、Ruby、Pythonなどの言語を使用し始めない主な理由は、それらが動的に型付けされているという事実のようです。それが、StackOverflowの人々がErlangに反対する決定をする主な理由でもあるようです。Erlangに「反対」と決めた理由をご覧ください。 しかし、企業における動的型付けに強い批判があるように思えるが、それは、なぜ私は本当にそれを取得しないことに強いです。 本当に、なぜ企業では動的型付けに対してそれほど多くの批判があるのですか?それは本当にプロジェクトのコストにそれほど影響しますか、それとも何ですか?しかし、多分私は間違っています。

3
動的言語に本当の利点はありますか?[閉まっている]
まず、Javaが私がこれまでに使用した唯一の言語であると言いたいので、この主題に関する私の無知を許してください。 動的に型付けされた言語を使用すると、任意の変数に任意の値を入力できます。したがって、たとえば次の関数(psuedocode)を作成できます。 void makeItBark(dog){ dog.bark(); } そして、どんな値でも内部に渡すことができます。値にbark()メソッドがある限り、コードが実行されます。それ以外の場合は、ランタイム例外または同様の例外がスローされます。(これについて間違っている場合は修正してください)。 一見、これはあなたに柔軟性を与えます。 しかし、私は動的言語でいくつかの読書をしました。人々が言うことは、動的言語でコードを設計または記述するとき、静的に型付けされた言語と同じように、型について考えて考慮することです。 そのため、たとえばmakeItBark()関数を記述するとき、「 'えるもの」のみを受け入れるように意図しますが、これらの種類のものだけを渡すようにする必要があります。唯一の違いは、間違いを犯したときにコンパイラが通知しないことです。 確かに、このアプローチには1つの利点があります。つまり、静的言語では、「この関数はbarえるものをすべて受け入れる」ことを実現するには、明示的なBarkerインターフェイスを実装する必要があります。それでも、これは小さな利点のようです。 何か不足していますか?動的に型付けされた言語を使用することで実際に得られるものは何ですか?

7
ハンガリーの表記法は、表現が不十分な静的型付けの言語の回避策ですか?[閉まっている]
Eric Lippertの記事「What's Up With Hungarian Notation?」、彼はハンガリー記法(良い種類)の目的は ストレージ表現情報に加えてセマンティック情報を含むように「タイプ」の概念を拡張します。 簡単な例は、X座標を表す変数の前に「x」を、Y座標を表す変数の前に「y」を付けることです。これらの変数は整数か浮動小数点かどうかに関係なく、xFoo + yBar、コードは明らかに間違っています。 しかし、私はHaskellの型システムについても読んでおり、Haskellでは、コンパイラがチェックする実際の型を使用して同じことを達成できるようです(つまり、「型の概念を拡張して意味情報を含む」)。したがって、上記の例ではxFoo + yBar、プログラムを正しく設計すると、Haskellで互換性のない型として宣言されるため、実際にコンパイルに失敗します。つまり、Haskellの型システムは、ハンガリー語表記と同等のコンパイル時チェックを効果的にサポートしているようです。 それでは、ハンガリー記法は、型システムが意味情報をエンコードできないプログラミング言語の単なるバンドエイドなのでしょうか?または、ハンガリー記法は、Haskellのような静的型システムが提供できる以上のものを提供しますか? (もちろん、私はHaskellを例として使用しています。他の言語も同様に表現力豊かな(リッチ?ストロング?)型システムを備えていると確信していますが、私はまったく遭遇していません。 明確にするために、私はしていないと、変数名に注釈を付けるの話データタイプではなく、に関する情報を意味プログラムのコンテキスト内の変数の。たとえば、変数は整数、浮動小数点、倍精度、長整数などの場合がありますが、変数の意味は、インチ単位で測定される相対x座標であることです。これは、ハンガリー記法(およびHaskell型)を介したエンコードについて話している種類の情報です。

4
動的言語と静的言語のアーキテクチャの違い
静的言語(C#やJavaなど)と動的言語(RubyやPythonなど)で構築されるアプリケーションを設計するときに、アーキテクチャ上の大きな違いはありますか? 一方のタイプに適した設計で、もう一方のタイプに悪い設計の可能性はどれですか?一方のタイプでは実現できない便利な機能がありますが、他のタイプでは実現できません(もちろん、設計とアーキテクチャにおいて)。 また、ダイナミック固有のデザインパターンはありますか?

2
型チェックと再帰型(Haskell / OcamlでのYコンビネータの記述)
HaskellのコンテキストでYコンビネーターを説明するとき、通常、単純な実装は再帰型のためHaskellで型チェックを行わないことに注意されています。 たとえば、Rosettacodeから: The obvious definition of the Y combinator in Haskell canot be used because it contains an infinite recursive type (a = a -> b). Defining a data type (Mu) allows this recursion to be broken. newtype Mu a = Roll { unroll :: Mu a -> a } …

5
静的クラスを名前空間として使用する
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 名前空間として静的クラスを使用している他の開発者を見てきました public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 { public void DoSomething() { } } } public static class CategoryB { public class Item3 { public void DoSomething() { } } public …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.