Delphiメモ

No004:論理/ビット演算子「not」

論理/ビット演算子『not』は
『論理値を反対にする』
『ビットごとの値を反対にする』
効果があります。

totonicaは1年次に履修していた情報処理の最初の授業で、
画像を表示/非表示切り替えするプログラムを作っていました。
切り替えはボタンクリックで行う、
つまりOnClickイベントで当初管理人が組もうとしたコードは、

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Image1.Visible = True then
    Image1.Visible:= False;
  end
  else
  begin
    Image1.Visible:= True;
  end;
end;

とまぁ、いちいち条件分岐してチマチマ書いていたわけです。
これは恐らく誰もが最初思いつくはずのコードです。
しかし、画像の表示/非表示という動作は、Button1だけが担当するので以下のように書いたほうがずっとスマート。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Visible = not Image1.Visible;
end;

VisibleというプロパティはBoolean型なので、True = not FalseやFlase = not Trueといった等式が成り立つ。
平たく言えば『not』を使うと今の値が反転するって言うことです。
つまりこの例ではImage1.Visibleに今のImage1.Visibleの反転した値を代入すると言うことです。
今の状態がTrueならFalseが、FalseならTrueが代入されます。
つまりボタンを押すたびに画像の表示/非表示が切り替わります。
以前のコードではいちいち条件分岐をしているため合計で7行に渡るコードになっていますが、
これを使うことでたったの1行のコードで済みます。実に便利です。
しかし、この『not』は気をつけて使わないと思わぬ誤作動を引き起こす原因になります。
複数の呼び出し元がある時は特に気をつけてください。
場合によっては条件分岐でコーディングしなければならないこともあります。

トップに戻る

関連ページ