>웹 프론트엔드 >JS 튜토리얼 >조지와 로버트가 술집에 들어가는데...

조지와 로버트가 술집에 들어가는데...

PHPz
PHPz원래의
2024-07-16 17:02:50946검색

George and Robert walk into a bar...

제목이 마치 농담만 기다리고 있는 것처럼 들릴 수도 있습니다(SEO 재앙이군요. 저도 알아요). 실망시켜서 죄송합니다. 이 게시물은 실제로 ES2021에 도입된 JavaScript의 논리적 할당 연산자에 관한 것입니다. George와 Robert가 이 문제와 어떤 관련이 있는지 알아보려면 계속 읽어보세요...

역사적 배경

논리 할당 연산자는 기본적으로 부울 논리와 할당 연산이 혼합된 것입니다. 하지만 이러한 구성 요소에는 처음에 생각했던 것보다 더 많은 것이 있습니다.

한 가지, 대부분은 아니지만 많은 개발자가 부울 논리가 현대 컴퓨팅 구조에 얼마나 깊이 얽혀 있는지 깨닫지 못할 수도 있습니다. 이는 컴퓨터 회로에서 코드의 조건문까지 확장됩니다.

우리는 등호를 매일 사용하지만 별 생각 없이 사용하는 경우가 많습니다. 현재 수학과 코딩 모두에서 중요한 역할을 하는 이 기호는 16세기에 수학적 목적으로 발명되었습니다. 약 400년 후인 1950년대에 컴퓨터 프로그래밍에 등장했습니다.

이러한 역사적 맥락이 전혀 흥미롭지 않다면 논리 할당 연산자 이해 섹션으로 건너뛰셔도 됩니다. 아니면 저와 함께 시간을 거슬러 짧은 여행을 떠나보세요.

조지 부울

논리학에 대한 최초의 연구는 고대 그리스인, 특히 종종 "논리학의 아버지"라고 불리는 아리스토텔레스에 기인합니다. 그는 논리 연산자 사용의 토대를 마련한 정형 논리 시스템을 개발했습니다.

오늘날 우리가 알고 있는 논리 연산자의 실제 수학적 기초는 19세기 기호 논리학의 출현과 함께 구체화되기 시작했습니다. 기호를 사용하여 논리적 형태와 구조를 표현하므로 더욱 복잡하고 추상적인 추론이 가능합니다.

19세기 영국의 수학자이자 논리학자인 조지 부울(George Boole)은 그의 주요 저서 "사고의 법칙"(1854)에서 논리학에 대한 대수적 접근 방식을 도입했습니다. 여기서 값은 true 또는 false일 수 있으며 대수 연산과 유사하게 이러한 값에 대해 연산을 수행할 수 있습니다. 이 시스템에는 기본 논리 연산자가 포함되어 있습니다.

  • AND(접속사)
  • OR(분리)
  • NOT(부정)

Boole의 연구를 바탕으로 다른 수학자 및 논리학자들이 기호 논리학의 범위와 깊이를 확장했습니다. 그리고 20세기 중반에 컴퓨터 과학이라는 새로운 분야에서 새롭고 비옥한 기반을 찾았습니다. 부울 논리의 이진 특성은 데이터가 일련의 0과 1로 표시될 수 있고 논리 연산자가 이 데이터의 흐름을 제어할 수 있는 컴퓨터 핵심의 디지털 회로에 완벽하게 적합한 것으로 입증되었습니다.

논리 연산자는 프로그래밍 언어의 기본 부분이 되었으며, 소프트웨어에서 복잡한 계산 논리와 의사 결정 프로세스를 구성할 수 있게 되었습니다. 오늘날 이는 거의 모든 프로그래밍 언어의 구문에 필수적입니다.

로버트 레코드

