Почему не делают Java, C# и C++ имеют диапазоны?

попробуйте это, если считаете, что OrderBy работает хорошо

    yesno = yesno.OrderBy(sortColumnName + " " + sortDirection).ToList();

причина, по которой он не работает, - yesno.OrderBy (sortColumnName + "" + sortDirection) возвращает стиль массива и генерирует новый. [112 ]

это полностью отличается между сгенерированной единицей и yesno (которую вы определили)

10
задан einpoklum - reinstate Monica 22 April 2015 в 19:28
поделиться

11 ответов

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

Типы поддиапазона также усложняют систему типов. Было бы намного более полезно ввести ограничения между переменными, чем к фиксированным постоянным.

(Обязательное упоминание, что целые числа должны быть произвольным размером на любом разумном языке.)

4
ответ дан 3 December 2019 в 20:07
поделиться

Java имел утверждать ключевое слово начиная с версии 1.4. При выполнении программирования согласно контракту Вы свободны использовать их для проверки надлежащего присвоения. И любой изменяемый атрибут в объекте, который должен находиться в пределах определенного диапазона, должен быть проверен до того, чтобы быть установленным. Можно также бросить IllegalArgumentException.

Почему никакой тип диапазона? Мое предположение - то, что исходные разработчики не видели один в C++ и не рассматривали это как важное как другие функции, в которых они пытались разобраться.

3
ответ дан 3 December 2019 в 20:07
поделиться

Диапазоны являются самыми полезными, когда можно сделать что-то по тому диапазону, кратко. Это означает закрытия. Для Java и C++, по крайней мере, тип диапазона был бы раздражающим по сравнению с итератором, потому что необходимо будет определить внутренний класс для определения то, что Вы собираетесь сделать по тому диапазону.

3
ответ дан 3 December 2019 в 20:07
поделиться

В C# можно сделать это:

foreach(int i in System.Linq.Enumerable.Range(0, 10))
{
    // Do something
}
1
ответ дан 3 December 2019 в 20:07
поделиться

Паскаль (и также Delphi) использует тип поддиапазона, но он ограничен перечислимыми типами (целое число, символ и даже булевская переменная).

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

2
ответ дан 3 December 2019 в 20:07
поделиться

Для C++ lib для ограниченных переменных значений в настоящее время реализуется и будет предложен в библиотеках повышения: http://student.agh.edu.pl/~kawulak/constrained_value/index.html

2
ответ дан 3 December 2019 в 20:07
поделиться

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

Что касается помех утверждают, они уже существуют. Повышение имеет a BOOST_STATIC_ASSERT, и в Windows, я думаю, что библиотека ATL Microsoft определяет подобный.

boost::type_traits и повышение:: mpl являются, вероятно, Вашими лучшими друзьями в реализации чего-то вроде этого.

1
ответ дан 3 December 2019 в 20:07
поделиться

Гибкость к самокрутке лучше, чем встраивание его на язык. Что, если Вы хотите насыщать арифметику, например, вместо того, чтобы выдать исключение для из значений диапазона? Т.е.

MyRange<0,100> volume = 99;
volume += 10; // results in volume==100
1
ответ дан 3 December 2019 в 20:07
поделиться

Я добавил бы к ответу Tom Hawtin (на который я соглашаюсь), что для C++ существование диапазонов не подразумевало бы, что они будут проверены - если Вы захотите быть последовательными к общему поведению языка - поскольку доступы к массиву, например, также не проверяются в диапазоне так или иначе. Для C# и Java, я полагаю, что решение было основано на производительности - чтобы проверить, что диапазоны наложат нагрузку и усложнят компилятор.

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

1
ответ дан 3 December 2019 в 20:07
поделиться

JSR-305 оказывает некоторую поддержку для диапазонов, но я не знаю когда, если когда-нибудь это будет частью Java.

0
ответ дан 3 December 2019 в 20:07
поделиться

Это старый вопрос, но просто хотел обновить его. В Java нет диапазонов как таковых, но если вам действительно нужна функция, вы можете использовать Commons Lang , который имеет ряд классов диапазонов, включая IntRange :

IntRange ir = new IntRange(1, 10);

Как ни странно, это не существует в Commons Math. Я частично согласен с принятым ответом, но я не считаю, что диапазоны бесполезны, особенно в тестовых случаях.

1
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

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