[ペチパーの大冒険] ゲーム制作#04「あるあるミス・クイズ1」

2025/01/18

ゲーム 開発

t f B! P L
eyecatch 今回はプログラミングする時に上級者でもたまにやっちゃうミス問題です。 全部Javascript言語の問題なので、チェックするのも簡単かも。 簡単が故にミスに気づきにくいという事も含めて、クイズに挑戦してみてください。

Q1. 等号と代入

次のコードは何を出力しますか? let x = 10; if (x = 5) { console.log("True"); } else { console.log("False"); } 選択肢(クリックしてください)

答え:

A. "True"

解説:

x = 5は代入であり、if文の条件として評価されると、5は真(truthy)とみなされます。 そのため、ifの中のコードが実行されます。代わりに比較する場合は、x === 5を使うべきです。

Q2. セミコロンを付ける?付けない?

次のコードを実行するとどうなりますか? console.log("Hello World") console.log("This is JavaScript"); 選択肢(クリックしてください)

答え:

A. 正常に動作する

解説:

JavaScriptではセミコロンの自動挿入機能(ASI)が働き、コードが正しく動作します。 ただし、複雑なコードではエラーを招く可能性があるため、セミコロンを明示的に書くのが推奨されます。

Q3. 大文字小文字の区別

次のコードを実行するとどうなりますか? let myVariable = 100; console.log(MyVariable); 選択肢(クリックしてください)

答え:

B. エラーが発生する

解説:

JavaScriptでは変数名は大文字小文字を区別します。 myVariableとMyVariableは別の変数とみなされるため、MyVariableを参照するとReferenceErrorが発生します。

Q4. 閉じ忘れた括弧

次のコードを実行するとどうなりますか? function greet(name { console.log("Hello, " + name); } greet("Alice"); 選択肢(クリックしてください)

答え:

B. 括弧エラーが出る

解説:

関数の定義部分で括弧が閉じられていないため、構文エラー(SyntaxError)が発生します。 正しいコードは以下のようになります。 function greet(name) { console.log("Hello, " + name); } greet("Alice");

Q5. 配列のインデックス範囲外アクセス

次のコードを実行するとどうなりますか? let arr = [1, 2, 3]; console.log(arr[3]); 選択肢(クリックしてください)

答え:

A. undefinedが表示される

解説:

配列の範囲外のインデックスにアクセスすると、JavaScriptではエラーにはならずundefinedが返されます。 範囲内かどうか確認するには、arr.lengthを利用すると安全です。

Q6. 無限ループの書きミス

次のコードを実行するとどうなりますか? let i = 0; while (i < 5) { console.log(i); } 選択肢(クリックしてください)

答え:

B. 無限ループに入る

解説:

ループ内でiの値を変更していないため、条件i < 5が永遠に真となり、無限ループに陥ります。 修正例は以下のようにします。 let i = 0; while (i < 5) { console.log(i); i++; }

Q7. スコープのミス

次のコードを実行するとどうなりますか? if (true) { var x = 10; } console.log(x); 選択肢(クリックしてください)

答え:

A. 10が表示される

解説:

varで宣言した変数は関数スコープであり、ifブロック外でも参照可能です。 一方で、letやconstを使うとブロックスコープが適用され、エラーが発生します。 if (true) { let x = 10; // この場合、外では参照できません } console.log(x); // エラー

Q8. 型エラー

次のコードを実行するとどうなりますか? let x = "10"; let y = 5; console.log(x - y); 選択肢(クリックしてください)

答え:

A. 5が表示される

解説:

-(マイナス)演算子は数値として評価するため、xの文字列"10"が数値10に変換され、10 - 5として計算されます。 一方で、+(プラス)演算子では文字列連結が優先されます。

Q9. thisの文脈ミス

次のコードを実行するとどうなりますか? const obj = { value: 42, printValue: function() { setTimeout(function() { console.log(this.value); }, 1000); } }; obj.printValue(); 選択肢(クリックしてください)

答え:

C. undefinedが表示される

解説:

setTimeout内のfunction()はグローバルスコープで実行されるため、thisはwindow(またはundefined)を指します。 修正するにはarrow functionを使います。 setTimeout(() => { console.log(this.value); }, 1000);

Q10. 関数を即時実行しないミス

次のコードを実行するとどうなりますか? function greet() { console.log("Hello!"); } greet; 選択肢(クリックしてください)

答え:

D. 関数の定義が出力される

解説:

greetは関数そのものを参照しているため、実行されずに関数の定義が出力されます。 実行するにはgreet()と記述する必要があります。

あとがき

どれも、普通にプログラムを書いていて今でもよくやっちまうミスです。 エラーが出ないミスもあるので、テストやデバッグでちゃんと不具合を見つけないと、深刻なバグになりかねませんね。 気晴らしにこうしたクイズをやってみるのも面白くないですか?

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