ホームページ  >  記事  >  ウェブフロントエンド  >  ジョージとロバートはバーに入っていきます...

ジョージとロバートはバーに入っていきます...

PHPz
PHPzオリジナル
2024-07-16 17:02:50858ブラウズ

George and Robert walk into a bar...

このタイトルは、ここであなたを待っているのはジョークだけであるように聞こえるかもしれません(SEO の破壊者です、私は知っています)。がっかりして申し訳ありません。この投稿は実際には、ES2021 で導入された JavaScript の論理代入演算子に関するものです。ジョージとロバートがこれにどのような関係があるのか​​を知るために読み続けてください...

歴史的背景

論理代入演算子は、基本的にブール論理と代入演算を組み合わせたものです。しかし、これらのコンポーネントには、最初に考えられる以上の意味があります。

まず、ほとんどではないにしても、多くの開発者は、ブール論理が現代のコンピューティングの構造にどれほど深く組み込まれているかを理解していない可能性があります。これは、コンピューター回路からコード内の条件文にまで及びます。

私たちは等号も毎日、深く考えずに使用しています。この記号は現在数学とコーディングの両方で重要ですが、16 世紀に数学的な目的で発明されました。約 400 年後の 1950 年代に、それはコンピューター プログラミングに取り入れられました。

この歴史的背景が少しも興味をそそられない場合は、「論理代入演算子を理解する」セクションに進んでください。それ以外の場合は、時間を遡る短い旅に参加してください。

ジョージ・ブール

論理学の最も初期の研究は、古代ギリシャ人、特に「論理学の父」と呼ばれることが多いアリストテレスによるものと考えられています。彼は、論理演算子の使用の基礎を築く正式な論理システムを開発しました。

今日私たちが知っている論理演算子の実際の数学的基礎は、19 世紀の記号論理の出現とともに形を作り始めました。記号を使用して論理的な形式と構造を表現することで、より複雑で抽象的な推論が可能になります。

19 世紀の英国の数学者であり論理学者であるジョージ・ブールは、独創的な著書「思考の法則」(1854 年) の中で、論理に対する代数的アプローチを導入しました。ここで、値は true または false のいずれかであり、代数演算と同様にこれらの値に対して演算を実行できます。このシステムには、基本的な論理演算子が含まれていました:

  • AND (接続詞)
  • OR (論理和)
  • NO (否定)

ブールの研究に基づいて、他の数学者や論理学者が記号論理の範囲と深さを拡大しました。そして 20 世紀半ばには、コンピュータ サイエンスの新興分野に新たな肥沃な土壌が見つかりました。ブール論理のバイナリの性質は、データを一連の 0 と 1 として表現でき、論理演算子がこのデータの流れを制御できる、コンピューターの中心部のデジタル回路に完全に適していることが証明されました。

論理演算子はプログラミング言語の基本部分となり、ソフトウェアで複雑な計算ロジックと意思決定プロセスを構築できるようになりました。現在、これらはほぼすべてのプログラミング言語の構文に不可欠です。

ロバート・レコード

等号は、1557 年にウェールズの数学者ロバート レコーデによってその著書「ウィッテの砥石」で導入されました。 Recorde は、自分の作品の中で「等しい」を繰り返し書くのに飽きたので、等しいことを表す記号として同じ長さの 2 本の平行線を選びました。彼の言葉を借りれば、それは「2 つの命が平等になれるから」だったのです。これは数学的表記法の重要な発展であり、等価性を表現するための簡潔かつ明確な方法を提供しました。

プログラミング、特にマシンコードとアセンブリ言語の初期の頃、「割り当て」の概念は、レジスタとメモリ位置の間でデータを保存したり移動したりすることでした。命令は、マシンにこれらの操作を実行するよう指示する特定のオペコードを使用して与えられました。

高級プログラミング言語が開発されるにつれて、変数に値を割り当てる操作を表現するための、より抽象的で人間が判読できる方法が必要になりました。これにより、1950 年代の FORTRAN から始まり、多くの言語で代入演算子として等号が採用されるようになりました。

