第15回 いつも心にカーソルを「6.プログラムを追え!」

15−6 プログラムを追え!

 プログラミングにおける、流れを制御する話と、大きな流れ・小さな流れ、について説明しましたが、プログラミングにとって、これらは単なる1つの道具や手段でしかありえません。 これらの仕組みを組み合わせて、流れを整理することで、自分の意図するプログラムを作り上げることが最終目標になります。

その中で、決まり事も幾つかあります。
例えば、NS Basicのプログラムの始まりはいつもStartup()で、プログラムの最後にはTermination()が実行されることや、イベント発生時に実行される関数など、大きな流れとして決められています。
しかし、大きな流れの中にある、途中の経路、つまり小さな流れの制御はプログラマに託されているわけで、例えるなら一種のパズルのようなものでしょう。

例えば、ある程度定番の組み合わせですが、Palm本体のハードボタン(スケジュールやアドレス帳など)を押した時、そのボタンによって分岐処理をしますが、ここでは、ifとSelectを組み合わせて使います。
    
    Dim strKey as String
    
    If GetEventType()=NsbKeyorButton Then
    
        strKey = GetKey()
    
        Select Case strKey
            Case &H1
                MsgBox "スケジュールだ"
            Case &H2
                MsgBox "アドレス帳だね"
            Case &H3
                MsgBox "ToDoリストです"
            Case &H4
                MsgBox "メモ帳でしょう"
        End Select
    
    End If
    
あえて解説するなら、発生したイベントがGetEventType()が、キー入力かどうかを問題にしますから、Ifを選ぶのが適切でしょうし、押されたキーに対して処理を分けますから、Selectを使うのが妥当と言えます。
もちろん、どうやってこの流れを記述するのかは、プログラマに託されているのですが、記述する場所は、イベントが発生したら呼ばれる場所、つまりFormのEvent()に記述する、という大きな流れは変えられません。


ちょっと工夫が必要な場合もあります。例えば、簡単な時計を表示するプログラムです。

連続的に画面に何かを表示させる場合、ハンドブックにはForm_After()に記述する、と書かれています。

例えば、
    
    Sub Form1003_After()
    
        Dim Tm as Time
        
        Do until SysEventAvailable()=1
        
            Tm=Now()
            Field1004.Text=HourMin(Tm)+":"+Format(Second(Tm),"00")
     
        Loop
    
    End Sub
    
とすれば、ボタンを押したり、画面をタップしたりするまで、画面に時計が表示され続けるように思えます。
しかし、プログラムを起動した直後に、何らかのイベントが残っていた場合、例えば、ジョグダイアルを押して起動した場合の、離す方のイベントが残っていれば、Do〜Loopに入る前にUntilの条件が成立してしまい、1回も時計が表示されない可能性があります。
したがって、この場合は、
    
    Sub Form1003_After()
        
        Dim Tm as Time
        
        Do 
        
            Tm=Now()
            Field1004.Text=HourMin(Tm)+":"+Format(Second(Tm),"00")
    
            If SysEventAvailAble()=1 Then
                Exit Do
            End If
        Loop
        
    End Sub
    
このリストのように、必ず1回は時刻を表示した方が親切ですよね。

このような工夫は、様々な定番やアルゴリズムの解説本、他人のプログラムなどが大いに参考になりますが、結局のところ、それらを理解しつつ、自分なりに考えて使ったり、応用するのが正解だと思っています。


今回の流れを制御する話は、難しいようですが、内容はそれほど複雑ではありません。要は、単純なモノの組み合わせで、複雑なものを作るから難しい訳です。
プラモデルはいくら難しくても、完成図に向かって作り上げるだけですが、ブロックなら何を作ろうか考えることから始まります。
プログラムを作るという事は、流れを制御することと言っても過言ではありませんが、今、どこをどのような順番で実行しているのかイメージすることができれば、開発上もトラブル対応もスムーズな対応が取れるでしょう。
また、今回の話題は、プログラム側の流れがメインです。同じ流れをテーマにした第8回のフローチャートがありましたが、あちらは人間側からの流れが主な話題になっています。
両方の話題を対比させることで、一層理解が深まれば幸いかと思います。

前へ     目次へ

第15回 いつも心にカーソルを「6.プログラムを追え!」