03-08-2013, 04:15 PM
03-08-2013, 05:09 PM
■def、 constant を利用する
定義時、つまりコーディング時に値を決められるのであれば、この方法が一番よいと思います。
ただ、「プログラムで初回の変更のみゆるす」という目的には合致しません。
■first?:bool などのフラグを用意する。
初回の変更かどうかを保持するフラグを用意し、
ある値が変更されたら、そのフラグを倒す、という方法です。
ロジックとしてわかりやすいのですが、そのフラグが変更されたら・・・、
ということを考えると確実性がありません。
■uninitialized-value-for-type
これは一時的な不正行為を許す機能とのことですが、NULLを許可しない型で定義すれば、
値を一度入れたらnullにすることはできないので、上記の first? フラグに利用できるかもしれません
定義時、つまりコーディング時に値を決められるのであれば、この方法が一番よいと思います。
ただ、「プログラムで初回の変更のみゆるす」という目的には合致しません。
■first?:bool などのフラグを用意する。
初回の変更かどうかを保持するフラグを用意し、
ある値が変更されたら、そのフラグを倒す、という方法です。
ロジックとしてわかりやすいのですが、そのフラグが変更されたら・・・、
ということを考えると確実性がありません。
■uninitialized-value-for-type
これは一時的な不正行為を許す機能とのことですが、NULLを許可しない型で定義すれば、
値を一度入れたらnullにすることはできないので、上記の first? フラグに利用できるかもしれません
03-08-2013, 07:33 PM
つまり、こういうことでしょうか。
ちょっと面倒ですね。
Code:
{define-class public A
field _value:String = "100"
{setter public {value val:String}:void
||値確定前の型は Null
{if Null == {type-of self.first?} then
set self._value = val
set self.first? = {Frame}
}
}
{getter public {value}:String
{return self._value}
}
||値が設定されると、null は入れられない
field first?:Frame = {uninitialized-value-for-type Frame}
{constructor public {default}}
}
{def tf = {TextField value = "333"}}
{value tf}
{def a = {A}}
{value "Aクラスの初期値:" & a.value}
{CommandButton
label = "Aクラスの値を上記の値に変更して表示",
{on Action do
set a.value = tf.value
{popup-message a.value }
}
}
ちょっと面倒ですね。