en
Feedback
HowProgrammingWorks - JavaScript and Node.js Programming

HowProgrammingWorks - JavaScript and Node.js Programming

Open in Telegram

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ инТСнСнрия для JavaScript, TypeScrip, Node.js πŸ‘‰ Group: https://t.me/How_Programming_Works πŸ‘‰ Node.js channel: https://t.me/metarhia πŸ‘‰ Node.js group: https://t.me/nodeua

Show more
6 542
Subscribers
-124 hours
-57 days
+4430 days
Posts Archive
⭐️ IndexedDB: сравнитС 3 Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ - Native: чистый API indexedDB - Enterprise: ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° API indexedDB с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ цСрСмониями - Pragmatic: ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° API indexedDB с DSL Π±Π΅Π· Ρ†Π΅Ρ€Π΅ΠΌΠΎΠ½ΠΈΠΉ πŸ‘‰ https://github.com/HowProgrammingWorks/indexedDB

АдСпты AI этого Π΅Ρ‰Π΅ Π½Π΅ поняли, Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ассистСнтов, быстро начинаСтся, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π°
АдСпты AI этого Π΅Ρ‰Π΅ Π½Π΅ поняли, Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ассистСнтов, быстро начинаСтся, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ закончится, Ρ‚Π°ΠΊΠΈΠ΅ систСмы ΠΎΡ‡Π΅Π½ΡŒ слоТно довСсти Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°, Π° ΡƒΠΆ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΠΎΠ½ΠΈ Π½Π΅ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ прохоТдСния Ρ‡Π΅Ρ€Π΅Π· всС этапы ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, принятиС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ запросов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, интСграция Π²ΠΎΠΎΠ±Ρ‰Π΅ прСвращаСтся Π² Π°Π΄, ю Π²Π΅Π»ΠΊΠ°ΠΌ

Π’ΡƒΠΏΠ΅Π΅ΠΌ ΠΎΡ‚ LLM? Π’Π° Π½Π΅, ΠΌΡ‹ ΠΎΡ‚ Stackoverflow ΠΈ Search engine ΡƒΠΆΠ΅ ΠΎΡ‚ΡƒΠΏΠ΅Π»ΠΈ, ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½Π΅ ΡƒΠΏΠ°Π΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ трСнируСмся Π½
Π’ΡƒΠΏΠ΅Π΅ΠΌ ΠΎΡ‚ LLM? Π’Π° Π½Π΅, ΠΌΡ‹ ΠΎΡ‚ Stackoverflow ΠΈ Search engine ΡƒΠΆΠ΅ ΠΎΡ‚ΡƒΠΏΠ΅Π»ΠΈ, ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π½Π΅ ΡƒΠΏΠ°Π΄Π΅Ρ‚ Π½ΠΈΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ трСнируСмся Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚Ρ‹Ρ… Π² Ρ„Π°ΠΊΠ°ΠΏΠ΅ спринтов, срСмся Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°Ρ…, Π² ΡƒΠ½ΠΈΡ‚Π°Π· цСлимся ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ... ΠΈΠ½ΠΎΠ³Π΄Π°

πŸ‘©β€πŸ’» Added more paradigms and code styles: event-driven (6 styles), traits and ownership (Rust inspired) just as a concept:
+1
πŸ‘©β€πŸ’» Added more paradigms and code styles: event-driven (6 styles), traits and ownership (Rust inspired) just as a concept: https://github.com/HowProgrammingWorks/Paradigms/tree/main/JavaScript

К Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с монадичСскими вычислСниями https://github.com/HowProgrammingWorks/Paradigms/tree/main
К Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с монадичСскими вычислСниями https://github.com/HowProgrammingWorks/Paradigms/tree/main/JavaScript

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ нСбольшой Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Ρ…, с использованиСм Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ²: ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², синтакс
ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ нСбольшой Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Ρ…, с использованиСм Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ²: ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², синтаксичСских, структурных, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… конструкций (постоянно пополняСтся) https://github.com/HowProgrammingWorks/Paradigms

πŸ‘©β€πŸ’» ΠŸΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π»ΠΈ Π’Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ FinilizationRegistry ΠΈ Explicit resource management? Π’Π΅ΠΌΠ° Π½Π΅Π΄Π΅Π»ΠΈ Π½Π° курсС Node.js 2025: D
πŸ‘©β€πŸ’» ΠŸΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ Π»ΠΈ Π’Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ FinilizationRegistry ΠΈ Explicit resource management? Π’Π΅ΠΌΠ° Π½Π΅Π΄Π΅Π»ΠΈ Π½Π° курсС Node.js 2025: Disposable objects ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°: https://github.com/HowProgrammingWorks/Disposable

