2024年2月14日

変数

ほとんどの場合、JavaScriptアプリケーションは情報を扱う必要があります。2つの例を挙げます。

  1. オンラインショップ - 情報には、販売されている商品やショッピングカートが含まれる場合があります。
  2. チャットアプリケーション - 情報には、ユーザー、メッセージなどが含まれる場合があります。

変数は、この情報を格納するために使用されます。

変数

変数とは、データのための「名前付きストレージ」です。変数を使って、商品、訪問者、その他のデータを格納できます。

JavaScriptで変数を作成するには、letキーワードを使用します。

以下のステートメントは、「message」という名前の変数を作成します(言い換えれば、_宣言_します)。

let message;

次に、代入演算子=を使用して、いくつかのデータを格納できます。

let message;

message = 'Hello'; // store the string 'Hello' in the variable named message

文字列は、変数に関連付けられたメモリ領域に保存されます。変数名を使用してアクセスできます。

let message;
message = 'Hello!';

alert(message); // shows the variable content

簡潔にするために、変数宣言と代入を1行にまとめることができます。

let message = 'Hello!'; // define the variable and assign the value

alert(message); // Hello!

1行で複数の変数を宣言することもできます。

let user = 'John', age = 25, message = 'Hello';

これは短く見えるかもしれませんが、お勧めしません。読みやすくするために、変数ごとに1行を使用してください。

複数行のバリアントは少し長くなりますが、読みやすくなります。

let user = 'John';
let age = 25;
let message = 'Hello';

複数行スタイルで複数の変数を定義する人もいます。

let user = 'John',
  age = 25,
  message = 'Hello';

…あるいは「カンマファースト」スタイルでさえも。

let user = 'John'
  , age = 25
  , message = 'Hello';

技術的には、これらすべてのバリアントは同じことを行います。そのため、個人の好みや美学の問題です。

letの代わりにvar

古いスクリプトでは、letの代わりに別のキーワードであるvarを見つけることもあります。

var message = 'Hello';

varキーワードは、letと_ほぼ_同じです。これも変数を宣言しますが、少し異なる「昔ながらの」方法です。

letvarには微妙な違いがありますが、今のところ私たちには関係ありません。古い「var」の章で詳しく説明します。

現実世界の例え

変数を、一意の名前のステッカーが貼られたデータ用の「箱」と考えると、簡単に理解できます。

たとえば、変数messageは、"message"というラベルが付いた箱の中に"Hello!"という値が入っていると想像できます。

箱の中にはどんな値でも入れることができます。

好きなだけ何度でも変更できます。

let message;

message = 'Hello!';

message = 'World!'; // value changed

alert(message);

値が変更されると、古いデータは変数から削除されます。

2つの変数を宣言し、一方から他方にデータをコピーすることもできます。

let hello = 'Hello world!';

let message;

// copy 'Hello world' from hello into message
message = hello;

// now two variables hold the same data
alert(hello); // Hello world!
alert(message); // Hello world!
2回宣言するとエラーが発生します。

変数は1回だけ宣言する必要があります。

同じ変数を繰り返し宣言するとエラーになります。

let message = "This";

// repeated 'let' leads to an error
let message = "That"; // SyntaxError: 'message' has already been declared

そのため、変数を1回宣言し、その後はletなしで参照する必要があります。

関数型言語

純粋関数型プログラミング言語(Haskellなど)は、変数値の変更を禁止していることは興味深いことです。

このような言語では、値が「箱」に格納されると、永久にそこに残ります。何か他に格納する必要がある場合、言語は新しい箱を作成する(新しい変数を宣言する)ことを強制します。古い箱を再利用することはできません。

一見すると少し奇妙に見えるかもしれませんが、これらの言語は本格的な開発に十分対応できます。それ以上に、並列計算のような分野では、この制限がある種の利点をもたらします。

変数の命名

JavaScriptの変数名には2つの制限があります。

  1. 名前には、文字、数字、または記号$_のみを含めることができます。
  2. 最初の文字は数字にしてはいけません。

有効な名前の例

let userName;
let test123;

名に複数の単語が含まれている場合は、キャメルケースがよく使用されます。つまり、単語は連続して続き、最初の単語を除く各単語は大文字で始まります:myVeryLongName

興味深いことに、ドル記号'$'とアンダースコア'_'も名前で使用できます。これらは、文字と同様に、特別な意味のない通常の記号です。

これらの名前は有効です。

let $ = 1; // declared a variable with the name "$"
let _ = 2; // and now a variable with the name "_"

alert($ + _); // 3

