2

研究データ管理に使用されるブラウザベースのソフトウェアStudyTRAX ( http://wiki.studytrax.com ) では、JavaScript を使用してカスタム フォームとフォーム変数を管理できます。ただし、StudyTRAX の「変数」(基本的に、フォームの要素 [HTML プロパティが含まれる] とそれに対応するパラメーターの両方の表現であり、いくつかのデータ型などを含む) は で参照する必要がありますが#<varname>、通常の JavaScript 変数は単に<varname>.

この種のことは、解析を容易にするために行われているのでしょうか? それとも、技術にそれほど傾倒していない研究者が自分が何をしているのかを理解するのにそれほど苦労しないように、2 つを区別するだけなのでしょうか? JavaScript の性質を考えると、StudyTRAX の「変数」は、フォームのデザインとカスタマイズをより簡単にするために定義された通常の JavaScript オブジェクトにすぎないと思います。

また、特定の変数プレフィックスを必要とするプログラミング言語が他にもあることは知っています (ただし、現時点では思い浮かびませんが)。言語設計におけるその選択の通常の理由は何ですか?

4

3 に答える 3

2

2 つの部分からなる回答です。StudyTRAX はほぼ確実にプリプロセッサを使用して何らかの魔法を実行しています。JavaScript はこの相対論を簡単にしますが、Lisp ほど簡単ではありません。コードを解析する必要があります。プレフィックスを付けることで、パーサーは JavaScript の複雑な構文の多くを無視し、「完璧な」コンパイラを必要とせずに適切な部分に到達できます。実際、多くのテンプレート システムがこれを行っています。Lisp の quasi-quote の実装です ( Greenspun の第 10 規則を参照)。

一般的な接頭辞に関しては、それらを理解するための最良の方法は、接頭辞なしで言語用のパーサーを作成することです。Lisp や JavaScript のような非常に動的で純粋な言語の場合、すべてがリスト / オブジェクトである場合、それほど悪くはありません。メソッドがオブジェクトとは異なる、または関数がファーストクラスではない言語を取得すると、パーサーは「foo」が参照するもののタイプを自問し始めますか? Ruby の厄介な例: 接頭辞のない識別子は、ローカル変数または暗黙的に on のメソッドselfです。Rails には、 で実装されている関数がいくつかありますmethod_missingPerson.find_first_by_rank正常に動作しますが、

Class Person < ActiveRecord::Base
  def promotion(name)
    p = find_first_by_rank
    [...]
  end
end

find_first_by_rankローカル変数のように見えるためエラーが発生し、Ruby はmethod_missingスペルミスのローカル変数である可能性があるものを呼び出すことを恐れています。

ここで、インスタンス変数 (接頭辞-@)、クラス変数 (接頭辞-@@)、グローバル変数 (接頭辞-$)、定数 (頭文字のキャピトル)、メソッド名、およびローカル変数 (接頭辞が小さい場合) を区別しようとしていると想像してください。文脈だけで。

于 2012-06-19T06:32:11.813 に答える
0

Perl では、データのタイプに応じて、さまざまな変数プレフィックスが必要です。

$scalar = 4.2;
@array = (1, 4, 9, 16);
%map = ("foo" => 42, "bar" => 17, "baz" => 137);

私が理解しているように、これは、読者が自分が扱っているオブジェクトの種類をすぐに識別できるようにするためです。読者がテクノロジーに傾倒しているかどうかは問題ではありません。プログラマーの認知的負荷を軽減すれば、プログラマーは複雑な構文の詳細を理解するよりも、より重要なことに頭脳を使用できるようになります。

この点で Perl の設計が成功するかどうかは別の問題ですが、それが機能の背後にある理由だと思います。

于 2012-05-24T23:41:44.863 に答える
0

(コンパイラーと言語愛好家のデザイナーから)。

あなたの質問は、「StudyTRAX」ソフトウェアに固有のものです。

プログラミングの初期の頃、Basic の変数は、数値と区別するために $ (文字列の場合は "a$") としてプレフィックスを使用していました。現在、PHP などの一部のプログラミング言語では、変数の前に「$」が付きます。COBNOL は、A から I で始まる変数を整数に使用し、それ以降の文字を浮動小数点数に使用しました。

コードを変換し、後で実行することは複雑な作業です。そのため、多くのプログラマーは、プログラミング言語に接頭辞や接尾辞を追加するなどのショートカットを使用します。

多くの同僚や大学には、コードをプログラミング言語から、「コンパイラ」、「オートマトン」、「言語設計」などのコンピューターが行うものに変換するための特別なクラス/コースが存在します。これは簡単な作業ではないためです。

于 2012-05-24T16:58:08.333 に答える