• ベストアンサー

フラグをたてる、、の意味を教えてください。

こんにちわ。perl勉強中の初心者です。 人が書いたプログラムをみて勉強していると たまに$flag=1とか$flag=1とかでてきます。(1と0しかみたことないです。) この$flag=1とかっていうのは、どんな動きをしているのですか?意味がぜんぜんわからなくて困っています。簡単な具体例でも書いていただいて説明していただければ非常にありがたいのですが。。 ずうずうしくてすいません。具体例がなくてもいいので説明だけでも教えてください。ネットで調べてもよくわかりませんでした・・・

  • Perl
  • 回答数6
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • mekerock
  • ベストアンサー率64% (9/14)
回答No.6

「フラグを立てる」ということは、要は目印をつけて置く、という感じで捕らえていいと思います。 語源はアセンブラ言語だったと思いますが、ここでは触れません。 $flag = 1; という式自体はflagという(任意の)変数に1を代入する、ということだけです。これに意味があるかないかは、この式以降、この変数を参照しているかどうかです。参考にしているプログラムで、変数flagを参照している箇所がありませんか? if( $flag == 0 ){ }else{ } のような箇所です(Perlではいろいろな書き方ができるので、ほんの1例ですが)。 なぜ、このようなことをするか。 幾つか自分なりに考えて、以下のようなことでは、と思っています(また、自分が作成するときも意識しています) ・長い計算式は、長いなりに処理時間がかかるので、結果だけを保持しておいて、以降、これを参照すれば、処理時間が短くなる。  今のマシンはハイスペックなので、さほど気にすることも無いですが、式が長いほど、括弧(優先順位)が多いほど、処理が重くなるというものです。結果をフラグに保持しておけば、長い計算式をその度に処理させなくても済みます。 ・そもそも、そんな長い式をいちいち書きたくないので、代用するだけのこと。  コピーアンドペーストを繰り返してもいいのですが、ソースも汚くなりますし、修正のとき、全部を書き換えなければいけません。フラグに結果を保持しておけば、結果を作る式を書き換えるだけで済みます。 ・デバッグ、修正がしやすい  上でも書きましたが、修正漏れを防ぐことが出来ます。 まあ、こんな感じでしょうか? 因みに、代入値は0か1である必要はありません。 たまたま、今まで見ていたプログラムで、 変数名が flag だった 代入値が 0か1 だった だけです。 今では、「フラグ」とは言っても、「変数」に変わりないかと思います。 (これを追求すれば、結局アセンブラの話になるので) うーん。短く書こうと思ったけど、結局長くなってしまいました。すいません。

その他の回答 (5)

noname#15164
noname#15164
回答No.5