無効な変数名の例

let 1a; // cannot start with a digit

let my-name; // hyphens '-' aren't allowed in the name
大文字と小文字は区別されます

appleAPPLEという名前の変数は、2つの異なる変数です。

ラテン文字以外も使用できますが、お勧めしません。

キリル文字、漢字など、次のような言語を使用できます。

let имя = '...';
let 我 = '...';

技術的には、ここにはエラーはありません。このような名前は許可されていますが、変数名には英語を使用するという国際的な慣習があります。小さなスクリプトを書いていても、長い寿命があるかもしれません。いつか他の国の人々がそれを読まなければならないかもしれません。

予約語

言語自体で使用されているため、変数名として使用できない予約語のリストがあります。

たとえば、letclassreturnfunctionは予約されています。

以下のコードは構文エラーになります。

let let = 5; // can't name a variable "let", error!
let return = 5; // also can't name it "return", error!
use strictなしの代入

通常、変数を使用する前に定義する必要があります。しかし、昔は、letを使わずに値を代入するだけで変数を作成することが技術的に可能でした。これは、古いスクリプトとの互換性を維持するために、スクリプトにuse strictを記述しない場合、現在でも機能します。

// note: no "use strict" in this example

num = 5; // the variable "num" is created if it didn't exist

alert(num); // 5

これは悪い習慣であり、厳格モードではエラーが発生します。

"use strict";

num = 5; // error: num is not defined

定数

定数(変更不可)変数を宣言するには、letの代わりにconstを使用します。

const myBirthday = '18.04.1982';

constを使用して宣言された変数は「定数」と呼ばれます。再割り当てすることはできません。そうしようとするとエラーが発生します。

const myBirthday = '18.04.1982';

myBirthday = '01.01.2001'; // error, can't reassign the constant!

プログラマーは、変数が決して変化しないと確信している場合、constで宣言して、その事実を全員に保証し、伝えることができます。

大文字の定数

実行前にわかっている、覚えにくい値のエイリアスとして定数を使用することは広く行われています。

このような定数は、大文字とアンダースコアを使用して命名されます。

たとえば、いわゆる「ウェブ」(16進数)形式の色のための定数を作成してみましょう。

const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";

// ...when we need to pick a color
let color = COLOR_ORANGE;
alert(color); // #FF7F00

利点

  • COLOR_ORANGE"#FF7F00"よりもはるかに覚えやすいです。
  • COLOR_ORANGEよりも"#FF7F00"をタイプミスする方がはるかに簡単です。
  • コードを読むとき、COLOR_ORANGE#FF7F00よりもはるかに意味があります。

いつ定数に大文字を使用し、いつ普通に命名する必要があるのでしょうか?それを明確にしましょう。

「定数」であるということは、単に変数の値が決して変化しないことを意味します.しかし、実行前にわかっている定数(赤の16進数値など)と、実行時に_計算_されるが初期割り当て後は変更されない定数があります.

例えば

const pageLoadTime = /* time taken by a webpage to load */;

pageLoadTimeの値はページの読み込み前にわからないため、通常の名前が付けられます。しかし、割り当て後に変更されないため、依然として定数です.

言い換えれば、大文字で名前が付けられた定数は、「ハードコードされた」値のエイリアスとしてのみ使用されます.

適切な名前を付ける

変数について言えば、もう1つ非常に重要なことがあります.

変数名は、格納されているデータを記述する、明確でわかりやすい意味を持つ必要があります.

変数の命名は、プログラミングにおいて最も重要で複雑なスキルの1つです.変数名を見れば、どのコードが初心者によって書かれたのか、経験豊富な開発者によって書かれたのかがわかります.

実際のプロジェクトでは、ほとんどの時間が、ゼロから完全に別のものを書くのではなく、既存のコードベースを変更および拡張することに費やされます.しばらく他のことをした後、コードに戻ると、適切にラベル付けされた情報を見つける方がはるかに簡単です.言い換えれば、変数に適切な名前が付けられている場合です.

変数を宣言する前に、変数に適切な名前を考える時間を割いてください.そうすることで、あなたは報われるでしょう.

従うべき良いルールは次のとおりです.

  • userNameshoppingCartのような人間が読める名前を使用してください.
  • 自分が何をしているのかわからない限り、略語やabcのような短い名前は避けてください.
  • 名前をできるだけ説明的で簡潔にしてください.悪い名前の例は、datavalueです.このような名前は何も語りません.変数がどのデータまたは値を参照しているかがコードのコンテキストから非常に明白な場合にのみ、それらを使用しても問題ありません.
  • チーム内およびあなた自身の心の中で用語に同意してください.サイト訪問者が「ユーザー」と呼ばれる場合、関連する変数はcurrentVisitorまたはnewManInTownではなく、currentUserまたはnewUserと名付ける必要があります.

