情報アイランドNode.js情報アイランド「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。前回は変数と繰り返しを組み合わせる方法について解説しましたが、今回は変数と分岐を組み合わせる方法について解説したいと思います。変数と分岐の組み合わせまず、分岐についてちょっとだけ復習しましょう。この連載記事では第6回の記事で分岐について解説していました。HiMacroExにおいて分岐は下のように記述するのでした。GetClipクリップボードに記憶されているデータを分岐のために取り出す。<Switch>分岐を開始する。foo>クリップボードから取り出したデータがfooである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。bar>クリップボードから取り出したデータがbarである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。<Default>クリップボードから取り出したデータがfooでもbarでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。</Switch>分岐を終了する。最初のGetClip命令でクリップボードに記憶されているデータを分岐のために取り出していたのでした。実際の分岐はこのデータに基づいて行われるのでした。実はHiMacroExではGetClip命令を使用する代わりに分岐開始命令の>の直前に繰り返し開始命令の場合と同じように変数を指定することによりクリップボードに記憶されているデータではなく変数に格納されているデータに基づいて分岐を行うことができます。10変数xに10を格納する。#x>分岐を開始する。foo>変数xに格納されているデータがfooである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。bar>変数xに格納されているデータがbarである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。<Default>変数xに格納されているデータがfooでもbarでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。</Switch>分岐を終了する。実はHiMacroExでは場合分け命令のデータにも具体的なデータの代わりに変数を指定することができます。変数を指定するには場合分け命令でデータを記述していた部分に#と変数名を記述します。データとして変数を指定した場合には変数に格納されているデータがそのまま場合分け命令のデータとなります。10変数xに10を格納する。5変数yに5を格納する。GetClipクリップボードに記憶されているデータを分岐のために取り出す。<Switch>分岐を開始する。#x>クリップボードから取り出したデータが変数xに格納されているデータと同じである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。#y>クリップボードから取り出したデータが変数yに格納されているデータと同じである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。<Default>クリップボードから取り出したデータが変数xに格納されているデータと同じでもなく変数yに格納されているデータと同じでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。</Switch>分岐を終了する。このように変数と分岐を組み合わせることにより、より簡単に柔軟な分岐を行うことが可能となります。変数と分岐を組み合わせる必要があるプログラムとしては、たとえば、ユーザに入力してもらったデータに基づいて別々の処理を行うプログラムがあります。ユーザが男性を意味するmと入力したか、女性を意味するfと入力したか、それ以外を入力したかでメッセージボックスに表示するメッセージを変えるプログラムは下のように書くことができます。男性の方はmと入力し、女性の方はfと入力してください。メッセージボックスを表示する。InputBoxユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを変数genderに格納する。#gender>分岐を開始する。m>変数genderに格納されているデータがmである場合に次の命令から次の場合分け命令の前までの命令を順番に実行する。あなたは男性なのですね!メッセージボックスを表示する。f>変数genderに格納されているデータがfである場合に次の命令から次のデフォルト命令の前までの命令を順番に実行する。あなたは女性なのですね!メッセージボックスを表示する。8<Default>変数genderに格納されているデータがmでもfでもない場合に次の命令から分岐終了命令の前までの命令を順番に実行する。あなたは男性でも女性でもないのですね!メッセージボックスを表示する。10</Switch>分岐を終了する。このプログラムを実行すると、最初に下のようなメッセージボックスが表示されます。「OK」ボタンをクリックすると、下のようなダイアログボックスが表示されます。何か文字を入力します。「OK」ボタンをクリックすると、入力した文字に応じて適切なメッセージボックスが表示されます。前のセクションでは変数に格納されているデータがある値と等しいかどうかに基づいて分岐を行っていました。HiMacroExでは変数に格納されているデータがある値より大きいかとか、逆にある値より小さいかとかに基づいて分岐を行うこともできます。これを行うには前々回の記事で紹介した数値の比較を行う計算を使用します。詳細については前々回の記事を参照していただきたいですが、数値の比較を行う計算とは2つの数値の内、小さい方を選んだり、逆に、大きい方を選んだりする計算のことでした。MIN(10,100)の計算結果は10となり、MAX(10,100)の計算結果は100となります。これは正に、2つの数値の内、小さい方を選んだり、逆に、大きい方を選んだりする計算に他なりません。ここでXやYは何らかの数値であるものとします。MIN(X,Y)という計算はXとYの内、小さい方を選ぶという計算なのですから、この計算の結果がXだったということはXとYの内、Xの方が小さいか、XとYは等しいということを意味します(Xの方が小さい場合だけでなく、XとYが等しい場合もあり得ますので注意してください)。逆に、MIN(X,Y)の計算結果が、Yだった場合は何を意味するでしょうか?上と同じように考えれば、XとYの内、Yの方が小さいか、XとYは等しいということを意味します。数値の比較を行う計算の結果を利用すれば、2つの数値の大小に基づいた分岐を行うことができるのです。変数xに格納されているデータが100より大きいかどうかに基づいて分岐を行うには、変数xに格納されているデータと100の内、変数xに格納されているデータの方が大きいかどうかに基づいて分岐を行わなければならないということです。変数xに格納されているデータの方が大きい場合と変数xに格納されているデータの方が小さいか、あるいは、変数xに格納されているデータと100が等しい場合の2つに分岐するということです。逆に言えば、変数xに格納されているデータの方が小さいか、あるいは、変数xに格納されているデータと100は等しいかどうかに基づいて分岐を行わなければならないということです。MIN(#x,100)を計算し、結果を適当な変数に格納します。すると、この適当な変数のデータはどうなるかと言うと、変数xに格納されているデータが100より小さいか、100である場合には変数xに格納されているデータそのものが格納されることになるはずです。逆に、変数xに格納されているデータが100より大きい場合には100が格納されることになるはずです。この適当な変数のデータが変数xに格納されているデータと等しいか、あるいは、100と等しいかに基づいて分岐を行えば、それは結局変数xに格納されているデータが100より大きいかどうかに基づいて分岐を行うことができたということになります。具体的に、プログラムの一部として書いてみると下のようになります。10変数xに10を格納する。MIN(#x,100)変数yに変数xに格納されているデータと100の内、小さい方を格納する。#y>分岐を開始する。#x>変数yに格納されているデータが変数xに格納されているデータである場合(変数xに格納されているデータが100以下である場合)に次の命令から次の場合分け命令の前までの命令を順番に実行する。100>変数yに格納されているデータが100である場合(変数xに格納されているデータが100より大きい場合)に次の命令から次の分岐終了命令の前までの命令を順番に実行する。</Switch>分岐を終了する。上のプログラムの場合、1つ目の分岐の中に記述しなければならないのが変数xに格納されているデータが100以下である場合に実行したい命令となり、2つ目の分岐の中に記述しなければならないのが変数xに格納されているデータが100より大きい場合に実行したい命令となります。上のプログラムは若干流れを追うのが難しいかもしれませんので詳細に解説しておきましょう。変数xに格納されているデータが101以上である場合に分けて考えると良いです。1つ目、変数xに格納されているデータが99以下である場合、変数yに格納されるのは必ず変数xに格納されているデータとなります。この場合は必ず1つ目の分岐の中の命令が実行されるということになります。1つ目の分岐の中の命令は変数xに格納されているデータが100以下である場合に実行したい命令だったはずですから、この場合は正しい分岐が行われているということです。次に、2つ目、変数xに格納されているデータが100である場合、変数yに格納されるのは必ず100となります。この場合MIN(#x,100)の計算結果はMIN(100,100)の計算結果と同じで、必ず100になるからです。今、変数xに格納されているデータも100なのですから、この場合は必ず1つ目の分岐の中の命令が実行されるということになります。1つ目の分岐の中の命令は変数xに格納されているデータが100以下である場合に実行したい命令だったはずですから、この場合も正しい分岐が行われているということです。最後に、3つ目、変数xに格納されているデータが101以上である場合、変数yに格納されるのは必ず100となります。変数xに格納されているデータは100ではありませんから、この場合は必ず2つ目の分岐の中の命令が実行されるということになります。2つ目の分岐の中の命令は変数xに格納されているデータが100より大きい場合に実行したい命令だったはずですから、やはりこの場合も正しい分岐が行われているということです。いう訳で、結局、詳細に上のプログラムの流れを確認してみた結果、正しい処理が実現されていることが分かりました。このようなプログラミングパターンを使えば変数と値の大小比較や変数と別の変数の大小比較による分岐を行うことができ、より柔軟なプログラムを書くことができます。ちなみに、上のプログラムの場合は変数xに格納されているデータが100より大きいかどうかに基づいて分岐を行っていましたが、逆に、変数xに格納されているデータが100より小さいかどうかに基づいて分岐を行うには上のプログラムとは対照的なプログラミングパターンを用いることになります。具体的に書いてみると下のようになります。10変数xに10を格納する。MAX(#x,100)変数yに変数xに格納されているデータと100の内、大きい方を格納する。#y>分岐を開始する。#x>変数yに格納されているデータが変数xに格納されているデータである場合(変数xに格納されているデータが100以上である場合)に次の命令から次の場合分け命令の前までの命令を順番に実行する。100>変数yに格納されているデータが100である場合(変数xに格納されているデータが100より小さい場合)に次の命令から次の分岐終了命令の前までの命令を順番に実行する。</Switch>分岐を終了する。要は、MIN(#x,100)の代わりにMAX(#x,100)としなければなりません。変数xに格納されているデータが100以上であるかどうかに基づいて分岐を行うには変数xに格納されているデータが100より大きいかどうかに基づいて分岐を行うプログラミングパターンの場合分け命令の順序を逆転させます。変数xに格納されているデータが100以下であるかどうかに基づいて分岐を行うには変数xに格納されているデータが100より小さいかどうかに基づいて分岐を行うプログラミングパターンの場合分け命令の順序を逆転させます。逆転させなければならないか(何故逆転させるだけで良いのか)については敢えてこの記事では説明しないでおきたいと思います。読者の皆さんに対する課題として残しておきます。これらのプログラミングパターンは若干ややこしいかもしれませんが、非常に有用で、よく使うことになるはずですので是非マスターしましょう。最後に、このプログラミングパターンを用いたプログラムの例として、ユーザに年齢を入力してもらい、その年齢に応じて様々なメッセージが書かれたメッセージボックスを表示するプログラムを書いてみることにします。年齢を入力してください。メッセージボックスを表示する。InputBoxユーザにデータを入力させるためのダイアログボックスを開き、そこでユーザが実際に入力したデータを変数ageに格納する。MAX(#age,10)変数s1に変数ageに格納されているデータと10の内、大きい方を格納する。#s1>分岐を開始する。#age>変数s1に格納されているデータが変数ageに格納されているデータである場合(変数ageに格納されているデータが10以上である場合)に次の命令から次の場合分け命令の前までの命令を順番に実行する。10>変数s1に格納されているデータが10である場合(変数ageに格納されているデータが10より小さい場合)に次の命令から次の分岐終了命令の前までの命令を順番に実行する。この年でプログラミング勉強してるなんてすごい!メッセージボックスを表示する。8<pause>プログラムの実行を中断する。9</Switch>分岐を終了する。MAX(#age,30)変数s2に変数ageに格納されているデータと30の内、大きい方を格納する。#s2>分岐を開始する。#age>変数s2に格納されているデータが変数ageに格納されているデータである場合(変数ageに格納されているデータが30以上である場合)に次の命令から次の場合分け命令の前までの命令を順番に実行する。これからも新しいことをどんどんやっていきましょう!メッセージボックスを表示する。30>変数s2に格納されているデータが30である場合(変数ageに格納されているデータが30より小さい場合)に次の命令から次の分岐終了命令の前までの命令を順番に実行する。頑張ってください!メッセージボックスを表示する。16</Switch>分岐を終了する。このプログラムを実行すると、最初に下のようなメッセージボックスが表示されます。「OK」ボタンをクリックすると、下のようなダイアログボックスが表示されます。何か数値を入力します。「OK」ボタンをクリックすると、入力した文字に応じて適切なメッセージボックスが表示されます。つづく今回は変数と分岐を組み合わせる方法について解説しました。変数と分岐を組み合わせることにより、より柔軟な分岐を行うことができるようになります。次回は変数と繰り返しと分岐の全部を組み合わせる方法について解説したいと思います。次回がこの連載記事の最終回となります。第10回pizyumiプログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。変数と分岐の組み合わせ「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。