🧩 10 мая Π² 15:00 стрим Β«ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² для максимума ΠΏΠΎΠ»ΡŒΠ·Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с JavaScript, TypeScript, Node.jsΒ» Π“Π»ΡƒΠ±ΠΎΠΊ
🧩 10 мая Π² 15:00 стрим Β«ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² для максимума ΠΏΠΎΠ»ΡŒΠ·Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ с JavaScript, TypeScript, Node.jsΒ» Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² 5 самых ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… шаблонов для Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ использования: Strategy, Factory, Pool, Queue, Adapter πŸ‘‰ https://patterns-js.com/w1hpna?utm_source=telegram_channel&utm_medium=t_shemsedinov&utm_campaign=stream_10_05

ΠšΡ‚ΠΎ ΡƒΠ·Π½Π°Π΅Ρ‚ Π² этом ΠΊΠΎΠ΄Π΅ ΠΏΠ»ΠΎΡ…ΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ? Если Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΈ Π²Π°ΠΌ всС ΠΎΠΊ, Ρ‚ΠΎ смотритС Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚Π°ΠΌ список ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ https://github.com/HowProgrammingWorks/GoodParts/blob/main/JavaScript/1-func-bad.js
const getPrice = function(options = { convert: true }) {
  let price;
  let item = { price } = this;
  if (!Array.isArray(item)) {
    let { price } = this;
    if (typeof price == 'number') return price;
    price = this.cost;
    if (typeof price == 'number') return price;
    if (options.convert) return parseFloat(price);
  }
  [, price] = this;
  if (typeof price == 'number') return price;
  if (options.convert) price = +price;
  if (!isNaN(price)) return price;
};

πŸ‘©β€πŸ’» Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Π²ΠΌΠ΅ΡΡ‚ΠΎ нСпринятого TC39 ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌ ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅ записи (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ - ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, модификация, ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΌ наслСдованиСм - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ значСния ΠΏΠΎΠ»Π΅ΠΉ - ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅ записи с экономиСй памяти Π·Π° счСт Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² - ускорСниС поиска ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для V8, Π΄Π°ΠΆΠ΅ Π² сравнСнии с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π’ΡƒΡ‚ Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΡƒΡ‚: https://github.com/metarhia/metautil/pull/298
class Record {
  static immutable(defaults) {
    return Record.#build(defaults, false);
  }

  static mutable(defaults) {
    return Record.#build(defaults, true);
  }

  static #build(defaults, isMutable) {
    const fields = Object.keys(defaults);
    const defaultValues = Object.create(null);
    for (const key of fields) {
      defaultValues[key] = defaults[key];
    }

    class Struct {
      static fields = fields;
      static defaults = defaultValues;
      static mutable = isMutable;

      static create(data = {}) {
        const obj = Object.create(null);

        for (const key of fields) {
          const base = defaultValues[key];
          const value = key in data ? data[key] : base;

          if (!Record.#sameType(base, value)) {
            const exp = Record.#typeof(base);
            const act = Record.#typeof(value);
            throw new TypeError(
              `Invalid type for "${key}": expected ${exp}, got ${act}`,
            );
          }

          obj[key] = value;
        }

        return isMutable ? Object.seal(obj) : Object.freeze(obj);
      }
    }

    return Struct;
  }

  static #typeof(value) {
    if (Array.isArray(value)) return 'array';
    if (value === null) return 'null';
    return typeof value;
  }

  static #sameType(a, b) {
    if (Array.isArray(a)) return Array.isArray(b);
    if (a === null) return b === null;
    return typeof a === typeof b;
  }

  static #validate(instance, updates) {
    for (const key of Object.keys(updates)) {
      if (!Reflect.has(instance, key)) continue;
      const current = instance[key];
      const next = updates[key];
      if (!Record.#sameType(current, next)) {
        const exp = Record.#typeof(current);
        const act = Record.#typeof(next);
        throw new TypeError(
          `Invalid type for "${key}": expected ${exp}, got ${act}`,
        );
      }
    }
  }

  static update(instance, updates) {
    if (Object.isFrozen(instance)) {
      throw new Error('Cannot mutate immutable Record');
    }
    Record.#validate(instance, updates);
    for (const key of Object.keys(updates)) {
      if (Reflect.has(instance, key)) {
        instance[key] = updates[key];
      }
    }
    return instance;
  }

  static fork(instance, updates) {
    Record.#validate(instance, updates);
    const obj = Object.create(null);
    for (const key of Object.keys(instance)) {
      obj[key] = Reflect.has(updates, key) ? updates[key] : instance[key];
    }
    return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
  }

  static branch(instance, updates) {
    Record.#validate(instance, updates);
    const obj = Object.create(instance);
    for (const key of Object.keys(updates)) {
      Reflect.defineProperty(obj, key, {
        value: updates[key],
        writable: true,
        configurable: true,
        enumerable: true,
      });
    }
    return Object.isFrozen(instance) ? Object.freeze(obj) : Object.seal(obj);
  }
}