問題タブ [dynamic-languages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - How to create inline objects with properties?
In Javascript it would be:
#xA;But the same syntax in Python would create a dictionary, and that's not what I want
#xA;c# - 言語が「動的言語」であるかどうかをどのように判断できますか?
私は、言語が「動的」であることが実際に何を意味するのかをよりよく理解しようとしています。Adobe(旧Macromedia)Director製品ラインのスクリプト言語であるLingoについてはかなりの経験があり、「動的言語」と見なされるのではないかと思っています。
変数とリストの処理方法は、私には非常に「動的言語」のように思えます。
変数を使用すると、foo = 3
またはを書くだけbar = "Hello World"
です。int
変数をまたはとして宣言しないでください-それはそのままでそれstring
を理解します。
リストを使用すると、のようなものを書くことができますmiscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]]
。これは?に似ていませんtuple
か?
これらの機能は、「動的言語」ステータスの資格を得るのに十分ですか?
興味深いことに、私はC#をより多く使用し、Director / Lingoをより少なく使用していますが、最近の動的言語に対するすべての興奮で、私は実際に穀物に反対しているのではないかと思います。
編集
以下のMarkRushakoffの回答に関して、このWikipediaの記事を使用して、Lingoが「動的」であるかどうかを分析する試みを示します。
Eval
--Lingoにはキーワードがdo
あります。コマンド全体を実行します。たとえば、または。文字列を数値に変換しようとしますが、これは単なる解析演算子ではありません。実際には、変数の文字列表現をその数値に変換できます。たとえば、ステートメントが23と評価されると仮定します。value
do
do "foo = 23"
do "foo = sum(20, 3)"
value
foo = 23
value("foo")
高階関数-私がこの権利を理解している場合、これは基本的に私がC#で「デリゲート」と呼ぶものです。Lingoは、私が知る限り、これを直接サポートしていませんが、関数を持つ型(「親スクリプト」と呼ばれる)を作成し、その型のインスタンスを渡すことはできます。
閉鎖-私が知る限り、これはサポートされていません。
継続-私が知る限り、これはサポートされていません。
リフレクション-少なくともある意味ではそうです。実際には、文字列を使用して型の新しいインスタンスを作成します(例:
fooInstance = script("Foo").new(bar)
。型のインスタンスを、型の名前を含む文字列に変換することもできます(したがって、c#のGetType()
機能を模倣することができます)。プロパティの名前を知らなくてもタイプのプロパティをクエリして(たとえば、インデックスでプロパティを検索する)、インデックスでプロパティの名前を見つけることもできます。マクロ-ウィキペディアの記事がマクロを説明しているように、私はそうは思わない。ただし、実行時にスクリプトを編集することは可能ですが、それが重要になる可能性があります。
したがって、Lingoは動的機能で6点満点中2〜3点を獲得しているようですが、Lingoがそれらをサポートしていないことを確認するには、クロージャと継続について十分に明確ではありません。何を結論付けたらいいのかわからないと思います。コメントを歓迎します。
dynamic-languages - 動的言語の「動的」部分が優れているのはなぜですか?
Jon Skeet がこのブログ投稿を投稿しました。その中で彼は、言語の動的部分が優れている理由を尋ねようとしていると述べています。だから私は彼に代わって先制的に尋ねようと思った.
domain-driven-design - 動的言語でのドメイン駆動設計の取り組み?
動的言語でのDDDの取り組みを知っていますか?
エンタープライズ指向のソリューションから逸脱すると、DDDの実用的なリソースは大幅に減少する傾向があります(C#、. NET、ASP、およびJavaを除外したGoogle検索では、結果が10分の1になります)が、実際にはDDD実装の例を1つ見つけることができませんでした。動的言語で...
compiler-construction - 動的言語と静的言語 (この 2 つを同じ場所にまとめることはできますか)
プログラミング言語は、「動的」と「静的」の 2 つの主要なクラスにグループ化されます。-これは、プログラミング言語が両方ではなく一方にある場合に常に当てはまりますか?つまり、言語は同時に動的と静的になることができますか?
specifications - 仕様で許可されている範囲を超える動的言語でプログラムを作成する
動的型付け言語の成長に伴い、柔軟性が向上するため、人々が仕様で許可されている以上のプログラムを作成する可能性が非常に高くなります。
ボビンスの回答: A question about JavaScript's slice and splice methodsを読んだとき、私の考えはこの質問の影響を受けました。
基本的な考え方はsplice
、Javascript では、特定の状況でのみ使用するように指定されていますが、他の状況でも使用でき、言語は非常に柔軟に設計されているため、言語がそれを止めるためにできることは何もないということです。 .
誰かが仕様を読み、それに従うことに決めない限り、そのような違反が数多く発生していることは確かです。
これは問題ですか、それともそのような柔軟な言語を書くことの自然な延長ですか? それとも、JSLint のようなツールが仕様の警察に役立つと期待すべきでしょうか?
この質問の中で、python の実装が仕様であるという 1 つの回答が気に入りました。それがこれらのタイプの言語の真実に実際に近いかどうか、私は興味があります。基本的に、言語で何かを実行できる場合、それは仕様に含まれています。 Python 言語仕様はありますか?
アップデート:
いくつかのコメントを読んだ後、仕様の splice メソッドを確認しようと思いました。これが、104 ページの下部にあるhttp://www.mozilla.org/js/language/E262-3 で見つけたものです。 pdfであるため、仕様に違反することなく子の配列で splice を使用できるようです。私の例で人々が行き詰まることを望んでいませんが、うまくいけば、質問を検討してください。
更新 2: これは JavaScript に関するものではなく、言語の柔軟性と仕様に興味があります。たとえば、Java の仕様ではインターフェイスにコードを配置できないと規定されていると思いますが、AspectJ を使用して頻繁に実行しています。これはおそらく違反ですが、作成者は AOP を予測しておらず、JVM が Scala と Clojure に対しても十分に柔軟であるのと同様に、ツールはこの用途に曲げられるほど柔軟でした。
java - 動的言語で「動的」が多すぎることはありますか?
ここ数か月、私は Java から Groovy に移行してきましたが、Java から Groovy への移行を行ってきました。コードの削減、クロージャー、ビルダー、最終的に Grails のようなフレームワークを可能にする MOP、テストを作成する際のモックの容易さなど、多くの利点を評価できます。 .
しかし、私のコードは十分にグルーヴィーではないと同僚から「非難」されています。つまり、私はまだパラメーターとフィールドの型を宣言しており、ダックタイピングなどの代わりに継承とポリモーフィズムを使用する傾向があります。これらの状況では、動的対静的だけでなく、動的対オブジェクト指向パラダイムでもあるようです。一種のジレンマ。そのような場合、私はまだ OO を好む傾向があります。OO パラダイムは、コード構成を抽象化し、特定の実世界の概念に関連付けることができるという基本的な前提に大きな価値があると感じています。
だから、ここに私が助けを必要とする特定の質問があります:
パラメータやフィールドなどの型を宣言する必要がありますか?
単純なメソッドで行う場合、コードのブロックをクロージャーとして宣言する必要がありますか?
ポリモーフィック ダイナミック ディスパッチの代わりにダック タイピングを使用する必要がある場合。たとえば、groovy では、animal."$action"() または def animal; を実行できます。animal.action() 、代わりに Animal animal = new Dog(); animal.action()。Open-Closed 原則のコンテキストで最初の問題を見ることができますが、オブジェクト指向スタイルのポリモーフィズムを好む他の理由はありますか?
groovy でインターフェイスを使用する必要があるのはいつですか?
書ききれなかった同様のジレンマが他にもあると確信しています。また、これらの質問は groovy だけでなく、他の動的言語にも当てはまると思います。あなたの意見は何ですか?
unit-testing - Groovy MetaClass を使用してメソッドを上書きする
サービスを使用して何かを行う POJO があります。
そして、Groovy テスト ケースがあります。
最初のテスト メソッドは、testInjectedMockIFace
期待どおりに機能します。POJO は、の動的実装で作成されIService
ます。がcallX
呼び出されると、単純に「非常にグルーヴィー」を返します。このようにして、サービスはモックアウトされます。
testMetaClass
ただし、2 番目のメソッドが期待どおりに機能せず、代わりにcallX
サービス オブジェクトで呼び出そうとすると NullPointerException がスローされる理由がわかりません。メソッドを次の行で上書きしたと思いましたdoCallService
:
私は何を間違っていますか?
ありがとう!
dependency-injection - 動的言語での依存性注入の必要性はありますか?
テスト可能なC#コードを作成するために、私はDIを多用します。
しかし最近、私はIronPythonをいじり回していて、任意のメソッド/クラス/関数などをモックできるので、DIの必要性がなくなっていることがわかりました。
これはPythonなどの動的言語の場合ですか?
それ以外の:
あなたが持つことができます:
動的言語の場合、したがって動的言語の手動DIに従う必要はありません。
これについて何かアドバイスはありますか?
programming-languages - どうすれば素早く汚いインタプリタを書くことができますか?
私がブラッシュアップするかもしれないと言われた分野の1つが「動的計画法言語」であるというインタビューがあります。それで、私は今週末、サンプルコードとして持ってくるものを書くのに費やすかもしれないと思いました。:-)
もちろん、時間の制約を考えると、私は非常に基本的なものを書くことを計画しており、できれば非常に簡単にできる言語やツールセットを使用することを計画しています。私の経験のほとんどはPythonでの経験ですが、タスクが簡単になる(そしてそれほど長くはかからない)場合は、少し時間をかけて新しいことを学ぶつもりです。これを簡単にするツールや言語に関して、誰かが私にアドバイスをくれますか?