代入に = を使用すると、等価性の数学的意味に多少のあいまいさが生じました。その結果、プログラミングの意図を明確にするためにさまざまなシンボルが導入されました。

  • 1960 年代に開発された Algol は、代入に := 記号を導入し、等価比較と区別しました。
  • C はその後、代入には = を使用し、等価性テストには == を使用することを普及させました。これは、その後の多くの言語が従う慣例です。

時間の経過とともに、プログラミング言語では、複合代入演算子 (+=、-= など) や、最近では JavaScript の論理代入演算子など、さまざまな演算を効率的に処理するためにさまざまな形式の代入演算子が導入されてきました。

論理代入演算子を理解する

論理代入演算子は、代入 (=) と論理 (&&、||) またはヌル合体 (??) 演算子を組み合わせる JavaScript の糖衣構文です。 3 つのタイプがあります:

  • 論理 AND 代入 (&&=): 左の変数が真実である場合にのみ、右の値を左の変数に代入します。
  • 論理 OR 代入 (||=): 左側の変数が false の場合にのみ、右側の値を左側の変数に割り当てます。
  • Nullish Coalescing Assignment (??=): 左側の変数が null または未定義の場合にのみ、右側の値を左側の変数に割り当てます。

論理 AND 代入 (&&=)

&&= 演算子は、変数が現在正しい値を保持している場合にのみ変数の値を設定するためのショートカットです。これは、特定の条件が true のままである場合にのみアクションを続行する必要があるシナリオで特に役立ちます。

使用例: 機能切り替え

特定の機能を管理者のみに有効にするシナリオを想像してください。

const isAdmin = user.isAdmin();
let canAccessDashboard = isAdmin;

canAccessDashboard &&= user.isAuthenticated();
console.log(canAccessDashboard); // true if user is authenticated, otherwise false

このコード スニペットは、isAdmin と user.isAuthenticated() の両方が true の場合にのみ canAccessDashboard が true であることを保証し、2 つの条件の背後で機能を効果的に保護します。

論理和の代入 (||=)

||= 演算子を使用すると、変数が現在偽の値 (例: null、未定義、0、false、"") を保持している場合に、変数に値を割り当てることができます。これはデフォルト値を設定するのに非常に便利です。

使用例の例: デフォルトの設定

const userSettings = {
  theme: null,
};

// Set default theme if none is specified
userSettings.theme ||= "dark";
console.log(userSettings.theme); // Outputs 'dark'

この演算子は、設定されていない変数を初期化する場合に最適で、0 や false などの潜在的に意味のある誤った値を上書きすることなく、アプリケーションで適切なデフォルトが使用されるようにします。

ヌル合体割り当て (??=)

?? null 合体演算子として知られる演算子は、比較的最近プログラミング言語に追加されたものです。 ES2021 仕様では論理代入演算子として分類されていますが、論理演算子に基づいていないため、厳密な意味では論理代入演算子ではありません。むしろ、その開発は、特に null と未定義の値をクリーンかつ予測可能な方法で処理する際の、プログラミングの実際のニーズにより密接に結びついています。

??= 演算子は、変数が現在 null または未定義である場合にのみ、変数に値を代入するために使用されます。これは、他の偽の値も考慮する ||= 演算子よりも正確です。

使用例の例: デフォルト設定

const config = {
  timeout: 0,
};

config.timeout ??= 5000; // Set default timeout if not specified, i.e. undefined, or null
console.log(config.timeout); // Outputs 0, preserving the explicitly set falsy value

この演算子は、0 などの他の誤った有効な設定を置き換えずに、デフォルトが欠落している値のみを埋める必要がある構成や設定で特に役立ちます。

実際的な利点と考慮事項

if ステートメントや 3 項ステートメントの代わりに論理代入演算子を使用すると、記述する必要があるコードの量が減り、他の開発者に意図をより明確に伝えることができます。多くの機能と同様、重要なのは、特にコードのコンテキストで有効な偽の値を扱う場合、これらの演算子を慎重に使用することです。

追記

JavaScript には、左シフト代入演算子 (<<=) など、さらに多くの代入演算子があります。これらは私にはあまり当てはまらないように思えますが、いつか別の投稿をする価値があるかもしれません...

(Freepik の starline によるトップのカバー画像)

以上がジョージとロバートはバーに入っていきます...の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。