awesome-everything EN
↑ Обратно к восхождению

Базовый CS с нуля

Значения и типы: собери инспектор значений

Суть Практический проект — собери небольшой инспектор значений, который сохраняет байты один раз и декодирует их под несколькими правилами типа, затем демонстрирует точность и coercion числа JS с доказательствами.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 210 min

Ты прочитал, что один паттерн битов означает разное под разными правилами типа. Сделай это конкретным: напиши небольшую программу, которая сохраняет байт один раз и показывает, чем он становится под каждым правилом — затем дожми числа JS туда, где их единый 64-битный формат начинает проявляться.

Цель

Преврати ментальную модель юнита в рабочий инструмент: сохрани сырые байты, декодируй те же байты под несколькими правилами типа и докажи реальным выводом, что смысл живёт в чтении, а не в битах — включая места, где кусаются хранение IEEE 754 и coercion.

Проект
0 из 6
Цель

Собери небольшой консольный инспектор значений на TypeScript или JavaScript (Node, Deno или Bun), который сохраняет сырые байты в буфере, декодирует те же байты под несколькими правилами типа и печатает отчёт бок о бок, доказывающий, что биты не меняются, а интерпретация — да; затем расширь его, чтобы показать пределы единого типа number в JS.

Требования
Критерии приёмки
  • Запуск программы печатает размеченный отчёт, где один и тот же байт появляется единожды, но декодируется в как минимум три разных значения, с показанным исходным паттерном битов, чтобы читатель видел: биты не изменились.
  • Область из 4 байт декодируется и как integer, и как float из одного неизменного буфера, с обоими выводами и общими байтами на виду.
  • Секция typeof печатает все пять повседневных примитивов и явно отмечает, что typeof null — 'object', с заметкой, что корректная проверка null — это x === null.
  • Секции точности и coercion печатают реальный вывод рантайма (а не угаданное значение) рядом с однострочным объяснением, основанным на 'один тип number — 64-битный IEEE 754' и 'coercion на каждый оператор'.
Senior-стретч
  • Добавь демо 'неверного типа': запиши байты, которые являются валидным integer, намеренно прочитай их как float (и наоборот) и покажи бессмысленное значение, чтобы сделать цену неверной интерпретации конкретной.
  • Добавь крошечное сравнение static-vs-dynamic: напиши один сниппет, который не компилируется под strict mode TypeScript (например const x: number = '9.99'), и эквивалентный JS, который выполняется и молча приводит, и зафиксируй оба исхода в README.
  • Поддержи little-endian vs big-endian для чтения 4 байт (DataView принимает флаг) и покажи, как порядок байт меняет декодированное integer, тогда как хранимые байты остаются теми же.
  • Расширь инспектор, чтобы декодировать область из 2 байт как знаковое vs беззнаковое 16-битное integer и показать, как одни и те же биты становятся отрицательным или положительным числом под two's complement vs обычным place-value.
Итог

Это юнит, ставший исполняемым: ты сохранил байты один раз и наблюдал, как они становятся integer, символом, каналом цвета и float в зависимости лишь от применённого правила — доказательство, что смысл в чтении. Ты также встретил края единого типа number в JS (0.1 + 0.2, потолок safe integer) и увидел, как coercion выбирает правило типа за тебя на каждый оператор. Собери инспектор один раз — и ‘биты не несут встроенного смысла’ перестанет быть лозунгом и станет тем, что ты увидел собственным выводом.

Продолжить восхождение ↑Переменная — это именованная ячейка
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.