Что такое…

Что такое массив — и почему в нём считают с нуля

Иллюстрация: ряд ящиков, подписанных 0, 1, 2 — а не 1, 2, 3

Открой любое приложение, которым пользуешься. Лента, переписка, корзина, результаты поиска, список задач. Внешне — разные экраны. Внутри — одна и та же штука: массив.

И у неё есть привычка, которая ломает мозг в первый день: в массиве из четырёх элементов последний номер — три. Не опечатка. Сейчас объясню, почему так сделали и какая ошибка из этого растёт.

Что такое массив

Массив — это несколько значений, сложенных в одну коробку по порядку.

Обычная переменная хранит одно значение: const city = "Алматы". Массив хранит много и помнит, кто за кем стоит:

const cart = ["чай", "мёд", "лимон"]

Порядок здесь — не украшение, а часть данных. Переставишь элементы — получится другой массив, хотя значения те же. Именно поэтому лента не перемешивается при каждом открытии: порядок записан вместе с содержимым.

Чтобы достать элемент, называешь его номер — индекс:

cart[0]   // "чай"
cart[2]   // "лимон"

Почему счёт идёт с нуля

Вот главный трюк: индекс — это не «который по счёту». Индекс — это на сколько шагов отойти от начала.

Первый элемент лежит в самом начале. Шагать никуда не надо — ноль шагов. Второй — один шаг. Третий — два. Счёт с нуля выглядит странно ровно до момента, когда посмотришь на него как на расстояние, а не на порядковый номер.

Это не случайная причуда языка. Ещё в 1982 году Эдсгер Дейкстра написал заметку ровно об этом — почему нумеровать разумнее с нуля. Сегодня так считают JavaScript, Python, Java, C, Go. С единицы — Lua, R, MATLAB и 1С. Так что если увидишь в чужом примере list[1] и он достаёт первый элемент — просто другой язык, а не ошибка.

А теперь практическая часть. У массива есть длина:

cart.length   // 3

Длина — три, а индексы — 0, 1, 2. Последний индекс всегда на единицу меньше длины. Обратиться к cart[3] можно, ошибки не будет — просто вернётся undefined, пустота.

Это и есть off-by-one — «ошибка на единицу». Она коварная: код не падает, просто в конце списка появляется пустая строчка или на экране пропадает последний элемент.

Что с массивом делают

Четыре действия покрывают почти весь код, который ИИ пишет тебе для списков:

  • Добавить в конецcart.push("имбирь"). Массив становится длиннее на один.
  • Пройти по всем — это цикл: взять каждый элемент по очереди.
  • Отсеять лишнееfilter. Из старого массива получается новый, только с подходящими элементами.
  • Превратить в другоеmap. Каждый элемент заменяется на что-то своё.

Последнее — тот самый приём, который делает экраны. Когда в React-коде ты видишь items.map(...), это буквально «возьми список данных и преврати каждую запись в карточку на экране». Массив из пяти товаров превращается в пять карточек. Добавился шестой — появилась шестая, без единой правки в разметке.

Заметь, что filter и map не трогают исходный массив, а делают новый. Поэтому в коде так часто встречаются цепочки вроде items.filter(...).map(...) — каждый шаг отдаёт следующему свежий список.

Пустой массив — это ответ, а не поломка

Массив может быть пустым: []. Длина ноль, элементов нет.

Новички читают это как ошибку — а это нормальный, честный ответ. «Ничего не найдено», «заказов пока нет», «чат чистый» — за всеми этими экранами стоит массив нулевой длины. Никто не сломался: поиск отработал и вернул ноль совпадений.

Разница важна на практике. [] — это «есть список, в нём ничего». undefined — это «списка вообще нет, данные не дошли». Первое лечится текстом «пока пусто», второе — загрузкой или починкой запроса. Если у тебя на экране пусто, а ошибок нет, начни разбираться отсюда — причины у пустого массива всего две-три, и они типовые.

Практический вывод: когда просишь ИИ сделать экран со списком, добавляй в промпт «покажи, что будет при пустом списке». Модель почти всегда пишет случай «данные есть» и почти никогда — «данных ноль». А пользователь увидит именно его в первый день.

Массив и список — это одно и то же?

В разговоре — да. В Python эта штука так и называется list, в JavaScript — Array. Разные имена одной идеи: значения, лежащие по порядку, доступные по номеру.

Можно ли положить в массив разное — числа и текст вместе?

В JavaScript и Python — можно, язык не возражает. Но на практике так почти не делают: весь код, который читает такой массив, вынужден каждый раз проверять, что ему попалось. Один массив — один тип вещей.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →