Avaris
@Avaris (@ Avarice)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Javascript】メソッド・引数・コールバック関数

解決したいこと

記述があっているか確認したい。

発生している問題・エラー

講師より、計算結果を【addTax】に返してください。
との指摘があった。

//下記の関数を経由して2つの関数を実行するような処理を作ってください。

function addTax(price,func) {
	const taxPrice = Math.round(price * 1.10);
	const result = func + "の値段は" + taxPrice + "円です。"
	return result
	return addTax
}


// トマトの税込み価格をコンソールに表示させる処理

console.log(addTax(100,"トマト"));

// 玉ねぎの税込み価格をコンソールに表示させる処理

console.log(addTax(80,"玉ねぎ"));

自分で試したこと

//下記の関数を経由して2つの関数を実行するような処理を作ってください。
上記が課題(自由作成)ですが、returnがふたつって正しいのか?
ネットで調べても出てはこないので、これが正解なのか不安です。

コンソールではエラー無く表示はしているのですが・・・

ご教授願いたく存じます。

0

2Answer

returnが複数あること自体はありえます。例えばif文などの条件分岐がある場合です。
しかし、returnで処理が中断されるので、その後の処理は実行されません。

function foo() {
    console.log('1');
    return;
    console.log('2'); // 実行されない
}
foo();
// 1

コールバック関数とは関数の引数渡された関数のことなので、次のコード例のbarがコールバック関数になります。

function foo(callback) {
    callback('foo');
}

function bar(str) {
    console.log('bar');
    console.log(str);
}

foo(bar);
// bar
// foo

コールバック関数についての課題で、「計算結果を【addTax】に返してください」ということは、addTaxをコールバック関数にしたコードを求められているのではないかと推測されます。

1Like

Comments

  1. @Avaris

    Questioner

    返信ありがとうございます。
    あれから考えて以下の結果に行きついたですが

    //下記の関数を経由して2つの関数を実行するような処理を作ってください。

    function addTax(price,func) {
    const taxPrice = Math.round(price * 1.10);
    const name1 = "トマト";
    func(name1 , taxPrice);
    const name2 = "玉ねぎ";
    func(name2 , taxPrice);
    return addTax;
    };

    // トマトの税込み価格をコンソールに表示させる処理

    addTax(100,function(name1,taxPrice){
    console.log(name1 + "の税込み価格は" + taxPrice + "円です");
    });

    // 玉ねぎの税込み価格をコンソールに表示させる処理

    addTax(80,function(name2,taxPrice){
    console.log(name2 + "の税込み価格は" + taxPrice + "円です");
    });

    税込み価格をコンソールに表示させると
    各回答欄の税込み価格にトマトと玉ねぎが 2つとも出てしまいます。
    ※トマト110円 玉ねぎ110円 、 トマト88円 玉ねぎ 88円

    記述のどのあたりに不備があるかわかりませんでした。
    どのように書くのが良いのでしょうか?

前も似たようなこと指摘しましたが,まずaddTaxに関する要件を明確にしておかなければなりません.(最低限受け取る引数返値について)
funcに商品名を示すようなstringが渡されているのは不自然なので.

超エスパーですが,ざっくり以下のような状態が企図されているのではないかと推察します.

function addTax(price, func) {
  // 税率算出をコールバック関数に投げる
  return price * func();
}

function getTaxRate() {
  // 税率を返す関数
  return 1.1;
}

console.log(addTax(200, getTaxRate));

先に指摘されている通りreturnを複数書いても,最初のreturnが実行された時点でその関数からは脱出するので無意味です.

0Like

Comments

  1. @Avaris

    Questioner

    ご教授いただいた内容を元に提出したところ【func】は税率では無いそうで
    下記のような内容を作ってみました。

    //下記の関数を経由して2つの関数を実行するような処理を作ってください。

    function addTax(price,func) {
    const taxPrice = Math.round(price * 1.10);
    const name1 = "トマト";
    func(name1 , taxPrice);
    const name2 = "玉ねぎ";
    func(name2 , taxPrice);
    return addTax;
    };

    // トマトの税込み価格をコンソールに表示させる処理

    addTax(100,function(name1,taxPrice){
    console.log(name1 + "の税込み価格は" + taxPrice + "円です");
    });

    // 玉ねぎの税込み価格をコンソールに表示させる処理

    addTax(80,function(name2,taxPrice){
    console.log(name2 + "の税込み価格は" + taxPrice + "円です");
    });

    税込み価格をコンソールに表示させると
    各回答欄の税込み価格にトマトと玉ねぎが 2つとも出てしまいます。
    ※トマト110円 玉ねぎ110円 、 トマト88円 玉ねぎ 88円

    記述のどのあたりに不備があるかわかりませんでした。
    どのように書くのが良いのでしょうか?

  2. ですからfuncに関する要件がちゃんと把握できてないとまともに勉強もできないしこちらも助言できないよっていう話も前回したんですが…相変わらずなんですかね.
    最低限要求を正しく確認する努力はお互いにするべきだと思います.

    2回出てくる件は addTax内でトマトと玉ねぎ両方書いてるので当然そうなります.
    書きようはいくらでもありますが,それは提示された要件を満たしたうえで最適化されたコードを書かにゃならんので(商業プログラミングとはそういうもの),現状これ以上アドバイスはしようがないです.

  3. 改めて言いますが,プログラミングにおける「要件」っていうのは顧客が求めているものを正しく書き上げるために必要なことです.当然ながらそれを研修の一環として行うわけで,それができないと永遠に実務には就けません.
    まずは要件の詳細把握やすり合わせがまともにできていないという現状を認識してください.残念ながらその原因が講師の杜撰な教育にあるのか貴方の理解度の低さにあるのかは,この質問からは判断できません.できる限り講師ともっと密にコミュニケーションをとり,求められているプログラムの形を正確に把握してください.それがままならないようであれば,上長と相談して講師を交代してもらってください.

  4. @Avaris

    Questioner

    ご指摘いただきありがとうございます。
    上長、講師とコミュニケーションを図り改めて研修に臨みます。

Your answer might help someone💌