AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • [HSP超入門] 条件分岐4

if は直訳すると、もしも という意味になります。
ですので今までの

if a<10 :mes a


というプログラムは、
「もしも a が10より小さかったら a を表示する」と簡単に訳せます。
しかし日本語にした事で1つ疑問がわきます
それは、
「もしも a が10より小さかったら a を表示する」
「そうでなければ」という処理です。
今までやってきた知識だけで考えると、

if a<10 :mes a
if a>=10 :mes a


で出来るのでは?と思ってしまいます。
これは日本語で言うと、
「もしも a が10より小さかったら a を表示する」
「もしも a が10より大きいか同じなら a を表示する」
となり、結果は同じでも 同じ意味では無い事が分かります

どういう事かと言うと「そうでなければ」というのは、一方が決まればもう一方も決まるという性質があるからです。
たとえば、机の上にりんごが2つあるとします、その中の1つは普通のおいしいりんごで、もう1つは毒入りのりんごです。この中のどれが毒入りのりんごかが分かればもう片方を調べなくても、毒入りではない事が分かるという事です。
逆に安全なりんごが分かれば、毒入りりんごも分かるということです。(例えが悪いのは気にしない)
もちろんこんな状況は普通ありませんし、どちらか一方が必ず安全という確かな情報が必要ですが、大雑把に言うとそういう性質なのです。

そして片方を選んだら、もう片方は選ばないと言う事です。
道にたとえると、歩いている途中で道が2つに分かれているとします、そして右の道を選んだとしたら左の道は通らないと言う事です。

前置きが長くなりましたね・・・。
それでは「そうでなければ」という処理はどうすれば良いのでしょう?
実はそういう命令が用意されているのです。
それは else という命令です。エルスと読みます。
「例」

a=10
b=10
if a=b :mes a :else :mes b


これは変数a,b に数を代入して、if 命令で aとbを比較しています。
この if の部分を、また日本語風に言い直すと、
もしaとbが同じなら、mes a を表示。しかし そうでなければ mes b を表示
と成ります。else の部分が そうでなければ に相当します。
(ちなみに「else」 を辞書で調べると「そのほかの」,「 別の」と出ました)

else の書き方を簡単に説明します
else は必ず if とセットで使わないと エラー が出ます。ですので if が無いのに else を書いてはいけません。
そして書く場所ですがこれが結構重要です、
if の後の 命令の後に else を書きます。さらにその後に、そうでない時の命令を書きます。
if 条件式    :命令    :else    :命令

こんな感じです。

条件が一致した時の処理がいらない時は次のように省略する事が出来ます
if 条件式    :else    :命令

こうすると一致した時は何もせずに次の行へ行き、
一致しない時だけ命令を実行させる事が出来ます。

if と else はよく使う命令の1つでとても重要な物です、ここでしっかり覚えておいた方が、後で楽になってきます。要するに基礎の部分です。これは自分の手で色々試して覚えていくしかありません。「こうすればこうなる」とか、「こういう風にはできないんだ」とか発見していってください。(「習うより慣れろ」ですね)


とこんな風に説明して来ましたが、分かりましたか?
説明が下手でうまく表現出来ていないところもあり、分かりづらいと思いますが、ゆっくり考えていけば分かると思います。
まえにもいいましたが、自分に一番分かりやすいようにイメージしてくださいね。そうすれば理解できるはずです。
それにわからなくても、コメントとして質問してくれれば良いので、くじけないでくださいね。
では今回はここまでです。
スポンサーサイト
HSPコンテストのページが更新され私の作品がアップされてました。
「どんなショボイプログラムなのか見てやろう グヘヘヘ!おじいちゃんヨダレヨダレ」という方は、ぜひ見てやって下さい。
http://hsp.tv/contest2006/list_s3.html
来年は何作ろう? (早!)
  • HSPコンテストに応募して来ました。

コンテスト用のプログラムが出来たので、投稿しました。
HSPコンテストのサイトの次回更新時に見れる様になると思うので、良ければ見てくれると嬉しいです。
ショート部門にtytyで登録してます。
http://hsp.tv/contest2006/index.html

  • [HSP超入門] 条件分岐3

前回は色々な条件式を試してみました。
その中に<と>がありましたが、これについての注意というか、気を付けないといけない事があります。

たとえば、

a=4
if (a>0)&(a<10) :mes a

と書いた時、
a が0以上で なおかつ a が10以下の時に mes a を実行するという意味です、これは 0や10も含まれると期待してしまいますが、実際には a が 1,2,3,4,5,6,7,8,9 の時だけ条件が合います。
これをきちんと分かっていないと、予期せぬ動作に悩む事になります。
本当に0~10の時、0も10も含めたい時はこうします。

a=4
if (a>=0)&(a<=10) :mes a

>= がミソです。=> ではないので注意して下さい。

こういうやり方もあります。

a=4
if (a>-1)&(a<11) :mes a