プログラムで最初でつまずくのが、これが単語なのかそれとも変数なのか?って事だと思います。 っていうか、私は最初分からなかった。(w $flag = 1 っていうのは、変数なので要は作成した人のかって。 $check = yes でも、OKです。 $mail_wo_sousinnsimasu = yes # 不必要ならno これを、スクリプトの中で $mail_wo_sousinnsimasu をチェックして yes ならメール送信のサブルーチンなりを起動させるって事ですよ。 違うのかな? $flag = 1 # 0 って特殊な事?それとも慣用? 昔は、サーバのメモリーの容量も小さかったし、シンプルさ、小ささが美徳とされていたし、0/1がオンオフはパソコンの基本だからだと思うけど。 これからはon/offやyes/noでもいいと思いますよ。

回答No.4

フラグはプログラムを作る上で必要になってきます。 簡単に言えば2種類しかないもの(男女・メールの未読既読・有無など)を判断するのに使うものです。 メール未読既読で説明すると、 メールの内容をみたら既読($flag = 1) メールの内容を見てなかったら($flag = 0) という感じです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Perlの例としてはバカげてるけど、 文字列から数字の部分を数字として抜き出すプログラムです。 ココで、$flag は、数値があったことを表しています。 $text="abcd123efg456"; $flag=0; $n=0; foreach $c (split(//, $text)){ if($c=~/\d/){ $flag=1; $n=$n*10 + $c; } else { if($flag){ print "$n\n"; $flag=0; $n=0; } } } if($flag){ print "$n\n"; $flag=0; $n=0; }

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

例えばファイルを1件読んで仕事をするとします。 ある項目を書き換えるとフラグを1にします。 これをいろんなところでやって最後にファイルの書き戻しの要否を判定する必要があります。 このときフラグをチェックして1ならファイル書き戻し要、0なら書き戻し不要となります。 逆にファイルの内容でいろんなフラグをオンオフしておいてそれに基づいて各部分の処理を分岐させることもやります。 似たものにカウンターがあります。 カウンターで数を数えておきカウンターの値によって後処理を分岐させるのです。

回答No.1

フラグを立てる、というのは、目印をつける、というように言い換えて良いと思います。 例えば、 if($number > 100) { $flag = 1; } とあれば、「$flagは$numberが100以上である」という目印をつける、と言うことができるでしょう。 フラグの数値に0と1しかないのは、perlにおける比較演算子が返す値が0か1かだからです。 例えば、上記のifの中の、 ($number > 100) という比較式は、$numberが100より大きい数値の場合は1、$numberが100以下の場合は0が返ります。 $number = 1000; $flag = ($number > 100); print $flag; とすると、"1"が出力されます。 厳密には違いますが、$flag=1は「正しい(真:true)」、$flag=0は「正しくない(偽:false)」と覚えておけば良いでしょう。

関連するQ&A

  • $postflag=1とか$flag=1とかってなにを意味しているの?

    CGIでperlを勉強してます。 アンケートフォームや掲示板などのデコード処理の中によく、$postflag=1;とか$flag=0;とか出てくるんですけど、この変数はなにを意味しているのですか?

    • ベストアンサー
    • Perl
  • 大まかな意味を教えてください

    プログラムを勉強する上で重要な<Python, Java, C/C++, Perl, LISP >などがありますが、 一つ一つの意味を教えてください。 大まかでいいのでよろしくお願いします。

  • $_という変数は何を意味するのでしょう?

    Perlの勉強中ですが、 $_ という変数がperlの予約語だということだけは知りました。 ですが、この$_はどういった場面で使用されるものなのでしょうか? 例文を教えていただけますと助かります。

    • ベストアンサー
    • CGI
  • 言葉の意味

    ある法律の勉強をしていて、「主体的要件」と「客体的要件」という言葉にあたったんですが、「主体的」と「客体的」という言葉の意味がよくわからなくなってきて…どなたかよろしければ具体例を交えてわかりやすく説明してくださいませんか。

  • 3ビットのフラグを持つ2個の変数の組み合わせによる分岐の上手な書き方

    お世話になります。 C言語において、3つの状態を持っている変数で状態の組み合わせによって分岐するプログラムを作りたいと思っています。 3ビットのフラグによって2進数で001,010,100の3個のどれかの状態であるとして、以下の条件で分岐させるさせたいです。 ・2個とも同じ状態のとき ・片方が001,010で、もう一方が100 ・片方が001で、もう一方が010 自分では以下のように書いたのですが、条件式もっと簡潔に書くことはできないでしょうか?よろしくお願いいたします。 #include<stdio.h> typedef struct{ int name;//識別番号 unsigned int flag:3;//状態を表すフラグ }Status; int main(void) { Status a,b;//例として2変数のみ定義 a.name=10; a.flag=1; b.name=20; b.flag=2; if(!(a.flag^b.flag)){ printf("2個とも同じ状態のとき\n"); } else if( ( (a.flag&1 || a.flag&2) && b.flag&4 ) || ( a.flag&4 && (b.flag&1 || b.flag&2 ) ) ){ printf("片方が001か010で、もう一方が100\n"); } else if( (a.flag&1 && b.flag&2) || (a.flag&2 && b.flag&1) ){ printf("片方が001で、もう一方が010\n"); } }

  • 初心者ですがエクセルの$とPERLの$も同じですか

    初心者ですがエクセルの$とPERLの$も同じ意味ですか、どういう意味ですか?関数になりますか?

  • パールで「$:」は何を意味するのですか??

    パールプログラムの先頭に次の行がありました。 $: = " "; これはいったい何をやっているのでしょうか。 $:という変数へ1文字分の空白文字を代入しているというのは分かるのですが・・・ ちなみにパール起動直後にこの変数の内容を表示させてみたら_(下線)でした・・・。 パールではこの$:という変数は何に使用されているのですか。

    • ベストアンサー
    • Perl
  • 心理学における『認知』についてなんですが、ネットで検索すると、意味はた

    心理学における『認知』についてなんですが、ネットで検索すると、意味はたくさんでてくるのですが あまりピンときません… 具体例というか裏付けというか… ピンとくるような説明が欲しいです お願いします<(_ _)>

  • パターンマッチ

    perlの勉強を始めてまだ1週間くらいの初心者です。ゼミでperlのプログラムを渡されて解読するように言われperlを勉強しています。早速、質問なのです。 $fhはspecファイルを読みこんでいます。 1:while(my $line=<$fh>){ 2: chomp $line; 3: next if($line=~ /^\s*\#/ || $line=~ /^\s*$/); 4: : 5: : と続いて行きます。質問はプログラム3行目の $line=~ /^\s*\#/ || $line=~ /^\s*$/ の意味です。この意味がいまいち良く分りません。どなたか教えていただけないでしょうか。 ちなみにこのプログラムはUNIX MAGAZINE2005.9で紹介されたgenhtpgというシステムのプログラムと聞いています。

    • ベストアンサー
    • Perl
  • 全く意味がわかりません。。。

    結論として個別的な価値判断を導き出す実践的三段論法の構造を、具体的な例を用いて説明する、とは一体どういう意味なのですか?

専門家に質問してみよう