
No.6ベストアンサー
- 回答日時:
「フラグを立てる」ということは、要は目印をつけて置く、という感じで捕らえていいと思います。
語源はアセンブラ言語だったと思いますが、ここでは触れません。
$flag = 1;
という式自体はflagという(任意の)変数に1を代入する、ということだけです。これに意味があるかないかは、この式以降、この変数を参照しているかどうかです。参考にしているプログラムで、変数flagを参照している箇所がありませんか?
if( $flag == 0 ){
}else{
}
のような箇所です(Perlではいろいろな書き方ができるので、ほんの1例ですが)。
なぜ、このようなことをするか。
幾つか自分なりに考えて、以下のようなことでは、と思っています(また、自分が作成するときも意識しています)
・長い計算式は、長いなりに処理時間がかかるので、結果だけを保持しておいて、以降、これを参照すれば、処理時間が短くなる。
今のマシンはハイスペックなので、さほど気にすることも無いですが、式が長いほど、括弧(優先順位)が多いほど、処理が重くなるというものです。結果をフラグに保持しておけば、長い計算式をその度に処理させなくても済みます。
・そもそも、そんな長い式をいちいち書きたくないので、代用するだけのこと。
コピーアンドペーストを繰り返してもいいのですが、ソースも汚くなりますし、修正のとき、全部を書き換えなければいけません。フラグに結果を保持しておけば、結果を作る式を書き換えるだけで済みます。
・デバッグ、修正がしやすい
上でも書きましたが、修正漏れを防ぐことが出来ます。
まあ、こんな感じでしょうか?
因みに、代入値は0か1である必要はありません。
たまたま、今まで見ていたプログラムで、
変数名が flag だった
代入値が 0か1 だった
だけです。
今では、「フラグ」とは言っても、「変数」に変わりないかと思います。
(これを追求すれば、結局アセンブラの話になるので)
うーん。短く書こうと思ったけど、結局長くなってしまいました。すいません。
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)
という感じです。
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;
}
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行中の変数の中身をイミディ...
-
問題作成のWebアプリの作り方を...
-
Application.ScreenUpdating = ...
-
文字の横にプルダウンを表示さ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
formで特定のinputを送信しない...
-
セレクトボックスのselected属...
-
複数列を持ったリストボックス...
-
実行時エラー 3020の対策
-
UWSC:ポップアップウインドウ...
-
2つのpythonがあって、一方で...
-
結果を得て自動的にページ移動...
-
switch文のエラーについて
-
変数まとめて0に初期化する方...
-
CGIログファイルから1行分ずつ...
-
「*:*」って何を意味するのでし...
-
FindFirst を複数条件で検索
-
PythonでUTF8の文字列をリスト...
-
I2C接続のLCDディスプレイを使う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
C言語のflagの使い方が分かりま...
-
SetDlgItemInt( ) c++
-
再帰的処理について
-
フォームの太字を置き換える
-
C言語のプログラミング
-
リファラのないカウントを防止
-
arduino の割り込み処理について
-
問題作成のWebアプリの作り方を...
-
実行中の変数の中身をイミディ...
-
Perlの基礎中の基礎を教え...
-
if (条件) { 処理 }
-
自動的にエスケープを付けて別...
-
数値計算の際、1000以下は端数...
-
ページングで「前の○件」の方法
-
{ ; }とは、どういう意味?
-
アクセス制限
-
処理終了後、他のページへジャ...
-
UWSC SLCTBOXもしくはSELECTに...
-
右詰表示
おすすめ情報