1少なくなるなら増やしてしまえーという荒業、ですがプログラムがみにくくなりそうなので、おすすめしません。

今回はここまで。
  • [HSP超入門] 条件分岐2

マルチステートメントについて説明していなかったので、ここで説明。
マルチステートメントとは、ステートメント(命令)をマルチ(複数)に書いていくことです。
これじゃ説明していないのと同じなので、例をまじえて説明します。

たとえばこういうプログラムを書いた時に、一行ずつに書いていくと
何だかごちゃごちゃしてて、読み辛く感じます。

color 255,0,0
pos 10,10
mes "赤色"
color 0,255,0
pos 10,30
mes "緑色"
color 0,0,255
pos 10,50
mes "青色"


関係する処理ごとに改行すると少し見やすくなりますが、まだ見づらく感じます。

color 255,0,0
pos 10,10
mes "赤色"

color 0,255,0
pos 10,30
mes "緑色"

color 0,0,255
pos 10,50
mes "青色"


内容はまったく同じですが、マルチステートメントで1行に関連する命令を書くと
場合によっては見やすくなります。

color 255,0,0 :pos 10,10 :mes "赤色"
color 0,255,0 :pos 10,30 :mes "緑色"
color 0,0,255 :pos 10,50 :mes "青色"


マルチステートメントで、1行に続けて命令を書くには、
このように、:(コロン)で命令を区切りながら書いていきます。

しかしなんでもかんでもこれをやってしまうと逆に読み辛くなってしまうので、
どうすれば見やすいか、どちらが読みやすくなるか を考えて活用していって下さい。


では if に戻ります。
前回他にも条件式があると紹介しましたが、
使い方までは紹介しなかったので、色々試してみましょう。

変数aの状態を判断して、表示します。

a=8
if a=5 :mes "aは5"
if a<5 :mes "aは5より少ない"
if a>5 :mes "aは5より多い"


& を使うと条件式を組み合わせる事が出来ます。
これをうまく使えば複雑な処理も出来る様になります。
aが0以上でなおかつ aが10以下かどうかを判定します。

a=5
if 0<=a & a<=9 :mes "aは0~9のどれかです。"


条件式の優先順位と、読みさすさの事を考えて本当は(括弧)で囲んだ方がいいです。

a=5
if (0<=a) & (a<=9) :mes "aは0~9のどれかです。"



どうでしょう?何となく使い方が分かりましたか?
次回はもう少し細かい事を説明します。
  • [HSP超入門] 条件分岐1

今回から条件分岐をやってみようと思います。
条件分岐とは一体なんでしょう?それは言葉の通り 条件によってプログラムの処理を変える事です。

一つの動作をし続けるソフトウェアなんてほとんどないですよね?普通はクリックやキーボードに反応して表示が変わったり音が鳴ったりするはずです。例えばゲームではよくHP(ヒットポイント)があって、それが少しずつ減って0になるとゲームオーバーになります、これも条件分岐の仕業なのです。

「条件分岐」は難しい言葉に聞えますが、やっている事は単なる「比較」です。比較とは何かを比べる事で、現実の世界で例えるなら どちらが重いとか、どっちが長いとか、どっちの方が多いとか、大きいとか・・・そういった事です。

では早速 条件分岐をやって見ましょう。
条件分岐をするには if 命令を使います。if 命令の使い方は、

    if 条件式   :条件式が一致した時の処理

と書きます。
条件式はさっき説明した大きいかとか、小さいかなどの比較です。その後に :(コロンと言います) があってさらにその後に そうなった時(条件が満たされた時)の処理を書きます。逆に条件が満たされなかった時は:(コロン)より後ろは実行されずに次の行へ進みます。

   a=10
   if a=1  :mes "変数aは10ですよ。"
   mes "終わり"
実行すると、

終わり

と表示されます。
これは変数aが1だったら:より後ろにある命令を実行します。この場合変数aは1では無いのでmes "変数aは10ですよ。"が実行されなかったのです。
ではどうすれば実行させれるのでしょうか?(なんだかもう感ずいてるとは思いますが)次を実行してみて下さい。
   a=10
   if a=10  :mes "変数aは10ですよ。"
   mes "終わり"
変数aは10ですよ。
終わり

今度は条件が一致したのでmes "変数aは10ですよ。"が実行されます。
変数代入の時にも=(イコール)を使いましたが、条件式では代入している訳ではありません、同じ=(イコール)を使っていますが別物と考えてください。

if で使える条件式は他にも色々あります。
HSPヘルプブラウザーからの引用

HSPの基本的な条件式

 a=b  aとbは等しい
 a!b  aとbは等しくない
 a<b  aはbよりも小さい
 a>b  aはbよりも大きい
 a<=b  aはbよりも小さいか等しい
 a>=b  aはbよりも大きいか等しい

今回はここまで、これから少しずつ難しくなって来ますが ゆっくりじっくり考えて読めば分かりますのでめげずに付いて来て下さいね。


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。