前項のコードでも、
function A(){
Browser.msgBox(‘A’);
}
のように、functionは一番左から始まっているのに、Browser~の方は字下げがなされています。
字下げしなくても、コードとしては有効なのですが、ほとんどの人が字下げを行っています。
もちろん参考書に書いてあるからそうしてるというだけの人もいるかも知れませんが、実際に必要性が出てくるので、こうしています。
それは、字下げの範囲が条件として並行であることが一目瞭然だからです。
数式の時の3-4■AND/OR関数の項でも、どの条件がどこにかかっているのか混乱してしまいがちです。
字下げが同じ位置のものが、同じ範囲で条件定義されていることで、見やすくしているわけです。
たとえば、サンタさんがクリスマスプレゼントを配る時の条件を考えてみましょう。
男の子なのか女の子なのか。
何歳なのか。
いい子だったのか悪い子だったのか。
この要素に対してプレゼントの種類を振り分けて渡すことにします。
たとえばこんな感じ。
これを条件式にあてはめてコードを書いてみましょう。
function present(){
//初めに宣言文として、性別、年齢、いい子度を設定
var sex = “男”
var age = 13
var point = 90
//もしも男だったら
if (sex === “男”){
//年齢によって条件分岐
switch (true){
//4歳未満なら
case age < 4 :
//いい子度によって分岐
switch(true){
//51点未満なら
case point < 51 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
//71未満なら
case point > 51 && point < 71 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
//91未満なら
case point > 71 && point < 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
//92歳以上
case point > 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
}
break;
//7歳未満なら
case age > 4 && age < 7 :
switch(true){
case point < 51 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、つみきをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ミニカーをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、おもちゃロボをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
//12歳未満なら
case age > 7 && age < 12 :
switch(true){
case point < 51 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ボールをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ゲームソフトをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ゲームをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
//16歳未満なら
case age > 12 && age < 16 :
switch(true){
case point < 51 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ゲームソフトをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、ゲームをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、現金5000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
//16歳以上
case age > 16 :
switch(true){
case point < 51 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、現金1000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、現金2000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が男で年齢が%S歳でいい子度が%S点の子には、PCをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
}
//もしも性別が男以外(女だったら)
} else {
switch (true){
case age < 4 :
switch(true){
case point < 51 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
}
break;
case age > 4 && age < 7 :
switch(true){
case point < 51 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、つみきをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、人形をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、ドールハウスをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
case age > 7 && age < 12 :
switch(true){
case point < 51 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、ビーズセットをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、コスメセットをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、コスプレ衣装をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
case age > 12 && age < 16 :
switch(true){
case point < 51 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、現金1000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、現金2000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、スマートフォンをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
case age > 16 :
switch(true){
case point < 51 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、プレゼントなし”,age.toFixed(0),point.toFixed(0));
break;
case point > 51 && point < 71 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、現金3000円をプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 71 && point < 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、スマートフォンをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
case point > 91 :
Logger.log(“性別が女で年齢が%S歳でいい子度が%S点の子には、PCをプレゼント”,age.toFixed(0),point.toFixed(0));
break;
}
break;
}
}
}
条件分岐が40にもなっているので、すごく長文になってしまいましたね。
初めに宣言文として、性別、年齢、いい子度を設定する部分を書いています。
この値が変われば、得られる結果が変わるということです。
そして複雑な条件式がはじまりますね。
最初は分かりやすく順番に考えていきましょう。
まずは、性別。
ここで2分岐しますね。
スタート | → | 男 |
└→ | 女 |
で、さらに年齢で5分岐。
スタート | → | 男 | → | 0-3歳 |
└→ | 4‐6歳 | |||
└→ | 7-11歳 | |||
└→ | 12-15歳 | |||
└→ | 16歳以上 | |||
└→ | 女 | → | 0-3歳 | |
└→ | 4‐6歳 | |||
└→ | 7-11歳 | |||
└→ | 12-15歳 | |||
└→ | 16歳以上 |
で、これがそれぞれにさらにいい子度で4分岐します。
長くなるので書きませんが、こういう構造で考えているということです。
で、その分字下げをしていることが分かるかと思います。
どこの条件式がどこにかかっているか、わかりにくくなっているのがよくわかるかと思います。
変な日本語ですが。
それでも段落を良く見ると、少しはましに見えるということも分かっていただけたかと思います。
と、ここまで書いてみて自分でやっぱりわかりにくかったのでもう少し追記します。
まず、字下げとは文字の開始位置を下げることです。
ここから始まるのと、
ここから始まるのと、
ここから始まるのでは、字下げで差がある、
ということです。
そして、その字下げの範囲が条件の範囲に適応しているコードを書く人が多いですよ。
という話で、ルールだということではないです。
今回の条件分岐を日本語で書いていくと、
もしも男の子ならAへ、それ以外ならBへ
A(字下げ1個)年齢が何歳なのかでイ、ロ、ハ、ニ、ホのいずれかに
イ(字下げ2個)良い子度次第でプレゼントが4パターンの1,2,3,4のいずれかに
1(字下げ3個)プレゼントはこれです。
2(字下げ3個)プレゼントはあれです。
という感じになってますよってことです。
もしも最初の条件で男の子以外(女の子)だったら、BになるわけですがBの条件文の書き出しは字下げ1個となります。
Aの位置と対等な条件分岐になるからです。
そしてそこに書かれるのは、こうですね。
B(字下げ1個)年齢が何歳なのかでイ、ロ、ハ、ニ、ホのいずれかに
難しいですが、コメントと同様に他の人が見ることも想定するなら必須な技術なので、覚えておいてください。
コメント