js・jQuery【鬼練4】
【鬼練4】
開発ツール(デベロッパーツール)の「console(コンソール)」タブ内に
「彼女:仕事と私どっちを取るのよ!」という文字をに表示させる
その次に
「自分:◯◯◯」を表示させる。
◯◯◯は変数(変数answerとする)にしておき、その変数の中身を表示させる。
変数answerには
「仕事に決まってるだろ!」
「仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。」
のどちらかの文字列をランダムで入れておく。
変数answerの中身が「仕事に決まってるだろ!」だった場合には、
「彼女:あたたたたたたたっーーー!!」と
「自分:ひでぶっ!!」という文字を表示させる
変数answerの中身が「仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。」だった場合には、
「彼女:仕事してこいやーーーーーー!!」と
「自分:ひでぶっ!!」という文字を表示させる
【答え】
var answer = null;
var rand = Math.floor(Math.random()*2);
if(rand){
answer = '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。';
}else{
answer = '仕事に決まってるだろ!';
}
console.log('彼女:仕事と私どっちを取るのよ!');
console.log('自分:' + answer);
if(answer === '仕事に決まってるだろ!'){
console.log('彼女:あたたたたたたたっーーー!!');
console.log('自分:ひでぶっ!!');
} else if (answer === '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。') {
console.log('彼女:仕事してこいやーーーーーー!!');
console.log('自分:ひでぶっ!!');
}
【解説】
①変数の定義と初期化
ーーー
var answer = null;
ーーー
↑変数answerを「定義」した
あとあと、この変数に「値」を入れるので、今は空にしておく
「値は空ですよ~」→「null(ヌル)」で入れておく
↑「値は空という意味の値」というわけのわからない意味(そういうもんとして覚える)
ちなみに下記2つのようにも書ける
⑴var answer;
→変数answerは定義したが「初期化」はしていない
⑵var answer = ‘’;
→「空の文字」を入れている。「別名:’’(空文字)」(そういうもんとして覚える)
・空文字:「文字列型の値で中身が空」
・null:「null型」
<定義と初期化の違い>
定義→「この変数使うから箱作ったよ!」=中身には何も入っていない(nullという値も入っていない)
初期化→「定義と同時に値を最初に入れておく」こと
②ランダムな値を変数に入れる
ーーーーーーーーー
var rand = Math.floor(Math.random()*2);
ーーーーーーーーー
↑ランダム値を変数に一旦入れておく
③ランダムな値を判定して文字列を返事として入れる
ーーーー
if(rand){
Answer = ‘仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。’;
}else{
Answer = ‘仕事に決まってるだろ!’;
}
ーーーー
↑変数randには数値型で0,1が入っている。
それをif文で判定して、「if」または「else」の処理で文字列を入れる(どっちでもいい)
<if文の判定結果は自動で変換(キャスト)される>
【前提】
if文の判定は「式」でなくともいい。
ーーーーー
(例①)
if(true){
}
(例②)
if(1){
}
(例③)
if(‘あいうえお’){
}
ーーーーー
↑このような形式でも良い。
つまり、jsでは「値を自動で使いたい型に変換する」という仕組みがある。
どのプログラミング言語も「型」があるので「キャスト」という仕組みがある。
※キャスト → 型を変換すること
・勝手にプログラミング言語がキャストしてしまうのは「js」「PHP」くらい
→if文の()内であれば「true」「false」で判定をしたいから、勝手に「true」「false」の値に勝手に変換する
if(1)~ → if(true)~ と変換
if(‘あいうえお’)~ → if(true)~ と変換
→boolean型に変換さえすれば、if文は判定できる
※1.nullや数値の0や空文字、undefinedという値は「false」
※2. 文字列の「0」や「あいう」などや数値の1は「true」
→if(rand){
answer = '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。';
}else{
aswer = ‘仕事に決まってるだろ!’;
}
↑このように、if文の中に変数をぶっこんでも判定可となる。
『else』→「それ以外全て」という意味(条件に当てはまらない場合、必ず何かしらの処理をしたい時に使う)
>>「この場合、変数randがtrueだった場合はこっちを処理して、それ以外だった場合はこっちの処理をする」という表しになる。
<ショートハンドで書こう>
ショートハンド→「省略記法」
【書き方】
(判定式)? 何かしらの値A : 何かしらの値B;
(例)
answer = (rand)?'仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。' : '仕事に決まってるだろ!';
→()内の判定式がtrueの場合に「何かしらの値A」が返され、falseなら「何かしらの値B」が返される。
(この場合、変数answerに、その値を入れてる)
<「if」「else if」「else」の組み合わせ>
①ifで始まり
②else ifを書き(複数OK)
③最後にelse
という順番の決まりがある。
<リファクタして書く>
変数answerを定義時に初期化して、初期化時にランダム判定する方法
↓
————————
var answer = (Math.floor(Math.random()*2)) ? '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。' : '仕事に決まってるだろ!';
console.log('彼女:仕事と私どっちを取るのよ!');
console.log('自分:' + answer);
if(answer === '仕事に決まってるだろ!'){
console.log('彼女:あたたたたたたたっーーー!!');
console.log('自分:ひでぶっ!!');
} else if (answer === '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。') {
console.log('彼女:仕事してこいやーーーーーー!!');
console.log('自分:ひでぶっ!!');
}
————————
さらに、「連想配列」にしたスマートな書き方だと↓、、
————————
var CHOICE = {
YOUR: '仕事よりも君が大事さ。仕事はもう嫌で嫌で嫌で。。嫌で嫌で嫌で。。ほんと嫌なんだ。',
WORK: '仕事に決まってるだろ!'
};
var answer =(Math.floor(Math.random()*2))?CHOICE.YOUR : CHOICES.WORK;
console.log(‘彼女:仕事と私どっちとるのよ!’);
console.log(‘自分:’ + answer);
}
if(answer === CHOICE.WORK){
console.log(‘彼女:あたた!’);
}else if(answer === CHOICE.YOUR){
console.log(‘彼女:仕事してこいや!’);
}
console.log(‘自分:ヒデブ!’);
————————
・配列には「名前」を付けられる
・連想配列は{ }で囲った中にカンマで区切って値を入れる
・値には名前が付けられるので『名前: 値(:コロンで区切る)』
※配列でもいいが、『CHOICE[0]』なんかで書いてしまうと、第三者がわかりにくいので「連想配列」で書く方が良い(この場合、『CHOICE.YOUR』)