Основанная на нуле нумерация месяца [закрывается]

Я действительно не нашел хороший способ сделать это исходно, таким образом, я просто использую утилиту, названную hstart, который делает это для меня. Если бы существует более опрятный способ сделать это, который был бы хорош.

98
задан Joe Doyle 1 May 2012 в 00:10
поделиться

3 ответа

Использование нуля для начала подсчета фактически является уловкой оптимизации со стороны программистов на ассемблере. Вместо того, чтобы присвоить единицу счетному регистру, они объединили регистр с помощью операции XOR с самим собой, что было немного быстрее в циклах ЦП. Это означало, что счет будет начинаться с 0 и всегда будет соответствовать длине элементов, исключая последний.

Кроме того, использование нуля также популярно в арифметике указателей, где вы должны использовать один базовый указатель, указывающий на некоторые выделенные память, плюс второй указатель, который будет со смещением от этого базового указателя. Здесь использование нулевого значения имеет большой смысл, чтобы указать смещение к основанию блока памяти. (Общая логика массива обычно состоит из базового адреса плюс смещение x размер записи.)

И отсчитываемые от нуля числа месяцев? Часто, во многих средах программирования данные вычисляются как количество дней, прошедших после некоторых данных по умолчанию. 31 декабря 1899 года - популярная дата, хотя в качестве базовой даты использовалось множество других дат. Все остальные даты смещены от этой базы и будут сохранены как одно число. Дроби будут использоваться для обозначения часов, минут и секунд, где 0,25 будет 24/4 = 6 часов. Таким образом, чтобы преобразовать дату в реальную дату, все, что нужно сделать среде, - это преобразовать это число в реальную дату.

Однако комбинация массивов с отсчетом от нуля и значений месяца с отсчетом от 1 действительно создает проблему. Чтобы получить название месяца 9, вам нужно будет получить элемент 8 из массива month. Некоторые разработчики были бы счастливы уменьшить номер месяца перед тем, как получить его название. Другие предпочли изменить месяц на что-то с нулевым отсчетом, потому что люди просто хотят знать имя, а не число. Это личное мнение.

52
ответ дан 24 November 2019 в 05:18
поделиться

Две вещи:

  1. 99% кода Java может быть выражено на Scala
  2. Вы можете писать проекты, поддерживающие смешанную компиляцию Java + Scala. Ваш код Scala может вызывать ваш код Java, а ваш код Java может вызывать ваш код Scala. (Если вы хотите сделать последнее, я предлагаю определить интерфейс на Java, а затем просто реализовать его на Scala. В противном случае вызов кода Scala из Java может стать немного уродливым.)

Итак, ответ: любые части, которые вы хотите . Ваш код Scala не обязательно должен быть чисто функциональным. Ваш код Scala может вызывать библиотеки Java. Так что практически любые части, которые вы могли бы написать на Java, вы также могли бы написать на Scala.

А теперь еще несколько практических соображений. При первом использовании Scala некоторые люди выбирают относительно изолированные, не критичные части своей программы для написания на Scala. Модульные тесты - хороший кандидат, если вам нравится такой подход.

Если вы знакомы с Java и изучали Haskell в прошлом, я предлагаю рассматривать Scala как «лучшую Java». По сути, Scala компилируется в байт-код JVM, который очень, очень похож на то, что выводит Java. Единственное отличие состоит в том, что Scala более «производительна»: она производит больше байт-кода на строку кода, чем Java. Scala имеет много общего с Haskell (первоклассные функции, for-complation похожи на do-notation в Haskell, ограниченный вывод типов), но он также очень отличается (по умолчанию он не ленивый, он не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

Если вы знакомы с Java и изучали Haskell в прошлом, я предлагаю рассматривать Scala как «лучшую Java». По сути, Scala компилируется в байт-код JVM, который очень, очень похож на то, что выводит Java. Единственное отличие состоит в том, что Scala более «производительна»: она производит больше байт-кода на строку кода, чем Java. Scala имеет много общего с Haskell (первоклассные функции, for-complation подобны нотации Haskell, ограниченный вывод типов), но он также очень отличается (по умолчанию он не ленивый, он не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

Если вы знакомы с Java и изучали Haskell в прошлом, я предлагаю рассматривать Scala как «лучшую Java». По сути, Scala компилируется в байт-код JVM, который очень, очень похож на то, что выводит Java. Единственное отличие состоит в том, что Scala более «производительна»: она производит больше байт-кода на строку кода, чем Java. Scala имеет много общего с Haskell (первоклассные функции, for-complation подобны нотации Haskell, ограниченный вывод типов), но он также очень отличается (по умолчанию он не ленивый, он не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

очень похоже на то, что выводит Java. Единственное отличие состоит в том, что Scala более «производительна»: она производит больше байт-кода на строку кода, чем Java. Scala имеет много общего с Haskell (первоклассные функции, for-complation подобны нотации Haskell, ограниченный вывод типов), но он также очень отличается (по умолчанию он не ленивый, он не чистый). Так что вы можете использовать некоторые из своих идей из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

очень похоже на то, что выводит Java. Единственное отличие состоит в том, что Scala более «производительна»: она производит больше байт-кода на строку кода, чем Java. Scala имеет много общего с Haskell (первоклассные функции, for-complation подобны нотации Haskell, ограниченный вывод типов), но он также очень отличается (по умолчанию он не ленивый, он не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

но он тоже совсем другой (по умолчанию не ленивый, не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

но он тоже совсем другой (по умолчанию не ленивый, не чистый). Таким образом, вы можете использовать некоторые свои идеи из Haskell, чтобы вдохновить ваш стиль Scala, но «под капотом» это весь байт-код Java.

Если заглянуть в подробности, эта ссылка википедия подробно описывает несколько хороших и интересных причин для нулевой индексации (которая напрямую не говорит о том, почему месяцы нулевая индексация, но я думаю, что это уже описано), и это Ссылка SO уже давала ответ на этот вопрос.

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

* Простите, простите, физика! = Математика возвращается, чтобы укусить меня там. Теперь пора гладить руки.

4
ответ дан 24 November 2019 в 05:18
поделиться

It is what it is, and the huge weight of software built to that assumption means it's going to be around for a while.

My opinion is that it was the fault of C, and all those other Johnie-come-lately languages just conformed with it.

You get some funny situations from people who don't know better. One of the few Y2K bugs our team found was a web site proudly proclaiming the year was 19100 simply because they prefixed the struct tm year with the literal "19".

6
ответ дан 24 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

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