Почему программисты используют однонаправленную индексацию для номеров строк в исходном коде? [Дубликат]

  

Возможный дубликат:
Почему не число строк в Visual Studio на основе нуля?

Почему не верхняя строка в файле исходного кода с номером строки 0?

то есть. в исходном файле длиной 10 строк, я бы ожидал, что номера строк будут 0-9, но это не так! Теперь grep, awk, sed и т. Д. Все кажется числом от 1, поэтому я предполагаю, что это стандартное соглашение по уважительной причине.

Недавно мне пришло в голову, что для почти любой другой структуры, с которой программист должен иметь дело в повседневной работе, соглашение должно рассчитывать от 0, а исходный файл так же напоминает список строк, как строка похожа на список символов (список afaik символов всегда индексируется 0). Я должен был открыть мой текстовый редактор и проверку работоспособности, чтобы верхняя строка файла была помечена как строка номер 1!

Мне просто интересно, существует ли хорошая причина для этого или если это просто неудачная историческая конвенция.

6 голосов | спросил wim 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 10:51:12 +0400 2011, 10:51:12

4 ответа


46
  • Индексирование на основе 0 для компьютеров, а не людей
  • номера строк для людей не компьютеров
  • все люди не программисты

1-строчные номера строк облегчают читаемость крошечным битом - в противном случае каждый раз, когда вы видите сообщение об ошибке с номером строки, вам нужно будет помнить, чтобы уменьшить его на единицу, чтобы перейти к фактической строке, вызвавшей ошибку - - и это затрудняет читаемость.

Также line 1 читает лучше, чем line 0 - потому что другим (людям, которые могут быть нетехническими), возможно, придется прочитать ваш код.

ответил treecoder 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 10:59:17 +0400 2011, 10:59:17
10
  

для почти любой другой структуры, с которой программист должен иметь дело в своей повседневной работе, соглашение должно рассчитывать от 0

Это язык специфический, и AFAIK он распространен только у C и его преемников . Индексирование AFAIR основано на 1, по крайней мере, в модуле Pascal / Modula и BASIC, а также, возможно, на функциональных языках (которые в любом случае не используют индексацию, скорее, итераторы или foreach и т. Д.).

В C он сделал арифметику массива /указателя удобной. Тем не менее, я не думаю, что кто-то может назвать его интуитивным - я считаю, что для того, чтобы все мы привыкли к этому, потребовалось некоторое время. Это, как отметил @greengit, концепцию аппаратного уровня, а точнее деталь реализации. Только программистам (C и др.) Необходимо понять и использовать индексирование на основе 0, но попробуйте объяснить это непрофессионалу: -)

При работе с строками файла вы редко выполняете арифметику указателей - файл текстовых строк - это просто более высокий уровень абстракции. И тем более, поскольку текстовые файлы используются многими людьми, которые не являются программистами C, просто «простыми» пользователями. Сделать их жизнь более сложной, заставив их изучить детали реализации на низком уровне, будет совершенно контрпродуктивной.

И еще одна важная вещь: текстовые файлы (и до них, перфокарты) были вокруг на протяжении десятилетий, прежде чем C появился , поэтому я считаю, что к моменту создания C, подсчитывая их строки /rows from 1 уже был хорошо установленным соглашением.

ответил Péter Török 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 11:00:12 +0400 2011, 11:00:12
5

Я запрограммировал в Basic. Там цифры обычно будут 10, 20, 30. Вы можете добавить дополнительные строки, такие как 15, а затем использовать «renum», чтобы сделать 10, 20, 30, 40. И эти цифры были важны, поскольку вы использовали «goto 15».

Таким образом, строки не всегда пронумерованы как 1,2,3

ответил Carra 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 10:56:35 +0400 2011, 10:56:35
1

«Естественная» вещь, которую нужно сделать, - подсчет на основе 1, как и номера строк. Большинство реальных объектов, число которых мы серийно начинаем с 1 - шинных линий, поп-чартов, шоссе, полеты, - ни один из них никогда не имеет номера 0.

0 - это исключение, а не правило, но есть несколько очень хороших технических причин, по которым мы их используем, самое главное, что он делает арифметику указателя естественным образом, особенно на языках низкого уровня, таких как C ( ---- +: = 0 =: + ---- означает «взять адрес a и шаг 3 ячейки вперед», то есть a[3]).

ответил tdammers 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 11:29:08 +0400 2011, 11:29:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132