「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ジョージとロバートはバーに入っていきます...

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

2024 年 8 月 1 日に公開
ブラウズ:180

George and Robert walk into a bar...

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

歴史的背景

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

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

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

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

ジョージ・ブール

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

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

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

が含まれていました。
  • AND (接続詞)
  • OR (論理和)
  • NOT (否定)

ブールの研究に基づいて、他の数学者や論理学者が記号論理の範囲と深さを拡大しました。そして 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、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 によるトップのカバー画像)

リリースステートメント この記事は次の場所に転載されています: https://dev.to/codejet/george-and-robert-walk-into-a-bar-413e?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • React を使用した Loop Studio の構築
    React を使用した Loop Studio の構築
    導入 Loop Studio は、さまざまな仮想現実 (VR) プロジェクトを紹介するために設計された没入型 Web サイトです。 React を使用すると、さまざまなコンポーネントを効率的に管理およびレンダリングして、一貫性のあるインタラクティブなユーザー エクスペリエンスを構築...
    プログラミング 2024 年 11 月 6 日に公開
  • PHP を使用して CURL で多次元配列を送信するときに発生する「配列から文字列への変換」エラーを解決する方法
    PHP を使用して CURL で多次元配列を送信するときに発生する「配列から文字列への変換」エラーを解決する方法
    CURL および PHP を使用した多次元配列の送信CURL を使用して多次元配列を含むフォーム データを送信するときに、「配列から文字列への変換」エラーが発生することがよくあります。この問題は、配列を含む配列で CURLOPT_POSTFIELDS を設定しようとすると発生します。ファイル転送を容...
    プログラミング 2024 年 11 月 6 日に公開
  • Selenium で「span:contains(\'String\')」\ による InvalidSelectorException を解決する方法
    Selenium で「span:contains(\'String\')」\ による InvalidSelectorException を解決する方法
    「span:contains('String')」による Selenium の無効な SelectorExceptionFirefox で Python の Selenium を使用するときに、 CSS セレクター「span:contains('コントロール パネル'...
    プログラミング 2024 年 11 月 6 日に公開
  • InnerHTML の落とし穴を回避して HTML をコンテナ要素に追加するにはどうすればよいですか?
    InnerHTML の落とし穴を回避して HTML をコンテナ要素に追加するにはどうすればよいですか?
    innerHTML を使用しないコンテナ要素への HTML の追加再訪当面の問題は、制限を回避しながら HTML をコンテナ要素に追加する方法です。 innerHTML プロパティを使用する場合の落とし穴。 OP が正しく指摘しているように、innerHTML は既存のコンテンツを置き換える動作によ...
    プログラミング 2024 年 11 月 6 日に公開
  • 継続的テスト: DevOps パイプラインの品質を確保する
    継続的テスト: DevOps パイプラインの品質を確保する
    継続的なテストは、最新のソフトウェア開発、特に DevOps フレームワーク内での重要な実践です。これには、コードベースに加えられたすべての変更が完全に検証されていることを確認するために、ソフトウェア配信パイプライン全体でのテストの自動実行が含まれます。開発プロセスのすべての段階にテストを統合する...
    プログラミング 2024 年 11 月 6 日に公開
  • 背景色の変更動画
    背景色の変更動画
    インスタグラムをフォローしてください このビデオチュートリアルでは、HTML、CSS、JavaScript を使用して素晴らしい Instagram カードを作成する方法を説明します。このカードには、色が変化する鮮やかな境界線、円形のプロフィール写真、およびオンラインでの存在感に魅力的なタッチを加え...
    プログラミング 2024 年 11 月 6 日に公開
  • PHPを使用してブラウザのキャッシュをクリアするにはどうすればよいですか?
    PHPを使用してブラウザのキャッシュをクリアするにはどうすればよいですか?
    PHP を使用したブラウザ キャッシュのクリアブラウザ キャッシュにより、頻繁にアクセスされるファイルがローカルに保存され、Web サイトの読み込み時間が短縮されます。ただし、キャッシュされたファイルが古い場合は、テストや開発に支障をきたす可能性もあります。この記事では、PHP を使用してブラウザの...
    プログラミング 2024 年 11 月 6 日に公開
  • Go を使用した AWS Lambda、初期定型文
    Go を使用した AWS Lambda、初期定型文
    Unsplash の Lukáš Vaňátko による写真 導入 Go はそのシンプルさから、常に私のお気に入りの言語の 1 つです。最近、Go で書かれたラムダ関数を使用した単純な定型的なサーバーレス プロジェクトを作成するには何が必要かを理解することにしました。ツールと開発者の...
    プログラミング 2024 年 11 月 6 日に公開
  • Laravelで空の値が一番下にあり空でない値がある行を降順で並べ替える
    Laravelで空の値が一番下にあり空でない値がある行を降順で並べ替える
    データベースを操作する場合、一部のフィールドが空または NULL になる状況がよく発生します。よく発生する課題の 1 つは、空のフィールドを含む行が結果セットの最後に表示され、空ではない値を含む行が意味のある方法 (降順など) で並べられるようにレコードを並べ替える方法です。この投稿では、実用的な例...
    プログラミング 2024 年 11 月 6 日に公開
  • オリーブオイルの利点
    オリーブオイルの利点
    オリーブオイルの利点 地中海食の基礎としてよく称賛されるオリーブオイルは、さまざまな料理に風味を加えるだけでなく、健康上の利点も満載です。オリーブの木の果実から抽出されるオリーブオイルは何世紀にもわたって使用されており、現代の研究によりその多くの利点が明らかになり続けています。オリ...
    プログラミング 2024 年 11 月 6 日に公開
  • JSON Diff: 開発者向けの完全ガイド
    JSON Diff: 開発者向けの完全ガイド
    JSON (JavaScript Object Notation) は、システム間で情報を交換するために広く使用されているデータ形式です。開発者が API、データベース、構成を操作する場合、JSON データの一貫性と正確性を確保することが不可欠です。ここで JSON diff が役に立ちます。 J...
    プログラミング 2024 年 11 月 6 日に公開
  • 知っておくべき avascript のヒント
    知っておくべき avascript のヒント
    ジョアブ・チュア著 1. コンソール.ログ コンソール ログに色を追加 これだけはやめてください! ❌ 代わりにこれを試してください。 ✅ しかし、オブジェクトの配列がある場合は、これを試してみるとさらに良いでしょう ? コード内で特定の操作がどのくらい速く実行されるかを測定したい場...
    プログラミング 2024 年 11 月 6 日に公開
  • Python を使用して Google Scholar をスクレイピングする技術を習得する
    Python を使用して Google Scholar をスクレイピングする技術を習得する
    学術研究やデータ分析に取り組んでいる場合、Google Scholar のデータが必要になる場合があります。残念ながら、公式の Google Scholar API Python サポートがないため、このデータの抽出は少し難しくなります。ただし、適切なツールと知識があれば、Google Schola...
    プログラミング 2024 年 11 月 6 日に公開
  • Go、クリーン アーキテクチャ、PostgreSQL による堅牢な電子商取引プラットフォームの構築
    Go、クリーン アーキテクチャ、PostgreSQL による堅牢な電子商取引プラットフォームの構築
    概要 私たちの目標は、商品管理から注文処理まですべてを処理できる総合的な電子商取引ソリューションを開発することです。このプラットフォームは、オンライン ビジネスの強固な基盤として機能し、需要の増大に合わせて拡張し、市場のニーズの変化に適応することができます。 当社の e コマース ...
    プログラミング 2024 年 11 月 6 日に公開
  • Redis の説明: 主な機能、使用例、実践的なプロジェクト
    Redis の説明: 主な機能、使用例、実践的なプロジェクト
    Introduction Redis is an open-source, in-memory data structure store used as a database, cache, and message broker. It’s known for its perfor...
    プログラミング 2024 年 11 月 6 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3