質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

552閲覧

ProgateのJavascriptコースでの疑問箇所

motsu418

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/08/12 16:28

編集2020/08/12 16:52

質問内容

Javascriptの勉強を始めたばかりの者です。

本日ProgateのJavascriptコースの問題に取り組んだのですが、
正解判定だったものの自分の回答と見本のコードの違いについて、
不明な点があったのでご質問させていただきたいです。

以下が問題の内容です

①アロー関数を用いて、getMax関数を定義してください。
(ただし、a,b,cの3つの引数を取るようにすること)

②引数a,b,cのうち一番大きい値を戻り値にすること

③getMax関数を用いてnumber1, number2, number3の最大値を取得し、
最大値は○○です
となるように出力してください。
(○○の部分に最大値が入ります)

私はa,b,cの3つの値の最大値は
「b>maxかつb>c」の場合b、「c>maxかつc>b」の場合c
と考えました。
ところが見本コードを確認すると
「b>max」なら最大値b、「c>max」なら最大値cなっており
bとcの大小を比較していないことに違和感を感じました。

私のコード、考え方の中で間違っている箇所がありましたら、ご指摘いただきたいです。
初学者のつたない質問で大変恐縮ですが、よろしくお願いいたします。

自分のコード

const number1 = 103; const number2 = 72; const number3 = 189; // getMax関数を定義してください const getMax = (a,b,c) => { let max = a; if(b > max && b > c){ max = b; } else if(c > max && c > b){ max = c; } return max; }; // 「最大値は○○です」と出力してください console.log(`最大値は${getMax(number1,number2,number3)}です`);

見本コード

const number1 = 103; const number2 = 72; const number3 = 189; // getMax関数を定義してください const getMax = (a, b, c) => { let max = a; if (b > max) { max = b; } if (c > max) { max = c; } return max; }; // 「最大値は○○です」と出力してください const max = getMax(number1, number2, number3); console.log(`最大値は${max}です`);

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/08/12 16:30

(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
motsu418

2020/08/12 16:53

ご指摘いただきありがとうございます。 それぞれコードブロックで囲んでおきました。
guest

回答2

0

考え方

注目すべきは条件分岐 ですね(2つ目で esle if を使うか、if を使うか)。

else if の場合

  1. 引数 a を最大値として仮定する。
  2. 引数の a < b && c < b を評価し、真なら b が最大値。
  3. 引数の a < c && b < c を評価し、真なら c が最大値。

if の場合(見本コード)

  1. 最大値を a と仮定する
  2. a < b を評価して、真なら最大値を b と仮定しなおす。
  3. b < c (2.で真)または a < c(2.で偽)を評価して、真なら最大値は c とする。

javascript

1const getMax = (a, b, c) => { 2 let max = a; // 1. 3 if (b > max) { // 2. 4 max = b; 5 } 6 if (c > max) { // 3. 7 max = c; 8 } 9 return max; 10};

細かく比較すると、関数内の処理はニュアンスの異なるものになりますが、問われたのは「最大値を求める」ことであり、他の条件も守った「正答」になります。

投稿2020/08/13 02:33

編集2020/08/13 02:49
AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motsu418

2020/08/13 16:35

ご丁寧に回答いただきありがとうございます! 質問時点ではifが2つ使われる条件分岐のイメージがあまりできていなかったようです。 「仮定しなおす」という表現がとてもしっくりきました!
AkitoshiManabe

2020/08/13 21:34

3. で「b < c (2.で真)」と説いたとおりで、違和感の正体は「実は、bとcの大小を比較していた」ということになります。
guest

0

順番に処理をしているので特におかしなところはありません
まずaがmaxを想定して、b,cがmax未満ならaを採用されまxす
bがmaxになったらbが採用され、それよりcが大きければcが採用
そうでなければbがそのまま採用
常にmaxが塗り替えられているわけです

ただしmax値をとる関数は最初から用意されているので、
比較演算子を必ずつかうという条件がないなら一発でいけるのでは?

javascript

1const getMax=(a,b,c)=>Math.max(a,b,c); 2var result=getMax(number1,number2,number3); 3console.log(`最大値${result}です`); 4

投稿2020/08/12 17:48

yambejp

総合スコア116740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motsu418

2020/08/13 16:26

丁寧なご回答ありがとうございます! 「順番に処理をしているので...」まさにその通りでした! maxが置き換わっていくのであれば何も問題ありませんね。 まだまだ基礎的な考え方が身についていなかったようです。 また最大値をとる関数についても教えいただきありがとうございます! 確かにこちらを使ったほうがよりスマートに記述できますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問