Thread Rating:
  • 391 Vote(s) - 2.83 Average
  • 1
  • 2
  • 3
  • 4
  • 5
値の初回変更後の再変更を許可しない
03-08-2013, 04:15 PM,
#1
値の初回変更後の再変更を許可しない
ある値が変更されたら、その後はその値の変更を許さない、
という機能を実装したいのですが、どのような方法があるでしょうか。

こういう設計じたい、あまり美しくないとは思うのですが、
テキストフィールドを入力不可にしたりするときに利用したいです。
03-08-2013, 05:09 PM,
#2
RE: 値の初回変更後の再変更を許可しない
■def、 constant を利用する
定義時、つまりコーディング時に値を決められるのであれば、この方法が一番よいと思います。
ただ、「プログラムで初回の変更のみゆるす」という目的には合致しません。

■first?:bool などのフラグを用意する。
初回の変更かどうかを保持するフラグを用意し、
ある値が変更されたら、そのフラグを倒す、という方法です。
ロジックとしてわかりやすいのですが、そのフラグが変更されたら・・・、
ということを考えると確実性がありません。

■uninitialized-value-for-type
これは一時的な不正行為を許す機能とのことですが、NULLを許可しない型で定義すれば、
値を一度入れたらnullにすることはできないので、上記の first? フラグに利用できるかもしれません
03-08-2013, 07:33 PM,
#3
RE: 値の初回変更後の再変更を許可しない
つまり、こういうことでしょうか。

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 }
    }
}

ちょっと面倒ですね。

Forum Jump:


Users browsing this thread:

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('868')