簡単そうに聞こえますか?確かにそうですが、実際に説明的で簡潔な変数名を作成するのは簡単ではありません.頑張ってください.

再利用するか作成するか?

そして最後の注意.新しい変数を宣言する代わりに、既存の変数を再利用する傾向がある怠惰なプログラマーがいます.

その結果、彼らの変数は、人々がステッカーを変えずにさまざまなものを投げ込む箱のようなものです.箱の中には今何が入っていますか?誰が知っていますか?近づいて確認する必要があります.

そのようなプログラマーは変数宣言で少しだけ節約できますが、デバッグでは10倍以上の時間を失います。

余分な変数は良いことであり、悪いことではありません。

最新のJavaScriptミニファイアーとブラウザーはコードを十分に最適化するため、パフォーマンスの問題は発生しません。異なる値に異なる変数を使用すると、エンジンがコードを最適化するのに役立つ場合があります。

まとめ

varlet、またはconstキーワードを使用して、データを格納する変数を宣言できます。

  • let – 現代的な変数宣言です。
  • var – 昔ながらの変数宣言です。通常はまったく使用しませんが、必要な場合に備えて、古い "var"の章でletとの微妙な違いについて説明します。
  • constletに似ていますが、変数の値を変更することはできません。

変数は、その中に何が入っているかを簡単に理解できるように名前を付ける必要があります。

タスク

重要度: 2
  1. adminnameの2つの変数を宣言します。
  2. nameに値"John"を代入します。
  3. nameからadminに値をコピーします。
  4. alertを使用してadminの値を表示します(「John」を出力する必要があります)。

以下のコードでは、各行がタスクリストの項目に対応しています。

let admin, name; // can declare two variables at once

name = "John";

admin = name;

alert( admin ); // "John"
重要度: 3
  1. 私たちの惑星の名前を持つ変数を作成します。そのような変数にどのような名前を付けますか?
  2. Webサイトの現在の訪問者の名前を格納する変数を作成します。その変数にどのような名前を付けますか?

私たちの惑星の変数

これは簡単です

let ourPlanetName = "Earth";

短い名前planetを使用することもできますが、どの惑星を指しているのかが明確でない場合があります。より冗長な方が良いでしょう。少なくとも変数が長すぎるまでは。

現在の訪問者の名前

let currentUserName = "John";

ここでも、ユーザーが現在であることが確実であれば、userNameに短縮できます。

最新のエディターとオートコンプリートにより、長い変数名も簡単に記述できます。節約しないでください。3つの単語を含む名前で問題ありません。

エディターに適切なオートコンプリート機能がない場合は、新しいエディターを入手してください

重要度: 4

次のコードを調べてください

const birthday = '18.04.1982';

const age = someCode(birthday);

ここでは、日付の定数birthdayと、年齢の定数ageがあります。

agesomeCode()を使用してbirthdayから計算されます。これはまだ説明していない関数呼び出しを意味しますが(すぐに説明します!)、詳細はここでは重要ではありません。重要なのは、agebirthdayに基づいて何らかの方法で計算されるということです。

birthdayに大文字を使用するのは正しいでしょうか? ageの場合はどうでしょうか? あるいは両方とも?

const BIRTHDAY = '18.04.1982'; // make birthday uppercase?

const AGE = someCode(BIRTHDAY); // make age uppercase?

一般的に、大文字は「ハードコーディング」された定数に使用します。言い換えれば、値が実行前に既知であり、コードに直接書き込まれている場合です。

このコードでは、birthdayはまさにそのようなものです。そのため、大文字を使用できます。

対照的に、ageは実行時に評価されます。今日はある年齢で、1年後には別の年齢になります。コードの実行中に変更されないという意味では定数です。しかし、birthdayよりも少し「定数性が低い」です。計算されるため、小文字のままにしておく必要があります。

チュートリアルマップ

コメント

コメントする前にこれを読んでください…
  • 改善すべき点に関する提案がある場合は、コメントする代わりに、GitHub issueまたはプルリクエストを送信してください。
  • 記事の内容が理解できない場合は、詳しく説明してください。
  • 数語のコードを挿入するには、<code>タグを使用します。複数行の場合は、<pre>タグで囲みます。10行を超える場合は、サンドボックス(plnkrjsbincodepenなど)を使用します。