JavaScript의 구조체

2022년 5월 8일 업데이트:

If you like to use it, I've just published it as npm package.
npm i makestruct


구조체란 무엇입니까?



구조체는 데이터 구조를 구축하는 데 사용됩니다. 이러한 구조는 관련 데이터를 함께 그룹화하는 데 사용됩니다.

프로그래밍 언어에 따라 배후에서 작동하는 방식에 차이가 있지만 재미있는 점은 JavaScript에는 구조체가 없다는 것입니다.

JS에서 사용자 정의 데이터 구조를 생성하려는 경우 일반적으로 한 가지 작업을 수행합니다. 개체 만들기.

const user = {
  id: 0,
  name: '',
  country: '',
  pets: [],
}


하지만 그렇게 할 다른 방법이 있습니까?

JavaScript에서 "구조체"를 동적으로 생성하는 함수를 만들어 봅시다!



/**
 * @constructor Generates a constructor for a given data structure
 * @param {string} keys separated by a comma + whitespace. struct('id, name, age')
 * @returns {constructor} Constructor for the new struct
 */
function makeStruct(keys) {
  if (!keys) return null;
  const k = keys.split(', ');
  const count = k.length;

  /** @constructor */
  function constructor() {
    for (let i = 0; i < count; i++) this[k[i]] = arguments[i];
  }
  return constructor;
}


어떻게 작동합니까?



쉼표 + 공백으로 구분된 문자열을 사용하고 원하는 구조에 대한 생성자를 생성하므로 이제 이 동적으로 생성된 생성자를 사용하여 개체를 인스턴스화할 수 있습니다.

용법:




const user = new makeStruct("id, name, country");
const johnny = new user(1, 'John', 'UK');
console.log(johnny.name); // john


속성에 복잡한 구조를 할당할 수도 있습니다!

const user = new makeStruct("id, name, country, pets");
const pepe = new user(1, 'Pepe', 'ES', ['Baxter', 'Flurfrils']);

console.log(pepe.pets); // ['Baxter', 'Flurfrils']


또는 다른 내부에 구조체를 추가합니다.

/**
 * @typedef UserInfo
 * @property {string} phone
 * @property {number} age
 * @property {string} hairColor
 * @constructor
 */

/** @type {ObjectConstructor|any} */
const UserInfo = new makeStruct('phone, age, hairColor');

/** @type {UserInfo} */
const extraInfo = new UserInfo('555-777-888', 31, 'blonde');


/**
 * @typedef User
 * @property {number} id
 * @property {string} name
 * @property {string} country
 * @property {UserInfo} info
 * @constructor
 */

/** @type {ObjectConstructor|any} */
const User = new makeStruct('id, name, country, info');
/** @type {User} */
const John = new User(1, 'John', 'US', extraInfo);


이제 다음을 수행할 수 있습니다.

John.country // 'US'
John.info.phone // '555-777-888'


좋아 좋아 마지막에 개체를 생성하지만 JavaScript는 Python 및 기타와 마찬가지로 개체 기반 언어이므로 사실 모든 것이 개체입니다.

그리고 이것이 재미없다고 말할 수 없습니다!




내 콘텐츠가 마음에 드십니까?

좋은 웹페이지 즐겨찾기