このタイトルを見ると、ここにはジョークしか待っていないように聞こえるかもしれません (SEO の惨事です、私は知っています)。がっかりして申し訳ありません。この投稿は実際には、ES2021 で導入された JavaScript の論理代入演算子に関するものです。ジョージとロバートがこれにどのような関係があるのかを知るために読んでください...
論理代入演算子は、基本的にブール論理と代入演算を組み合わせたものです。しかし、これらのコンポーネントには、最初に考えられる以上の意味があります。
まず、ほとんどではないにしても、多くの開発者は、ブール論理が現代のコンピューティングの構造にどれほど深く組み込まれているかを理解していない可能性があります。これは、コンピュータ回路からコード内の条件文にまで及びます。
私たちは、あまり考えずに等号を日常的に使用しています。この記号は現在数学とコーディングの両方で重要ですが、16 世紀に数学的な目的で発明されました。約 400 年後の 1950 年代に、それはコンピューター プログラミングに取り入れられました。
この歴史的背景が少しも興味をそそられない場合は、「論理代入演算子を理解する」セクションまで進んでください。それ以外の場合は、時間を遡る短い旅に参加してください。
論理学の最も初期の研究は、古代ギリシャ人、特に「論理学の父」と呼ばれることが多いアリストテレスによるものと考えられています。彼は、論理演算子の使用の基礎を築く正式な論理システムを開発しました。
今日私たちが知っている論理演算子の実際の数学的基礎は、19 世紀の記号論理の出現とともに形を作り始めました。記号を使用して論理的な形式と構造を表すことで、より複雑で抽象的な推論が可能になります。
19 世紀のイギリスの数学者であり論理学者であるジョージ・ブールは、独創的な著書「思考の法則」(1854 年) の中で、論理に対する代数的アプローチを導入しました。ここで、値は true または false のいずれかであり、代数演算と同様にこれらの値に対して演算を実行できます。このシステムには、基本的な論理演算子
が含まれていました。ブールの研究に基づいて、他の数学者や論理学者が記号論理の範囲と深さを拡大しました。そして 20 世紀半ばには、コンピュータ サイエンスの新興分野に新たな肥沃な土壌が見つかりました。ブール論理のバイナリの性質は、データを一連の 0 と 1 として表現でき、論理演算子がこのデータの流れを制御できる、コンピューターの中心部のデジタル回路に完全に適していることが証明されました。
論理演算子はプログラミング言語の基本部分となり、ソフトウェアでの複雑な計算ロジックと意思決定プロセスの構築を可能にします。現在、これらはほぼすべてのプログラミング言語の構文に不可欠です。
等号は、1557 年にウェールズの数学者ロバート レコーデの著書『ウィッテの砥石』で導入されました。 Recorde は、自分の作品の中で「等しい」を繰り返し書くのに飽きたので、等しいことを表す記号として同じ長さの 2 本の平行線を選びました。彼の言葉を借りれば、それは「2 つの命が平等になれるから」だったのです。これは数学的表記法の重要な発展であり、等価性を表現するための簡潔かつ明確な方法を提供しました。
プログラミング、特にマシンコードとアセンブリ言語の初期の頃、「割り当て」の概念はレジスタとメモリ位置の間でデータを保存したり移動したりすることでした。命令は、マシンにこれらの操作を実行するよう指示する特定のオペコードを使用して与えられました。
高級プログラミング言語が開発されるにつれて、変数に値を代入する操作を表現するための、より抽象的で人間が判読できる方法が必要になりました。これにより、1950 年代の FORTRAN から始まり、多くの言語で代入演算子として等号が採用されるようになりました。
代入に = を使用すると、等価性の数学的意味に多少のあいまいさが生じます。その結果、プログラミングの意図を明確にするためにさまざまな記号が導入されました:
時間の経過とともに、プログラミング言語は、複合代入演算子 (=、-= など) や、最近では JavaScript の論理代入演算子など、さまざまな演算を効率的に処理するためにさまざまな形式の代入演算子を導入してきました。
論理代入演算子は、代入 (=) と論理 (&&、||) またはヌル合体 (??) 演算子を組み合わせた JavaScript の糖衣構文です。
の 3 種類があります。&&= 演算子は、変数が現在正しい値を保持している場合にのみ変数の値を設定するためのショートカットです。これは、特定の条件が 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、unknown、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 によるトップのカバー画像)
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3