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』→「それ以外全て」という意味(条件に当てはまらない場合、必ず何かしらの処理をしたい時に使う)

>>「この場合、変数randtrueだった場合はこっちを処理して、それ以外だった場合はこっちの処理をする」という表しになる。

 

<ショートハンドで書こう>

ショートハンド「省略記法」

【書き方】

(判定式)? 何かしらの値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』)