Pineスクリプト道場は、Pineスクリプト入門からコード作成までをサポートする初心者の方のための記事です。
Pineスクリプトをある程度使える方は「Pineスクリプトの学校」にて記事を書いておりますのでそちらをどうぞ。
ということで、今回はプログラミングにおいて必ず使用する「条件分岐」について解説する。
1、条件分岐とは?
そもそも条件分岐とは、
条件によって処理を変えること
を意味する。身近な例で考えてみよう。
例えば、あなたは登山をしていて途中で分かれ道に遭遇した。
片方の道には「坂が急ですが短時間で山頂へ行けます」と書いてあり、もう片方の道には「坂は緩やかですが山頂まで長い時間がかかります」と書いてある。
こんなとき、もしあなたが「体力は残っているので早く山頂へ行きたい」状態であれば坂が急でもすぐに山頂に到着する道を選ぶだろう。反対に「疲れているので時間がかかってもいいから坂は避けたい」状態であれば長時間歩く道を選ぶだろう。
まさに、これこそが条件分岐だ。
何かの条件と照らし合わせて、条件に応じた行動を取る。
プログラムも同じで何かの条件に対し、その条件が正しいならこの処理、正しくないならこの処理というように処理を変えることを条件分岐という。
2、Pineスクリプトでの条件分岐の表記方法
では、実際にプログラムで条件分岐を行うにはどのように表記をしたら良いのだろうか。
Pineスクリプトでは、条件分岐は以下のように表記する。
if_条件式
____処理A
(_はスペースを意味する)
これが基本的な条件分岐の記述方法だ。
条件式とは処理を変える際の判断基準とする内容のことだ。例えば、「変数Aの中身が100以上か未満か」などである。また、条件式は論理式で記述し必ず真か偽で判断ができるものでないといけない。例えば「変数Aの中身は大きいか否か」などの曖昧な条件は設定できない。
論理式ってなに?という方については以下の記事の論理演算について参照してほしい。
このようにifの後に条件式を記述し、条件式が真となる場合の処理Aを書くことで条件分岐を記述する。
そして、一般的にプログラミングではこの条件分岐の構文をif文というので覚えてほしい。
3、条件分岐のパターン
そんな単純な条件分岐だが、実はいくつかのパターンが存在する。
条件分岐を大別すると以下の3パターンに分類できる。それぞれのパターンごとにif文の書き方にもパターンがあるので、後ほど解説する。
(1)特定の条件のときのみ処理を実施したい場合
例えばコンビニでおにぎりを買うとき「100円以下だったら買おう」という場合などだ。
このようなときは、
・おにぎりが100円以下ならおにぎりを買う
だけであるため、特定の条件でしか処理をしない。
(2)特定の条件に当てはまらない場合には別の処理を実施したい場合
同じく、コンビニでおにぎりを買うとき「100円以下だったら2つ買い、100円より高かったら1つだけ買おう」という場合などだ。
このようなときは、
・おにぎりが100円以下ならおにぎりを2つ買う
・おにぎりが100円より高いならおにぎりを1つ買う
という2つに分岐が発生する。
(3)複数の条件が存在する場合
同じく、コンビニでおにぎりを買うとき「100円以下だったら3つ買い、100円を超え200円以下だったら2つ買い200円より高かったら1つだけ買う」という場合などだ。
このようなときは、
・おにぎりが100円以下ならおにぎりを3つ買う
・おにぎりが100円より高く200円以下ならおにぎりを2つ買う
・おにぎりが200円より高いならおにぎりを1つ買う
という3つに分岐が発生する。
4、様々な条件分岐の表記方法
では、先ほどのパターン別で条件分岐の書き方を解説していこう。
(1)特定の条件のときのみ処理を実施したい場合:if文
このような場合は基本的なif文で記述する。
if_条件式
____処理A
上記の例では、条件式が真の時に処理Aが実行される。
条件式が偽の場合は何も処理されない。
(2)特定の条件に当てはまらない場合には別の処理を実施したい場合:if~else文
特定の条件に当てはまらない場合に別の処理をしたいときは、if~else文を使用する。
if_条件式
____処理A
else
____処理B
上記の例では、条件式が真の場合は処理Aが実行、条件式が偽の場合は処理Bが実行される。
先ほどと違って、条件式が偽の場合にも処理を実行するのがif~else文だ。
(3)複数の条件が存在する場合:if~else_if文
複数の条件が存在する場合はif~else_if文を使用する。
if_条件式1
____処理A
else_if_条件式2
____処理B
else_if_条件式3
____処理C
else
____処理D
上記の例では、条件式1が真の場合は処理Aが実施される。偽の場合は条件式2へ飛び、条件式2が真の場合は処理Bが実施される。偽の場合は条件式3へ飛び・・・
と処理が続く。
最後のelseは、すべての条件式が偽の場合に実行される処理を記述できる。そのような処理を設定しない場合は、elseを省略することもできる。
5、(おまけ)特殊な条件分岐の表記方法
最後に、特殊なif文の書き方について解説する。
無理して使う必要はないが、覚えておくとif文をコンパクトに記述できるようになる。
三項条件演算子による表記
条件式 ? 処理A : 処理B
三項条件演算子による表記では、?(クエスチョンマーク)と:(コロン)により条件分岐を表現する。
上記の例では、条件式が真であれば処理Aが実行され偽であれば処理Bが実行される。
if文と違い、簡潔に表現できるので覚えておいて損はない。
iff関数による表記
Pineスクリプトでは三項演算子と同じように条件分岐を表記できる「iff」という関数が存在する。
iff(条件式, 処理A, 処理B)
三項条件演算子とほとんど同じような構文となっている。
上記の例では、条件式が真であれば処理Aが実行され偽であれば処理Bが実行される。
では、iffは三項条件演算子となにが違うかというと公式マニュアルによれば、
iffは三項条件演算子{@op?:}と全く同じことをしますが、機能形式では同じです。 また、iffは演算子{@op?:}よりやや効率が劣ります。
なるほど、さっぱり意味がわからん。
しかし、今のところエラーを吐いたこともないので三項条件演算子と同様の働きをするのだろう。きっと。
6、まとめ
1、条件分岐とは、条件によって処理を変えること
2、条件分岐は、ifやelse、else~ifを使用して記述する
今回は、プログラミングにおいて必ず使用する条件分岐について解説した。
次回は、条件分岐と並ぶ最重要構文である「繰り返し文」について解説しようと思う。
お楽しみに!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。