ジョージとロバートはバーに入っていきます...
このタイトルは、ここであなたを待っているのはジョークだけであるように聞こえるかもしれません(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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。
