Это действительно отличный вопрос! Я никогда не думал о том, чтобы люди изучали Java, чтобы им было легче учить Scala ...
Помимо всех основ, таких как for
циклы и т. Д., Изучение Java Generics может быть действительно полезным. Эквивалент Scala гораздо более мощный (и гораздо сложнее понять), чем Java Generics. Возможно, вы захотите попытаться выяснить, где находятся ограничения Java Generics, а затем, в каких случаях конструкторы типов Scala могут использоваться для преодоления этих ограничений. На более базовом уровне важно знать, почему необходимы универсальные шаблоны и как Java является строго типизированным языком.
Java позволяет вам иметь несколько конструкторов для одного класса. Эти знания будут бесполезны при изучении Scala, поскольку в Scala есть другой способ, который позволяет предлагать несколько методов для создания экземпляров класса. Так что вы бы не хотели углубленно изучать эту концепцию Java.
Вот некоторые концепции, которые сильно различаются между Java и Scala. Итак, если вы изучаете концепции Java, а затем хотите изучить эквивалент в Scala, вы должны знать, что эквивалент Scala настолько сильно отличается от версии Java, что типичному разработчику Java будет сложно приспособиться к подходу Scala. мышления. Тем не менее, это обычно помогает сначала привыкнуть к Java, потому что это обычно проще и легче для изучения. Лично я предпочитаю рассматривать Java как вводный курс, а Scala - профессиональная версия.
- Концепция изменчивой коллекции Java и изменчивое / неизменяемое дифференцирование Scala
static
методы (Java) и одноэлементные объекты (Scala)
for
петли
- Java
return
оператор против функционального стиля Scala («каждое выражение возвращает значение»)
- Использование Java
null
для "без значения" против более явного Option
типа
- импорт
- Java
switch
против Scala match
И вот список вещей, которые вы, вероятно, будете использовать из стандартной библиотеки Java, даже если вы разрабатываете в Scala:
- IO
- GUI (в Scala есть оболочка для Swing, но эй)
- URL, URI, файлы
- дата
- Таймеры
И, наконец, некоторые функции Scala, не имеющие прямого эквивалента в Java или стандартной библиотеке Java:
- перегрузка оператора
- имплициты и неявные преобразования
- несколько списков аргументов / карри
- анонимные функции / функции в качестве значений
- актеры
- потоки
- Сопоставление с шаблоном Scala (какие породы)
- качество
- вывод типа
for
понимание
- потрясающие операции сбора, такие как
fold
или map
Конечно, все списки неполные. Это только мой взгляд на то, что важно. Надеюсь, это поможет.
И, кстати: вы обязательно должны знать о пути к классам и других основах JVM.