質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
前言
- 本記事では、JavaScriptのプリミティブ型を例として使用し、他のプログラミング言語とは異なる動作をすることを説明します。
- プリミティブ型の動作は、オブジェクトや配列とは異なり、ここではプリミティブ型を具体例として取り上げます。
何がメンタルモデル(mental model)か
メンタルモデルとは、私たちが物事の進行や動作を予期する際の認知過程を指します。
少し学術的に聞こえますが、例えば画面上にボタンのUIが表示されると、私たちはそのUIがクリック可能であり、クリック後に一連のイベントが発生することを予期します。そのため、ユーザーがこのUIが予想通りに動作しないと混乱することがあります。
では、なぜ私たちはこのようなUIをボタンと見なすのでしょうか?一つには私たちが置かれている環境、もう一つには経験が影響しています。ユーザーはウェブページに触れ始めたときからこのようなルールに基づいてボタンを判断し、そのため他のウェブページにも自然に適用されるのです。
例えばこのつまみ、なぜ私たちは見た瞬間に押すのではなく、回すことを考えるのでしょうか?日常生活において、円形の機構は大抵回転によって調整されるため、このルールを他の場所にも適用するのです。
また、ドアのハンドルについてはどうでしょうか。なぜ私たちは回すのではなく、押す方式で開けるのでしょうか?これもハンドルの動作に対する一定の認識があるため、押すことでドアが開くと予期するのです。
プログラミング言語を学ぶ際、学習の進行に伴い、私たちはプログラミング言語の動作に対するメンタルモデルを形成し、心の中でこれらのコードがどのように実行されるかを予期します。
メンタルモデルの重要性
ここではJavaScriptのコードを例に挙げます。
let a = 3;
let b = a + 3;
a += 1;
console.log(b); // b
これは非常に基本的なJavaScriptのコードで、経験者であれば答えや罠がどこにあるかを知っています。仮に私たちが誤ったメンタルモデルでこのコードを描写すると、以下のような結果になるかもしれません。
1. a+=1が実行される前:
2. a+=1が実行された後
自然に、a+1
があるので、円の中の3を4に変更します。
b=a+3
ですから、aが変更されたのでbが指す円も7に変わるべきです。したがって、理解が不正確な人は「7」と自然に答えるでしょう。
ここで強調したいのは、答えが間違っているとはいえ、これは学習者の完全な責任ではないということです。通常の思考パターンからすると、私はb = a + 3
を公式として理解しているため、その後のa+=1
でbも変化するのは当然と思うのです。
このような思考モデルを学習者が持つと、以降の学習で修正が非常に困難になり、自分では説明できないバグに直面しやすくなります。
どこに問題があったのか?
JavaScriptではプリミティブの値を変更することができません。この一文は短いように見えますが、初心者にとってその本質を理解するのは非常に難しいのです。
正しい動作は次のようになります:
プリミティブ型は値を変更できないため、円の中の3を直接4(3 + 1)に変更することはできません。新たに4の数字を作成し、aの矢印をそこに指す必要があります。元の3は変更されず(青い円)、aの値がどのように変化してもbの結果には影響しないのです。
「JavaScriptにおけるプリミティブ値は不変である」と教科書的に表現するよりも、私はこのように説明する方が好ましいです。これにより理解が深まり、実際のJavaScriptの動作方法と一致するからです。細かく観察すると、二つのモデルは非常に近いですが、最も重要なのは学習者がJavaScriptのプリミティブ値の特性と動作原理を理解しているかどうかです。
学習者が様々な例にそれを適用できるかどうかはメンタルモデルに依存します。もし学習者が常に最初のメンタルモデルを使用していると、「プリミティブ型はimmutable」という言葉を学習過程で見ても、容易に間違った結果を得てしまうのです。
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee