体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

【謎解きプログラム】どんな結果になる?【アロー関数】解答と解説

【謎解きプログラム】どんな結果になる?【アロー関数】

本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内に謎が解けない場合は、このPCのデータは消失する。

 謎は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

問題1

アロー関数は、最近のプログラミング言語ではよく見る記法です。この記法は、配列の反復メソッドと相性がよく、配列の加工に使われることが多いです。

以下の擬似コードを元に、変数resの中身がどのような配列になるか、当てて下さい。特に書いていない内容については、特殊ではない一般的なプログラミング言語のルールに従います。

● 擬似コードのルール

res = 0 …… 変数resに、数値0を入れる。
[5, 6, 7] …… 要素0が5、要素1が6、要素2が7の配列。
x => x …… アロー関数。「=>」の左辺が引数、右辺の計算結果が戻り値。
.map(関数) …… 関数の戻り値の要素の、新しい配列を作成。

● 問題

res = [10, 20, 30, 40, 50].map(x => x * x);

● 選択肢

// 選択肢1
[10, 20, 30, 40, 50]

// 選択肢2
[20, 40, 60, 80, 100]

// 選択肢3
[100, 400, 900, 1600, 2500]

// 選択肢4
[1000, 8000, 27000, 64000, 125000]

「x => x * x」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x * x」:この計算結果が戻り値。各要素の2乗。

「.map()」により、この戻り値の配列が作られます。そのため、変数「res」に格納される配列は、元の配列の各要素を2乗したものになります。

[10, 20, 30, 40, 50]

各要素を2乗

[100, 400, 900, 1600, 2500]

というわけで、答えは選択肢3の「[100, 400, 900, 1600, 2500]」になります。

以下、JavaScriptによるサンプルコードです。Webブラウザのコンソールで実行できます。

res = [10, 20, 30, 40, 50].map(x => x * x);
console.log(res);

問題2

以下の擬似コードを元に、変数resの中身がどのような配列になるか、当てて下さい。

● 擬似コードのルール

res = 0 …… 変数resに、数値0を入れる。
10 % 2 …… 10を2で割った余り。
[5, 6, 7] …… 要素0が5、要素1が6、要素2が7の配列。
x => x == 0 …… アロー関数。「=>」の左辺が引数、右辺の計算結果が戻り値。
.filter(関数) …… 関数の戻り値が真の要素だけの、新しい配列を作成。

● 問題

res = [11, 22, 33, 44, 55].filter(x => x % 2 == 0);

● 選択肢

// 選択肢1
[11, 22, 33, 44, 55]

// 選択肢2
[1, 2, 3, 4, 5]

// 選択肢3
[2, 4]

// 選択肢4
[22, 44]

「x => x % 2 == 0」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x % 2 == 0」:この計算結果が戻り値。各要素を2で割った値が0(偶数)ならtrue、それ以外(奇数)ならfalse。

「.filter()」により、trueを戻した要素のみの配列が作られます。そのため、変数「res」に格納される配列は、元の配列の各要素の中から、偶数のものになります。

[11, 22, 33, 44, 55]

偶数のみ

[22, 44]

というわけで、答えは選択肢4の「[22, 44]」になります。

以下、JavaScriptによるサンプルコードです。Webブラウザのコンソールで実行できます。

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。
GetNews girl / GetNews boy

オスカー2018年晴れ着撮影会