Dynamic

Dynamic[expr]

expr の動的に更新された現在値を表示するオブジェクトを表す.Dynamic[expr]の表示形式がインタラクティブに変更されたり編集されたりする場合は,割当て expr=val は表示形式に対応する新しい値 val expr に与えるように行われる.

Dynamic[expr,None]

インタラクティブな修正や編集はできない.

Dynamic[expr,f]

val のインタラクティブな変更や編集の間,f[val,expr]を継続的に評価する.

Dynamic[expr,{f,fend}]

インタラクティブな変更や編集が終了してから fend[val,expr]も評価する.

Dynamic[expr,{fstart,f,fend}]

インタラクティブな変更や編集が開始してから fstart[val,expr]も評価する.

詳細とオプション

  • Dynamic[expr]は直接表示される式として現れるだけではなく,例えばグラフィックスプリミティブあるいはスライダーのようなオブジェクトの座標として,またオプション設定としても現れることができる.
  • インタラクティブな操作を通して expr に値を割り当てる際に使用されるときのDynamic[expr]中の式は,記号 x,オブジェクト x[i],部分e[[i]],あるいはリスト{x,y,}であることが多い.
  • 例えばグラフィックスでは,Point[Dynamic[{x,y}]]xy の現行値で与えられるために位置が動的に更新される点を表す.点がインタラクティブに移動されるたびに,{x,y}={valx,valy}の形の割当てが行われる.Point[Dynamic[{x,y}]]はインラタクティブに移動できる.Dynamic[Point[{x,y}]]はインタラクティブには移動できない.
  • Dynamic[expr]は,値が必要になり,それが依存している記号の任意のタイプの値が変更されたと判断する場合はいつでも expr を評価する.
  • RefreshあるいはClockオブジェクトがDynamic[expr]中の式の評価に現れると,expr は連続的に再評価される.
  • Dynamicには属性HoldFirstがあるので,expr は表示のために値が必要となるまで評価されない.
  • Dynamic[expr]Dynamic[expr,(expr=#)&]と等価である.
  • Dynamic[expr,f]は,f[val,expr]の評価によるとき以外は,インタラクティブな操作が expr を変更しないようにする.
  • Dynamic[expr,None]で表されるオブジェクトは,インタラクティブには変更できないが,何らかの理由で expr の値が変更されると変更される.
  • Dynamic[expr,Temporary]では,表示されたオブジェクトの形式がインタラクティブな操作で変更できるが,操作が完了したときでなければ更新された値の expr への割当ては行われない.
  • インタラクティブなマウス操作では,Dynamic[expr,{fstart,f,fend}]は一般に,マウスが押されると fstart[val,expr]を1度評価し,マウスが動かされるたびに f[val,expr]を評価し,マウスが放されると fend[val,expr]を1度評価する.
  • マウスが動かされなければ,fstartffend は厳密に1度ずつ評価される.
  • f[val,expr]は常に,fstart[val,expr]の評価の直後に1度評価され,最後に評価されたときの val の値が,常に fend[val,expr]におけるものと同じになる.
  • Dynamicオブジェクトに影響を与えるインタラクティブな操作には,グラフィックス内あるいはSlider等のオブジェクト内で要素をドラッグしたり,InputFieldのようなオブジェクト中のフィールドを編集したりすることが含まれる.
  • fstartffend の関数は次のものでもよい.
  • AutomaticSetを使って値を割り当てる
    Noneアクションは取らない
    Temporary一時的な変更のためにインタラクティブな操作を許す
    funcfunc[val,expr]を評価する
  • Dynamic[expr,f]Dynamic[expr,{None,f,None}]と等価である.
  • Dynamic[expr,Temporary]Dynamic[expr,{None,Temporary,Automatic}]と等価である.
  • Dynamic[expr,f]expr に割り当てられた値に制約条件を強制するために使うことができる.
  • Dynamic[expr,f]は,expr x+y のような式であるとき,個々の変数の割当てに使うことができる.
  • 関数func[val,expr]は,exprに割当てを行う場合には,属性HoldRestを持っていなければならない.Function[{v,e},body,HoldRest]を使って,この属性を持たせることができる.
  • 次のオプションを使うことができる.
  • BaseStyle {}表示オブジェクトのベーススタイル指定
    Deinitialization NoneDynamicが表示不可になったときに評価する式
    Evaluator Automatic評価に使うカーネル
    Initialization NoneDynamicが最初に表示されたときに評価する式
    ShrinkingDelay 0.表示オブジェクトが小さくなる場合の,縮めるまでの遅延時間
    SynchronousUpdating Trueコンテンツを同期して評価するかどうか
    TrackedSymbols Allその変更が更新を引き起す記号
    UpdateIntervalInfinity更新を行う時間間隔
  • Dynamic[e]は,StandardFormおよびTraditionalFormでは e の値を動的に更新した現行値として表示されるが,InputFormOutputFormでは単にDynamic[e]として表示される.
  • Dynamic[expr]は遅延的割当てに類似するものを提供する.この場合,値は式の評価によってではなく表示の必要性によって値が暗示的にリクエストされる.

例題

すべて開くすべて閉じる

  (1)

Dynamicはその引数の現行値を単に返す:

に値を割り当てて,上記の出力を更新する:

記号 Sliderと結びつける:

スコープ  (24)

基本的なDynamic  (6)

任意の式をDynamicで包み込むことができる:

DynamicStandardFormでは見えないが,それでも存在している:

Dynamicを使い, に従って現在表示されている値とリンクする:

デフォルトで,Dynamic内の変数は局所化されない:

DynamicModuleを使って変数を局所化する:

そして,変数を初期化する:

Dynamicの式は自己誘発的なことがある:

Sliderとともに使う:

RandomRealDateStringのような式は自動的には更新されない:

UpdateIntervalを使って動的更新を強制する:

Dynamicは引数をホールドにし,出力として表示されるまでは決して評価しない:

上記のDynamicは全く表示されなかったので,割当ては全く実行されなかった:

Dynamicを置く  (3)

Plotは出力作成のために特定の数値を必要とする:

Dynamicの式を別々に更新することで効率が上がる:

Dynamicで囲むことで,グラフィックス座標を制御入力として使う:

グラフィックス座標を制御入力として使い,2Dスライダー上での効果を見る:

インタラクティブなDynamic  (8)

Dynamicを使ってSlider等のインタラクティブなコントロールと変数を結び付ける:

Slider2D

InputField

TemplateBox[{ColorSlider, paclet:ref/ColorSlider}, RefLink, BaseStyle -> {InlineFormula}]

PopupMenu

Locator

Dynamicを使ってTabViewのようなビュー要素を制御する:

FlipView

PopupView

OpenerView

Dynamicを使ってImageSizeのようなフロントエンドオプションを設定する:

発展:Dynamic  (7)

デフォルトで,Dynamicはインタラクティブ要素内で用いられると割当て操作を行う:

第2引数を使ってインタラクション中に評価される関数を指定する:

インタラクション中とインタラクション後に評価される2つの関数のリストを与える:

インタラクションの前,間,後に評価される3つの関数のリストを与える:

Temporaryを使ってインタラクションの最後に動的変数を更新する:

Noneを使って動的変数の更新を不可とする:

Dynamicは,インタラクティブに設定可能なフロントエンドオプションの割当て操作も行う:

オプション  (8)

BaseStyle  (1)

ベーススタイルを設定する:

Deinitialization  (1)

出力が表示されなくなったときに評価される式を指定する:

Evaluator  (1)

"Local"という名前のカーネルでのみ実行されるDynamicを指定する:

Initialization  (2)

デフォルトで,カーネルセッション間で外部定義は失われる:

Initializationを使って出力の表示に必要な式を評価する:

ShrinkingDelay  (1)

グラフィックスあるいは番号を に割り当てる:

ShrinkingDelayを使って出力サイズを縮小する前に一定の経過時間を置く:

SynchronousUpdating  (1)

長時間かかる評価がタイムアウトしたりシステムをハングしたりしないようにする:

TrackedSymbols  (1)

xが変化したときだけyを更新する:

アプリケーション  (5)

円の上になるように,座標点に制約を加える:

動的計算インターフェースを構築する:

Triggerをコントロールにして,経過時間(分,秒)を記録するタイマーを作る:

国の形を参照する簡単なインターフェースを作る:

カスタムコントロール,例えば範囲がの角度スライダーを構築する:

範囲がの角度スライダー:

特性と関係  (4)

Dynamicを使ってそのコンテンツを直接表示することができる:

単純に表示するDynamicにはインタラクティブ性はなく,第2引数は影響しない:

インタラクティブなコントロール,オブジェクト,あるいはオプションの値としてDynamicをフィードすることもできる:

値のスタイルのDynamicの値がインタラクティブに変更されると第2引数を呼び出される:

動的な式は,結果がスクリーンに表示されるまではコンテンツを評価しない:

即時に解決する場合は結果の表示も保証されない:

時間が重要な場合はFinishDynamicを使う:

同期された動的要素はDynamicEvaluationTimeoutの値によっては時間的制約がある:

評価は$DynamicEvaluationを使って動的に評価されている場合は検知することができる:

考えられる問題  (4)

次の例題は割当て操作が失敗してうまくいかない:

Dynamicの第2引数を用いて割当て操作を制御する:

自己誘発的なDynamicは簡単に無限ループに陥ってしまう(終了したければ出力を削除する):

デフォルトで,ビュー要素は表示の前にコンテンツ全体を生成する:

DynamicImageSize->Automaticを使って表示されるときにだけコンテンツを生成するようにする:

Module変数は初期化されない.Module変数を返すとシンボル名がリークされる:

一般に,変数は初期化されDynamicModuleを使って局所化されなければならない:

ModuleDynamicで完全に囲むこともできる:

おもしろい例題  (6)

連結したSlider

連結したSlider2D

「もとに戻る」Slider

マウスがグラフィックスエリアを動くのに合わせて,そのマウスの位置の中心に円板を置く:

グラフィックスエリアを出る際の最後のマウス位置を記憶する:

枠で囲まれたエリア内でクリックしてボールが跳ねる様子を見る:

Wolfram Research (2007), Dynamic, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dynamic.html.

テキスト

Wolfram Research (2007), Dynamic, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dynamic.html.

CMS

Wolfram Language. 2007. "Dynamic." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Dynamic.html.

APA

Wolfram Language. (2007). Dynamic. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Dynamic.html

BibTeX

@misc{reference.wolfram_2024_dynamic, author="Wolfram Research", title="{Dynamic}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/Dynamic.html}", note=[Accessed: 16-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_dynamic, organization={Wolfram Research}, title={Dynamic}, year={2007}, url={https://reference.wolfram.com/language/ref/Dynamic.html}, note=[Accessed: 16-November-2024 ]}