前言
- 本記事では、JavaScriptのプリミティブ型を例に挙げ、他のプログラミング言語との違いについて説明します。
- プリミティブ型の動作はオブジェクトや配列とは異なります。ここではプリミティブ型のみを例に挙げます。
心のモデルとは何ですか
心のモデルとは、物事の発展を予測したり、物事がどのように動作するかを認識するプロセスのことです。
少し学術的に聞こえるかもしれませんが、例えば画面上でボタンの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コードの動作方法を示しています。注意深く観察すると、2つのモデルは非常に似ていますが、最も重要な違いは、学習者がJavaScriptのプリミティブ値の特性と動作原理を理解しているかどうかです。
学習者がこれをさまざまな例に適用できるかどうかは、心のモデルに依存します。学習者が常に最初のモデルを使用する場合、学習過程で「プリミティブ型は変更できない」という文を見ていても、間違った結果を得る可能性が高いです。