前回は、「変数」と「代入」という用語を学びました。知識のお話ですね。それに対して、今まで「定義」という単語も使ってきましたが、これは知識の話ではなく、Google翻訳先生がエラーメッセージの「define」を「定義」と訳しただけのことです。そして、前回まで、「変数」は「定義」してから使用してきました。そうしないとエラーになってしまいますからね。
ただ、
「変数は定義しないと使用することが出来ない」
という表現は、正しいと言えば正しいのですが、正確ではありません。そもそも「定義」はGoogle翻訳先生から出てきた単語で、正式用語ではありませんからね。
では、正式な用語を使用した表現では何と言えばよいのかというと
「変数は宣言しないと使用することが出来ない」
となります。「変数の宣言」が正式用語です。
「宣言」が正式用語であるにもかかわらず、何故Google翻訳先生は「定義」と訳したのでしょうか? 翻訳ミス? 流石にそんなことは無いですね。「define」は「宣言」ではないでしょう。が、変数を定義せずに使用した場合のエラーメッセージは、
「'変数名' is not defined」
であることに間違いはないのです。
ここで、前回のパートを思い出していただきたいのですが、4行目で「1つの文で複数の処理を行なう」ことを学びましたよね。
const g = ca.getContext( '2d' ); // 変数gを定義。代入内容は不明
変数の定義をして、代入もしている、というお話でしたが、「定義」は正式用語ではなく、「宣言」が正しいわけですよね。そうなると、ここのコメントは、
const g = ca.getContext( '2d' ); // 変数gを宣言。代入内容は不明
とすべきでしょう。そして、この「変数の宣言と代入」という2つで1文の処理をコメントアウトすると、
SCRIPT5009: SCRIPT5009: 'g' is not defined
と言われてしまうわけですから、まとめると、
「変数の宣言と代入」を行なわないと、定義していない!
と言われてしまうということですよね。つまり、
「変数の宣言をして代入もする」と「定義した」
ということになるのです。
「宣言」や「代入」といった用語は、その意味合いが厳密なのですが、残念ながら「定義」に関してはあいまいなんです。慣れてくれば、なんとなく分かってくると思うのですが、初心者のうちは、そういうのは混乱の元ですよね。
ちなみに、JavaScript言語以外でも、当然ながら「変数の定義」といった概念がある言語は多いのですが(無い言語もありますけど)、その言語によってもまた「定義」のニュアンスが微妙に異なったりします。他者との会話で「変数の定義」という台詞を使う場合は注意しましょう!
というわけで、この講座では、今後極力「変数の定義」とは言わないようにしたいと思います。「変数を宣言して代入」と言えば良いだけですからね。コメントも書き換えておきましょう!
window.onload = function( ev ) // 文ではない何か
{ // 不明な行
const ca = document.getElementById( 'main' ); // 変数caを宣言。代入内容は不明
const g = ca.getContext( '2d' ); // 変数gを宣言。代入内容は不明
g.font = "40px monospace"; // 変数gの書体を40ドットへ
g.fillStyle = "#ff0000"; // 変数gの描画色を赤へ
g.fillText( "こんにちは世界", 40, 80 ); // 変数gへ文字列を描画
} // 不明な行