Что случилось с Java (в частности, с языком)? [закрыто]

Когда вы написали

for number in students:

, ваше намерение было: «Запустите этот блок кода students раз, где students - это значение, которое я только что ввел». Но на Python вы делаете передать в оператор for должен быть каким-то итерируемым объектом. В этом случае то, что вы хотите, - это просто оператор range . Это приведет к генерации списка чисел, и повторение через них позволит вашему циклу for выполнить правильное количество раз:

for number in range(students):
    # do stuff

Под капотом range просто генерирует список последовательные номера:

>>> range(5)
[0, 1, 2, 3, 4]

В вашем случае не имеет значения, каковы числа; следующие два оператора for будут делать то же самое:

for number in range(5):

for number in [1, 3, 97, 4, -32768]:

Но использование версии range считается более идиоматичным и более удобно, если вам нужно изменить какой-то список в вашем цикле (что, вероятно, вам нужно будет сделать позже).

13
задан Gabriele Petronella 2 November 2013 в 18:05
поделиться

7 ответов

Большинству языков вовлекли одну сильную руку в их источник и эволюцию. Думайте: Стена/Perl Larry, Guido/Python, Matz/Ruby, Odersky/Scala, Hickey/Clojure, и т.д. Эти парни являются всеми блестящими чуваками языка. Я дал бы левую руку, чтобы быть вдвое менее умным, чем любой из них.

Java на самом деле имел различие наличия не всего один, но и серия удивительных парней языка у руля - запускающийся с Gosling, но я также думаю о Guy Steele, Bill Joy, Gilad Bracha, Neal Gafter, и т.д. - все удивительные парни. Это на самом деле было хорошей вещью (я думаю). Это сделало язык лучше, но предотвратило застой.

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

John Rose то, что чувак на стороне JVM. Хотя, если бы я могу только получить инновации в одной или другом, я взял бы JVM прямо сейчас так или иначе.:)

20
ответ дан Alex Miller 2 November 2013 в 18:05
поделиться
  • 1
    @Kevin - Общий олдскульный прием для объявления объектов с заголовком и телом переменной длины должен закончить структуру заголовка фиктивным массивом длины одна (или нуль длины, если компилятор позволяет ее), и затем malloc sizeof (заголовок) +length_of_body. Можно тогда индексировать в тело с помощью фиктивного массива. Если макет мог бы быть переупорядочен к началу структуры, этого wouldn' t работа. – Russell Borogove 18 July 2011 в 17:36

С точки зрения предприятия, развивая язык не хорошая вещь, это на самом деле довольно плохо.

Вот почему Вы слышите более старые языки как Кобол, Фортран и даже C записанный с числами года после них - много палок предприятий с тем годом.

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

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

существуют компании, которые отказываются переходить к java 5.0 из-за сложности дженериков. (Мы все еще продолжаем работать 1.3x, но это по другой причине).

И честно, большинство "Улучшений" покупает Вас очень мало. Некоторое изменение синтаксиса, способность удалить несколько уровней фигурных скобок.

я не могу думать о единственном случае, где Java вынудил меня повторить бизнес-логику (Который является тем, что я волную по поводу того, когда я пытаюсь сделать свой код "DRY") - это - достаточно чистый язык, чтобы быть полностью DRY, если Вы - хороший программист.

, Например, что-либо можно сделать с закрытием, которое можно сделать с подклассом, не повторяя бизнес-логику - что Вы заканчиваете со взглядами, хуже из-за слоев определений классов фигурных скобок / дополнительных определений классов, но является часто более допускающим повторное использование (Можно расширить класс, который Вы используете для реализации обратного вызова, но Вы не можете расширить метод закрытия, необходимо переписать его.)

я не чувствовал этот путь о коде в течение первых нескольких десятилетий моей карьеры (я ЛЮБЛЮ приемы языка, более броское лучше), но теперь я был в этом долгим временем - Это могла быть моя старость, крадущаяся в, или это мог быть опыт, но теперь я вижу огромные преимущества для простого, явного, стабильного кода (предлагаемый языком, который не позволит Вам выделывать фокусы), и не может действительно найти единственное преимущество для многих альтернативных методов, даже если они сохраняют строку или два из ввода.

, Если Вы ищете обновление Java, однако, взгляд на Scala. Это довольно чертовски удивительно, все еще работает на JVM, взаимодействует с Java, и т.д.

21
ответ дан Bill K 2 November 2013 в 18:05
поделиться
  • 1
    @Kevin: По большей части, таким образом, можно представить области RAM, отображенные на аппаратных регистрах, сетевых протоколах, форматах файлов и подобных структурах как C структуры. – Martin Sojka 18 July 2011 в 22:00

