

下記のソースコードは"デジタルの目覚まし時計"ですが、疑問が生じましたので質問させていただきます。

時計のjavascript内の『時刻をチェック』に"flg=-1"とありますが、"function
changeFlg(){}"内に"flg=1"と"flg=0"があるために、この数字(-1)は"0と1以外の数字"でしたらすべてコンピューターは正常に機能します。  
このように任意に数字が変えられることは認められるのでしょうか。

なお、音は出ないように設定されています。

[code]

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=shift_jis"> 
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Content-Script-Type" content="text/javascript">
    
    <bgsound id="bgm" src="２２２.mid" loop="-1">
    
    <TITLE>デジタルの目覚まし音</TITLE> 
    
    
    <!--- 時計 JavaScript ---> 
    <SCRIPT type="text/javascript">
    <!--
    //アラームフラグを初期化する。
    var flg =0;
    
    //時刻更新＆アラームチェックファンクション
    function timeCheck(){
        //時刻を取得。
        Now = new Date();
        Hour = Now.getHours();
        Min = Now.getMinutes();
        Sec = Now.getSeconds();
    
       // "分"と"秒"が1桁の場合、頭に0を付けて2桁で表示する指定
            if(Hour <= 9) { 
                           Hour = "\u0020" + Hour; 
    　　　}        
    　　　　if(Min <= 9) { 
                           Min = "0" + Min; 
    　　　}
            if(Sec <= 9) { 
                           Sec = "0" + Sec; 
    　　　}
    
    
        //時刻を表示。
        document.sampleForm.dspTime.value=Hour + ":" + Min + ":" + Sec;
    
    
    
        //時刻をチェック。
    
    if((flg == 1)&&(document.sampleForm.alarmH.value == Hour)&&(document.sampleForm.alarmM.value == Min)){
    document.getElementById('bgCol').value="３３３.wav", selectBgm(document.getElementById('bgCol')),
    flg=-1;//０と１以外の数字
    　　　}
    　}
    
    //アラームフラグ変更ファンクション
    
    function changeFlg(){
        if(flg == 0){
        //アラーム未設定時、  
    　　　　　　　　document.sampleForm.setAlarm.value=" alarmOFF ";
                    document.getElementById("bgCol").value="";
    　　　　　　　　selectBgm(document.getElementById('bgCol'));
          　　　　  flg =1;
        }else{
        //アラーム設定済み時、
            document.sampleForm.setAlarm.value=" alarm ON ";
                    document.getElementById("bgms").reset();
                    selectBgm(document.getElementById('bgCol'));
    　　　　　　    flg =0;
      　}
    }
    
    　　//次の更新をセットする。
          setInterval(timeCheck,100);
                  window.onload = timeCheck;
    //-->
    </SCRIPT>
    
    <script type="text/javascript">
     <!--
       function selectBgm(e){
        var selectedIndex = e.selectedIndex;
            document.getElementById("bgCol").style.background=e[selectedIndex].style.backgroundColor;
            bgm.src= e[selectedIndex ].value; 
            document.getElementById("bgCol").value=e[selectedIndex].value;
    }
    
     //-->
    </script>
    </head>
    
    
    <BODY color="gold" bgcolor="black">
    
        <form id="bgms" style="text-align:right">
           <SELECT id="bgCol" onchange="selectBgm(this);">
             <OPTION  value="" >選曲(停止)</OPTION>
             <OPTION  value="２２２.mid" selected>クラシック</OPTION>
             <OPTION  value="３３３.wav">目覚まし音</OPTION>
           </SELECT>
        </form>
    
    　　<FORM  NAME="sampleForm" style="text-align:center">
    　    <INPUT type="text" size=7 NAME="dspTime">
    <br><br>
    <br><br>
    　<div>
    <INPUT type="text" name="alarmH" size=2 value="00">
    <INPUT type="text" name="alarmM" size=2 value="00">
    <INPUT type="button" id="setAlarm" name="setAlarm" value=" alarm ON " onClick="changeFlg();">
    　</div>
    　　</FORM>
    
    　</BODY>
    </HTML>
    
[/code]


CC BY-SA 3.0
2016-02-15T14:17:55.387
22117
2016-02-15T17:02:23.840
9359
question
javascript
デジタル時計の目覚まし時計について


設計上、認めないことが望ましいです。

上記の時計の場合、変数「flg」は  
flg = 0 ・・・ アラーム未設定状態(初期値)  
flg = 1 ・・・ アラーム設定状態  
という、アラームのON/OFFを保持するための存在だと読み取れます。

変数「flg」に-1を設定している処理は、  
「アラームを何度も鳴らさないようにするため、アラーム発生後にOFFにする」  
ための処理であるように読み取れます。  
であれば、上記の設定に従いアラーム未設定「flg = 0」にすることが望ましいです。  
「flg = -1」という、設計外の値を設定しているがために、混乱を招きます。  
混乱は不良の元です。

このソースコードは「flg = 1 と それ以外」を意識した設計に見えます。  
「それ以外」の値として「0」を使用しているだけで、「1」以外であれば何でも良いのです。  
設計上未定義の、浮いた値を使用することは、望ましいことではありません。

※そもそもなぜ再生する音声ファイル名が「bgCol」なのでしょうか


CC BY-SA 3.0
2016-02-15T17:02:23.840
22124
2016-02-15T17:02:23.840
14417
22117
answer