改め Objective Technician

はぐれ技術者のやりたい放題

マイ・チョネレーション2

2009-06-09 00:00:29 | プログラミング
「フラグ」

この言葉の元の意味について。


「フラグ」とはもともと計算機科学やプログラミングの用語で、複雑な条件分岐処理を実装するときに必要な、状態を記憶しておくメモリみたいなモノ。


例えばこんな使い方をする。

boolean[] flag = [false, false, false];

if(isHoge()) {
  flag[0] = true;
  
  if(isFuga())
    flag[1] = true;
}


while(flag[0]) {
  
  if(flag[1]) {
    piyo();
    flag[2] = isHogera();
  }
  
  if(isPiyo())
    flag[0] = false;  
}

flag[0] = flag[1] & !flag[2]

  

   

   

ただ、僕が思うにフラグを使って条件分けを設定する書き方は美しくない。

てかこれはgoto文と実質的に同じ。その場しのぎで後先考えず取って付けたロジックにしか見えない。



CとかMATLABとかでプログラム組むときはフラグが必要なときもあったかもしれないけど、オブジェクト指向言語でちゃんと一貫した思想で構造的にコーディングすれば、フラグでつぎはぎだらけのソースにはまずならない。


したがって、上の例は悪い例。



フラグはむしろ機械語に近いアセンブラとかCPU命令とかの低レベル(ハードに近いという意味)な階層でメジャーに使うもの。



CPUの設計やマイクロプログラミングを一回でもやると、フラグが人間にとっていかに扱いづらくて面倒なものかが分かるはず。


CPUコア命令とかでは、ある値のゼロ判定やレジスタ同士の大小判定の結果などを0-1で記憶(=フラグを立てる)するというのをしょっちゅうやる。






最近の「フラグが立つ」という新しい意味での表現には未だ違和感があるが、まぁそのうち慣れてくるだろう。






最新の画像もっと見る

コメントを投稿