問題タブ [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.
programming-languages - 関数をその場で動的に書き換えることができる言語は?
私は最近、動的に JavaScript で JavaScript 関数を書き換える必要がありました。私がそれを行うのが簡単で、それがどれほど楽しかったかは、私を驚かせました.
ここにいくつかの HTML があります。
また、出力された HTML を変更することはできませんでしたが、そのリンクに追加のパラメーターを追加する必要がありました。私はそれについて考え始め、これを行うことができることに気付きました:
そして、それはチャンピオンのように機能しました!excelExport.onclick は、文字列に変換して文字列操作を行う関数オブジェクトを返します。"function() { ... }" の形になったので、戻って dom オブジェクトの onclick イベントに割り当てます。eval を使用しなければならないのは少し見苦しいですが、私の知る限り、コードの文字列を取得してオブジェクトにうまく変換できる JavaScript 関数コンストラクターはありません。
とにかく、私の要点は、私が超賢いということではありません (私はそうではありません)。私の要点は、これがかっこいいということです。そして、これを実行できる言語は JavaScript だけではないことを私は知っています。Lisp にはまさにこの目的のために、何年も前からマクロが用意されていると聞いたことがあります。マクロを本当に理解するには、Lisp を本当に理解する必要がありますが、私はそれを理解していません。
だから私の質問は:他のどの言語で関数を(簡単に)動的に書き換えることができますか?簡単な例を見せてもらえますか? 他にどこでこれを行うことができるか、どのように行われるかを知りたいです!
(また、これに何をタグ付けするかわからないので、ランダムな推測をしました)
web-services - 宣言型の Web サービス承認と WSDL 型付け
現在、さまざまなクライアント タイプとロールにインターフェイスを公開する Web サービスのグループがあります。
バックグラウンド:
Web サービス アプリケーション コードは、弱く型付けされた動的言語で記述されています (今後も維持されます)。
認証は個別に処理されます。この投稿はAuthorizationに関するものです。
Web サービスによって公開されるすべての操作はステートレスです。
Web サービスは、 SOAP と REST(JSON)の両方を話します。
どちらのアプローチのメリットについても議論を始めるつもりはありません。
質問:
同時に宣言的に定義するスキームを実装したい
- 公開されたメソッドの入力と出力の複雑な WSDL 型付け、および
- 公開されたメソッドを利用するには、承認TRAITSおよび/またはROLESが必要です。
宣言をインターフェース定義 (メソッド属性など) とインラインで行うか、外部で定義 (YAML ファイル経由など) したいのですが、データベースで動的に管理しないでください。
そのような実装は、(任意の) 弱く型付けされた動的言語に対して既に存在しますか? 私たちが構築できる完全に外部の実装はありますか?
python - Ruby/Python/Groovy のデバッグ
この質問は、あまりにも面白くなかったか、あまりにもわかりにくかったので、言い直します。:)
元の質問は、Java から Groovy への移行を行っているために発生しましたが、この例は、上位レベルの言語 (Ruby、Python、Groovy) に移行する場合にも同様に適用できます。
Java は、コード行間に明確な関係があるため、デバッグが容易であり、for ループを使用して配列を操作するなど、かなり細かい動作を行います。
そのため、ループ内のテストにブレークポイントを設定して、次に何が起こるかを確認できます。(これを書くためのより良い方法があることは知っています。これは要点を説明するためのものです。)
Ruby のような言語では、慣用的なスタイルは高レベルのワンライナー コーディングを好むようです。
たとえば、正規表現を変更した場合など、これをデバッグするための効果的な手法を提案できるかどうか疑問に思っています...従来のデバッガーを引き続き使用し、チェーンされたメソッドにステップイン/オーバーしますか? それとももっと良い方法がありますか?
ありがとう!
dynamic-languages - ダックタイピング - 具象型が必要な場合はどうしますか?
動的言語 (Python など) で電卓を実行していて、add メソッドがあるとします。
ここで、間違った数値以外を渡す場合は、データ型のチェックが必要です。
上記の例のようなパラメーターとは対照的に、ダックタイピングはオブジェクトに関するものですか?
誰かがさらに説明できますか?
編集
オブジェクトとは、次のことを意味します。
メソッドに何が渡されるかは気にしません。
actionscript-3 - プログラムでプロパティを追加するActionScriptオブジェクトを実行する(メタプログラミング)
AS3オブジェクトがあります:{p1: ".."、p2: ".."}名前が変数によって定義されているプロパティの最初のオブジェクトを含む別のオブジェクトを作成したい:
それは意味がありますか?
perl - Perlは「静的に」解析できますか?
「Perlは解析できません。正式な証明」という記事がラウンドを行っています。では、Perlは解析されたコードの意味を「実行時」または「コンパイル時」で決定しますか?
私が読んだいくつかの議論では、議論は不正確な用語に由来しているという印象を受けるので、あなたの答えの中であなたの専門用語を定義するようにしてください。私は意図的に「ランタイム」、「静的」、「解析」を定義していないので、おそらくこれらの用語を私とは異なる方法で定義している人々からの視点を得ることができます。
編集:
これは静的分析に関するものではありません。Perlの振る舞いについての理論的な質問です。
dynamic-languages - スクリプターは丸め誤差を考慮する必要がありますか?
私は C を勉強していて、ガード桁と丸め誤差のアイデアが浮かびました。スクリプト言語 (ここでは Python と Perl を考えています) の実践者は、このようなことについて心配する必要がありますか? 彼らが科学的プログラミングを行っている場合はどうなりますか?
javascript - JavaScriptのインターフェースは必要ですか?
これはどの動的言語にも当てはまると思いますが、私が使用しているのはJavaScriptです。JavaScriptでいくつかのコントロールを記述していて、Send()関数を公開する必要があります。この関数は、JavaScriptをホストするページによって呼び出されます。このSend関数が定義されたオブジェクトの配列があるため、コレクションを反復処理して、各オブジェクトに対してSend()を呼び出します。
オブジェクト指向言語では、同様のことをしたい場合は、各コントロールで実装する必要のあるSend()関数を持つIControlインターフェイスがあり、それから反復するIControl実装のコレクションがあります。を介してsendメソッドを呼び出します。
私の質問は、JavaScriptが動的言語である場合、コントロールが継承するインターフェイスを定義する必要があるのか、それともコントロールで公開されているSend()関数を呼び出すだけで十分なのかということです。
parameters - 動的言語のパラメーターを効果的に単体テストするにはどうすればよいですか?
この回答は、動的言語と静的言語 (好みに応じて、通知または変形された私の視点) でパラメーターの型を処理する方法について、私が理解できなかったことに神経質になりました。
動的言語でパラメーター bar を受け取るメソッド foo が与えられた場合、コンパイル時に bar の型が強制されることはありません。上記のリンクされた回答 (および私がこれに対して一般的に見た回答) は、動的言語で適切に単体テストを行う必要があるということです。
しかし、ある時点で、ユニット外の何かがそのメソッドを呼び出します。これは、それを使用するクラスの単体テストでモックされる重いオブジェクトであるとします。このメソッドを呼び出すクラスが多数あるため、型を変更する必要があります。簡単にするために、以前は数値を取っていましたが、現在は英数字が必要です。新しい要件では、数値オブジェクトではなく、文字列に対して特別に使用できるメソッドを使用する必要があります。
どのように変更し、呼び出しコードが修正されることを知っていますか? 確かに変更しただけでは単体テストは失敗しますが、意図的に変更する必要があるため、表向きは単体テストを修正することになります。呼び出しコードを修正する方法をどのように知っていますか? 概念的にどれだけ知っているかだけでなく、すべての呼び出し元を見つけて、それが変更されたと本当に言えるかをどのように知っているかを意味します。
非常に包括的な統合テストだけがその保証を与えるように思われます。何か不足していますか?
objective-c - -performSelector: の使用 vs. メソッドの呼び出しのみ
私はまだObjective-Cに慣れていないので、次の2つのステートメントの違いは何ですか?