Pull to refresh
4
0.1
Ogra @Ogra

Пользователь

Send message
Смею вас заверить, что Гвидо и не думал вводить индексацию с 1, это действительно было шуткой.
Редко используемые функции можно исключить из исследования, введя минимальную планку употребления. Скажем, 20% проектов.
Кстати, сейчас посмотрел в свой код на Эрланге. На весь проект три вызова функции lists:nth (индексация от единицы). Зато вызовов lists:map, lists:filter, [Head | Tail] просто сотни…
Пусть будет медленнее но удобнее.


Так есть же языки помедленнее и поудобнее, выбирайте, какой больше по душе. Посмотрите на Lua, в конце-концов, неплохой вариант для начинающих. Вот хорошее начало.
Нет, нужно посмотреть сколько раз функция была использована, и сколько раз она была использована неправильно.
Абсолютное значение количества ошибок для функции не имеет смысла.
Относительное значение, скажем, вероятность допустить ошибку при использовании функции гораздо информативнее.
Что имеет огромное значение в низкоуровневых языках, но не такое уж и существенное в языках высокого уровня. Всему свое место.
Хотелось бы все же увидеть примеры. А то голословных заявлений «практически все», «почти не бывает примеров, где индексация с 1 удобнее» много, а кода мало. Единственное, что упоминалось толкового — реализация двумерного массива одномерным.
Цитатка в тему:
< $andman > $months = array(«Нулябрь», «Январь», «Февраль», «Март», «Апрель», «Май», «Июнь», «Июль», «Август», «Сентябрь», «Октябрь», «Ноябрь», «Декабрь»);

А у вас тоже есть нулевой месяц или вы тупо вычитаете единичку?

bash.im/quote/111111
О том и речь, усилия и шансы одинаковы. Ни к чему ломать копья.
Индексация с нуля необходима в языках низкого уровня, близких к железу, потому что железо оперирует смещениями. У языков высокого уровня должен быть выбор индексации по запросу программиста, наиболее подходящий для задачи.
Вот вам пример в ответ, про вычисление индекса:
en.wikipedia.org/wiki/Binary_heap#Heap_implementation
Let n be the number of elements in the heap and i be an arbitrary valid index of the array storing the heap. If the tree root is at index 0, with valid indices 0 through n − 1, then each element a at index i has

children at indices 2i + 1 and 2i + 2
its parent floor((i − 1) ∕ 2).

Alternatively, if the tree root is at index 1, with valid indices 1 through n, then each element a at index i has

children at indices 2i and 2i +1
its parent at index floor(i ∕ 2).

Миллионых разных формул, которые становятся проще при индексации от нуля.

Можно увидеть хотя бы парочку, не относящихся к Фурье?
Еще лучше в Паскале, где можно явно задать границы массива! =)
Это низкоуровневый пример, а на нижнем уровне без индексации с нуля действительно тяжело. Выше я привел пример, когда индексация с единицы проще и безопаснее, а при индексации с нуля приходится «следить за единичками во всей программе»
Мы можем написать примеры за любую сторону, в ИТ есть языки, которые реализуют индексацию с 1, есть языки, которые позволяют вводить любую индексацию, а если вспомнить математику, то в ней есть ряды Тейлора и Фурье, в которых индексация идет с нуля, и гармонические ряды, в которых индексация идет с единицы.
Вот о чем, нужно говорить новичкам, а не давить авторитетом и не аппелировать к Кернигану/Ричи/Страуструпу и т.д.
Простой пример в ответ, рисование рамки вокруг экрана, воспользуемся функцией drawLine(x1, y1, x2, y2).
Индексация с нуля, попробуйте забыть -1 и получите Access Violation, SEGFAULT или просто порчу данных:
drawLine(0, 0, ITEM_WIDTH-1, 0); // top line
drawLine(0, 0, 0, ITEM_HEIGHT-1); // left line
drawLine(ITEM_WIDTH-1, 0, ITEM_WIDTH-1, ITEM_HEIGHT-1); // right line
drawLine(0, ITEM_HEIGHT-1, ITEM_WIDTH - 1, ITEM_HEIGHT-1); // bottom line


Индексация с единицы:
drawLine(1, 1, ITEM_WIDTH, 1); // top line
drawLine(1, 1, 1, ITEM_HEIGHT); // left line
drawLine(ITEM_WIDTH, 1, ITEM_WIDTH, ITEM_HEIGHT); // right line
drawLine(1, ITEM_HEIGHT, ITEM_WIDTH, ITEM_HEIGHT); // bottom line


Индексация с нуля дает плюсы, когда мы работаем с началом массива, но индексация с единицы удобнее, когда надо работать с концом массива (обращаясь к последнему элементу через длину массива без "-1").
Поэтому я не могу сказать, что какой-то из вариантов лучше, понятнее или проще. Они равнозначны.
допустим, вы хотите реализовать двумерный массив на базе одномерного.

Зачем это допущение в языке высокого уровня? Это совершенно нормальный случай для С, но язык высокого уровня должен предоставлять эту абстракцию из коробки.
Надеюсь теперь видно, что индексация с нуля — это не просто так?
Неужели вы думали что вы умнее создателей C, C++, Java, C#?


Хорошее объяснение, зачем в низкоуровневом языке нужна индексация с нуля. Выше пример про двумерные массивы тоже хорош.
Но на высокоуровневом языке эта задача решается вот так:
ResultArr = ArrOne ++ ArrTwo.

Это Эрланг, а индексация в нем с единицы. Неужели вы думали, что вы умнее создателей Эрланга, Фортрана, Луа?
Помогает не путать 13 (thirteen) и 30 (thirty), чтобы вместо 1913 не оказалось 1930, например.

Information

Rating
2,438-th
Location
Томск, Томская обл., Россия
Date of birth
Registered
Activity