アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちわ。perl勉強中の初心者です。
人が書いたプログラムをみて勉強していると
たまに$flag=1とか$flag=1とかでてきます。(1と0しかみたことないです。)

この$flag=1とかっていうのは、どんな動きをしているのですか?意味がぜんぜんわからなくて困っています。簡単な具体例でも書いていただいて説明していただければ非常にありがたいのですが。。

ずうずうしくてすいません。具体例がなくてもいいので説明だけでも教えてください。ネットで調べてもよくわかりませんでした・・・

A 回答 (6件)

「フラグを立てる」ということは、要は目印をつけて置く、という感じで捕らえていいと思います。


語源はアセンブラ言語だったと思いますが、ここでは触れません。

$flag = 1;
という式自体はflagという(任意の)変数に1を代入する、ということだけです。これに意味があるかないかは、この式以降、この変数を参照しているかどうかです。参考にしているプログラムで、変数flagを参照している箇所がありませんか?

if( $flag == 0 ){
}else{
}
のような箇所です(Perlではいろいろな書き方ができるので、ほんの1例ですが)。

なぜ、このようなことをするか。
幾つか自分なりに考えて、以下のようなことでは、と思っています(また、自分が作成するときも意識しています)
・長い計算式は、長いなりに処理時間がかかるので、結果だけを保持しておいて、以降、これを参照すれば、処理時間が短くなる。
 今のマシンはハイスペックなので、さほど気にすることも無いですが、式が長いほど、括弧(優先順位)が多いほど、処理が重くなるというものです。結果をフラグに保持しておけば、長い計算式をその度に処理させなくても済みます。

・そもそも、そんな長い式をいちいち書きたくないので、代用するだけのこと。
 コピーアンドペーストを繰り返してもいいのですが、ソースも汚くなりますし、修正のとき、全部を書き換えなければいけません。フラグに結果を保持しておけば、結果を作る式を書き換えるだけで済みます。

・デバッグ、修正がしやすい
 上でも書きましたが、修正漏れを防ぐことが出来ます。

まあ、こんな感じでしょうか?
因みに、代入値は0か1である必要はありません。
たまたま、今まで見ていたプログラムで、
変数名が flag だった
代入値が 0か1 だった
だけです。

今では、「フラグ」とは言っても、「変数」に変わりないかと思います。
(これを追求すれば、結局アセンブラの話になるので)

うーん。短く書こうと思ったけど、結局長くなってしまいました。すいません。
    • good
    • 0

プログラムで最初でつまずくのが、これが単語なのかそれとも変数なのか?って事だと思います。


っていうか、私は最初分からなかった。(w

$flag = 1 っていうのは、変数なので要は作成した人のかって。
$check = yes でも、OKです。
$mail_wo_sousinnsimasu = yes # 不必要ならno

これを、スクリプトの中で $mail_wo_sousinnsimasu をチェックして yes ならメール送信のサブルーチンなりを起動させるって事ですよ。

違うのかな?
$flag = 1 # 0 って特殊な事?それとも慣用?
昔は、サーバのメモリーの容量も小さかったし、シンプルさ、小ささが美徳とされていたし、0/1がオンオフはパソコンの基本だからだと思うけど。
これからはon/offやyes/noでもいいと思いますよ。
    • good
    • 1

フラグはプログラムを作る上で必要になってきます。


簡単に言えば2種類しかないもの(男女・メールの未読既読・有無など)を判断するのに使うものです。
メール未読既読で説明すると、
メールの内容をみたら既読($flag = 1)
メールの内容を見てなかったら($flag = 0)
という感じです。
    • good
    • 1

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;
}
    • good
    • 0

例えばファイルを1件読んで仕事をするとします。


ある項目を書き換えるとフラグを1にします。
これをいろんなところでやって最後にファイルの書き戻しの要否を判定する必要があります。
このときフラグをチェックして1ならファイル書き戻し要、0なら書き戻し不要となります。

逆にファイルの内容でいろんなフラグをオンオフしておいてそれに基づいて各部分の処理を分岐させることもやります。

似たものにカウンターがあります。
カウンターで数を数えておきカウンターの値によって後処理を分岐させるのです。
    • good
    • 0

フラグを立てる、というのは、目印をつける、というように言い換えて良いと思います。


例えば、

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)」と覚えておけば良いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!