Java, конечно, развивался очень медленно - особенно при сравнении его с C# и VB. Я лично чувствую, что они приняли неправильное решение с дженериками с точки зрения хранения обратной совместимости за счет безопасности времени выполнения и эффективности. Подход.NET работает намного лучше в [почти 111] каждый путь, IMO.

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

я не хотел бы возлагать любую "вину" на то, почему это произошло, как бы то ни было.

11
ответ дан Jon Skeet 2 November 2013 в 18:05
поделиться

Я думаю, что Sun теперь консервативен и гарантирует, чтобы они приняли правильные решения после создания нескольких плохих.

, Кроме того, было большое политиканство и бездельничание, прежде чем Java 1.5 вышел. Многие компании использовали сторонние взломы как Универсальный Java, потому что эти функции базового языка не были доступны, но сильно желаемы.

я думаю, что они убыстрились снова, с тех пор 1.5, с 1,7 на горизонте, и похоже, что каждый из них обеспечил очень полезные новые возможности. Открытое определение источника языка хорошо также.

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

я сказал бы, что.NET ударила задницы Sun в механизм, и что хорошо, что они оба существуют.

1
ответ дан JeeBee 2 November 2013 в 18:05
поделиться
  • 1
    С другой стороны, Вы не обязаны использовать WinJS, даже при том, что он помогает много на практике. – Pavel Minaev 15 September 2011 в 21:26

Эволюция языка Java была медленной, но сознательно так.

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

Инновации в JVM, с другой стороны, были чрезвычайно быстры, часто следуя впереди для другого VMs, и способствуя конкуренции на арене производительности.

, По-моему, язык Java должен быть максимально стабильным. Мне нравится идея закрытий, но я не полагаю, что Java является языком для них. (Если бы что-то должно войти, я предпочел бы консервативный FCM.) Я работаю с командой разработчиков, которым нужно обучение, чтобы создать и поддержать сложное производственное приложение. Язык Java дает нам хорошее смешение питания и структуры как есть

, Другие языки, как Scala и Groovy и порты к JVM как Ruby и Python, продолжат давать жизнь платформе Java, даже после того, как сам язык Java пошел путем КОБОЛа.

6
ответ дан erickson 2 November 2013 в 18:05
поделиться

В течение долгого времени Java имеет (для лучше, или для худшего) предпочел представлять новую функциональность через платформы, а не на самом языке.

Вы могли утверждать, что, например, кто-то пишущий приложение Spring/гыть в спящем режиме/Struts на самом деле пишет на специализированном диалекте Java, так как их код будет в основном неоперабелен без всего волшебства отражения/инжекции/инструментария, выполненного платформами.

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

Как примечание стороны, я также категорически не согласен с решением Sun использовать стирание типа в их реализации Дженериков. Предположительно, они хотели гарантировать обратную совместимость, но мне, который кажется полностью побочным, так как Аннотации (добавленный в точно то же время, в Java 5) создали свой собственный набор несовместимостей. Во всяком случае код, скомпилированный для Java 5, никогда не может выполняться на более ранней JVM, таким образом, требование прежней совместимости кажется очень сомнительным мне.

1
ответ дан benjismith 2 November 2013 в 18:05
поделиться
  • 1
    Вы думаете, что C# останется господствующая тенденция? имплантация JavaScript закончилась бы как J#, сделал? – CD.. 17 September 2011 в 18:00

Java имеет различные проблемы тогда.Net в данный момент, приводя к различному выбору.

.Net, будучи относительно новым и с шансом избежать некоторых ошибок Java имеет шанс сделать вещь по-другому. Это дает ему два основных преимущества:

  1. мс смогла более ясно различать платформы времени выполнения. C# 3.0 не будет ясно работать на 1,1 платформах, и C# 1.1 не будет работать на 3,0 платформах. Конечно, там существует некоторая нечеткость, но в целом у Вас есть лучшая идея, где Вы стоите. С другой стороны, клиентские автоматические обновления JVM по умолчанию на окнах. Таким образом, это может быть намного более хитрое хранение старой системной работы.
  2. .Net платформа, будучи моложе, накопила намного меньше хлама и внутренней сложности. Те вещи уничтожат скорость, с которой можно добавить новые опции. Мы теперь начинаем видеть часть этого в.Net также. Например: существует много функций BCL, которые требуют, чтобы Вы передали в или возвратили массив, который должен вместо этого использовать IEnumerable. История тех функций делает почти невозможным когда-либо изменить их.

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

3
ответ дан Joel Coehoorn 2 November 2013 в 18:05
поделиться