등호는 1557년 웨일스의 수학자 로버트 리코데(Robert Recorde)가 그의 저서 '위트의 숫돌(The Whetstone of Witte)'에서 처음 소개했습니다. Recorde는 자신의 작품에서 "같음"을 반복적으로 쓰는 것에 지쳐서 평등의 상징으로 같은 길이의 두 개의 평행선을 선택했습니다. 그가 말했듯이, "두 가지 모두가 동등할 수는 없습니다." 이는 평등을 간결하고 명확하게 표현하는 방법을 제공하는 수학 표기법의 중요한 발전이었습니다.

프로그래밍 초기, 특히 기계어 코드와 어셈블리 언어의 경우 '할당' 개념은 레지스터와 메모리 위치 간에 데이터를 저장하고 이동하는 것에 관한 것이었습니다. 기계에 이러한 작업을 수행하도록 지시하는 특정 opcode를 사용하여 지침이 제공되었습니다.

고급 프로그래밍 언어가 개발됨에 따라 변수에 값을 할당하는 작업을 표현하기 위해 보다 추상적이고 사람이 읽을 수 있는 방법이 필요했습니다. 이로 인해 1950년대 FORTRAN을 시작으로 여러 언어에서 등호를 대입 연산자로 채택하게 되었습니다.

할당에 =를 사용하면 평등이라는 수학적 의미가 모호해졌습니다. 이로 인해 프로그래밍 의도를 명확히 하기 위해 다양한 기호가 도입되었습니다.

  • 1960년대에 개발된 알골은 동등 비교와 구별하기 위해 할당에 := 기호를 도입했습니다.
  • C는 나중에 할당에 =를 사용하고 동일성 테스트에 ==를 사용하게 되었으며, 이는 많은 후속 언어에서도 이 규칙을 따랐습니다.

시간이 지남에 따라 프로그래밍 언어에는 다양한 작업을 효율적으로 처리하기 위해 복합 할당 연산자(+=, -= 등)와 최근에는 JavaScript의 논리 할당 연산자와 같은 다양한 형태의 할당 연산자가 도입되었습니다.

논리적 할당 연산자 이해

논리 할당 연산자는 할당(=)을 논리(&&, ||) 또는 null 병합(??) 연산자와 결합하는 JavaScript의 설탕 구문입니다. 세 가지 유형이 있습니다:

  • 논리적 AND 할당(&&=): 왼쪽 변수가 참인 경우에만 오른쪽 값을 왼쪽 변수에 할당합니다.
  • 논리 OR 할당(||=): 왼쪽 변수가 거짓인 경우에만 오른쪽 값을 왼쪽 변수에 할당합니다.
  • 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가 되도록 보장하여 두 가지 조건 뒤에 있는 기능을 효과적으로 보호합니다.

논리적 OR 할당(||=)

||= 연산자를 사용하면 변수에 현재 잘못된 값(예: 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와 같이 잠재적으로 의미 있는 거짓 값을 덮어쓰지 않고 애플리케이션이 합리적인 기본값을 사용하도록 보장합니다.

Nullish 병합 할당(??=)

?? nullish 병합 연산자로 알려진 연산자는 비교적 최근에 프로그래밍 언어에 추가되었습니다. 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 또는 삼항 문 대신 논리 할당 연산자를 사용하면 작성해야 하는 코드의 양이 줄어들고 다른 개발자에게 의도를 더 명확하게 전달할 수 있습니다. 많은 기능과 마찬가지로, 특히 코드 컨텍스트에서 유효한 거짓 값을 처리할 때 이러한 연산자를 신중하게 사용하는 것이 핵심입니다.

추가 참고 사항

JavaScript에는 왼쪽 시프트 할당 연산자(<<=)와 같은 더 많은 할당 연산자가 있습니다. 이 내용은 나에게 덜 적용되는 것처럼 보이지만 어느 시점에는 또 다른 게시물을 올릴 가치가 있을 수도 있습니다...

(Freepik에서 starline으로 상단 표지 이미지)

위 내용은 조지와 로버트가 술집에 들어가는데...의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.