Преимущества системы типов Scala

Я изучаю язык Scala. Я часто слышу одно утверждение, что у Scala более сильная система типов, чем у Java. Под этим я думаю, что люди имеют в виду следующее:

  • scalac отвергает определенные глючные программы, которые javac скомпилируется счастливо, только чтобы вызвать ошибку во время выполнения.
  • Определенные инварианты могут быть закодированы в программе Scala, так что компилятор не позволит программисту написать код, который нарушает условие.

Правильно ли я так думаю?

2 ответа

Решение

Основное преимущество системы Scala Type заключается не в том, чтобы быть сильнее, а в том, что она намного богаче (см. " Система типов Scala").
(Java может определять некоторые из них и реализовывать другие, но в Scala они встроены).
См. Также "Создатели мифов 1:" Типы типов "в Scala, комментируя сообщение в блоге Стива Йегге, где он" называет " Scala" Монстром Франкенштейна ", потому что" существуют типы типов и типы типов ".

Основная проблема безопасности с Java связана с дисперсией. По сути, программист может использовать неправильные объявления отклонений, которые могут привести к возникновению исключений во время выполнения в Java, в то время как Scala не допустит этого.

На самом деле, тот факт, что Java Array Этот вариант уже является проблемой, поскольку он позволяет генерировать неправильный код. Например, как показано на примере sepp2k:

String[] strings = {"foo"};
Object[] objects = strings;
objects[0] = new Object();

Затем, конечно, в Java есть необработанные типы, которые допускают все виды вещей.

Кроме того, хотя у Scala есть это, есть кастинг. Java API богат на приведение типов, и нет такой идиомы, как в Scala case x: X => // x is now safely cast, Конечно, один случай использования instanceof чтобы достичь этого, но нет никакого стимула для этого. На самом деле, Скала asInstanceOf намеренно многословно.

Это то, что делает систему типов Scala сильнее. Это также намного богаче, как показывает VonC.

Другие вопросы по тегам