본문 바로가기

프로그래밍 언어38

자바스크립트 Set Set은 순서없는 collection이지만 자바스크립트에서는 조금 다르다. 자바스크립트 Set은 인덱스가 없지만 순서는 기억한다. 첫 번째 들어간 원소는 반복문에서 첫번째로 방문되며, 마지막 원소는 마지막으로 반복문을 돈다. 특정 값이 원소에 있는지 확인하는 has()는 실행이 빠르다. 반면 array의 includes() 메소드는 선형시간이 걸린다. 2021. 8. 13.
자바스크립트 모듈 Node는 closure를 기반으로한 모듈을 지원하며, require() 함수를 이용한다. 하지만 이는 자바스크립트 표준에서 채택되지 않았으며 ES6는 import와 export 키워드를 사용하는 것을 정의했다. Node에서도 최근에 이를 구현했다. 실용적인 관점에서 자바스크립트의 모듈은 코드 번들링 도구에 여전히 많이 의존하고 있다. immediately invoked function을 이용해 모듈을 구현할 수 있다. utility function을 함수 안으로 숨기고 모듈의 public API를 반환값으로 한다. const BitSet = (function() { // Set BitSet to the return value of this function // Private implementation .. 2021. 8. 12.
자바스크립트 기존 클래스에 메소드 추가하기 프로토타입 객체에 새로운 메소드(method)를 추가해 자바스크립트 클래스를 확장시킬 수 있다. Complex.prototype.conj = function() { return new Complex(this.r, -this.i); }; 잘 사용하지는 않는다. 2021. 8. 11.
자바스크립트 클래스 public, private, static 필드 인스턴스 필드와 static 필드를 public과 private 형태로 정의하는 것이 2020 현재 표준은 아니지만 크롬에서는 지원하고 있다. public 인스턴스 필드에 대한 문법은 React 프레임워크와 Babel transpiler에서 흔히 사용하고 있다. class Buffer { constructor() { this.size = 0; this.capacity = 4096; this.buffer = new Uint8Array(this.capacity); } } class Buffer { #size = 0; capacity = 4096; buffer = new Uint8Array(this.capacity); get size() { return this.#size; } } 필드를 초기화가 constr.. 2021. 8. 11.
자바스크립트 jump mainloop: while (token !== null) { // -- snip -- continue mainloop; // -- snip -- } 2021. 7. 23.
자바스크립트 first-defined ?? ES2020에서 정의되었다. ??는 nullish coalescing 연산자라고 부른다. ??의 왼쪽 피연산자가 null이 아니고 undefined도 아니면 해당 값을 그대로 반환하고, 아니면 오른쪽에 있는 피연산자를 반환한다. a ?? b // 아래와 같음 (a !== null && a !== undefined) ? a : b 아래 코드 처럼 ??는 첫 번째 피연산자가 false 값이더라도 그 값을 반환한다. let max = maxWidth || 500; // maxWidth가 숫자 0이나 empty string이면 false이므로 500이 반환 let max = maxWidth ?? 500; // maxWidth가 숫자 0이면 그대로 0이 반환된다 2021. 7. 23.
자바스크립트 클로저 JavaScript Closures를 이용해 private variable을 구현할 수 있다. const add = (function () { let counter = 0; return function () {counter += 1; return counter} })(); add(); add(); add(); // the counter is now 3 self-invoking function은 한 번만 호출되며, counter 값을 0으로 설정하고 function expression을 반환해 add에 저장한다. add는 함수가 되며, 부모 scope에 있는 counter 값에 접근할 수 있다. 이를 closure라 부른다. counter는 익명함수에 의해 protect되며, add 함수만을 이용해 변경될.. 2021. 7. 14.