[Из песочницы] Из Java в Scala: 7 причин для изучения нового языка
Много свободного времени только у студентов. Если вы не студент, то должны появиться очень веские причины для того, чтобы начать изучать новый язык программирования. Особенно это касается Java-программистов, потому что этот язык является лидером в своём сегменте. Тем не менее причины для изучения нового языка есть.
Причина первая: опыт показывает, что назад не возвращаются. В своё время я писал на C/C++ больше программ, чем на любом другом языке. Потом я узнал о Java, и передо мной стоял точно такой-же вопрос: «Зачем?» Что самое интересное, я не изучал Java зачем-то, это было просто любопытство, а потом я понял что уйти обратно не получится. За свою жизнь я не видел ни одного программиста C++, изучившего Java, а потом заявившего «Нет, мне не нравится этот язык, C++ лучше». Теперь у меня какое-то дежавю: я снова не вижу ни одного Java-программиста, изучившего Scala и отказавшегося от этого языка. Думаю это достаточный показатель качества.
Причина вторая: Scala современнее. Не более модная, а технически более совершенная. В Scala учтены многие ошибки, допущенные при проектировании Java. Возьмём в качестве примера оператор эквивалентности ==
. Как часто вы пользуетесь им в Java? Можете не думать, отвечу за вас: вы им вообще не пользуетесь. Почему? Потому что он бесполезен. В языке, цель которого освободить разработчика от прямой работы с памятью, оператор сравнения указателей не имеет смысла. И что ещё хуже, этот оператор нельзя перегрузить. А что сделал Одерски с этим оператором в Scala? Правильно, он приравнял оператор ==
к equals()
. Думаю никому не надо объяснять насколько первое изящнее второго:
object1 == object2
object1.equals(object2)
Кстати я совсем не считаю, что с оператором ==
при проектировании Java была допущена ошибка. Во времена засилья C++ это было правильным решением, но со временем ситуация изменилась.
Причина третья: декларативность. Да-да, то самое функциональное программирование. Сейчас в мой адрес посыпется куча бранных слов, но я не буду сильно спорить. Довод у меня очень простой: я видел достаточно людей не осиливших функциональное программирование и ругающих его, но я не видел ни одного осилившего и отказавшегося. Впрочем приведу ещё один довод: если бы функциональное программирование было какой-то ерундой, оно не стало бы появляться в нашей любимой Java (вы ведь в курсе про лямбды и стримы?) Здесь кто-то непременно возразит: раз это есть в Java, зачем нам Scala? Ответ: если вы изучите Scala и посмотрите на функциональность Java с той колокольни, то открывшийся вид вполне может вызвать у вас улыбку. Просто попробуйте!
Причина четвёртая: меньше кода. Кто-то заявил, что код Scala в общем случае в 2-3 раза меньше кода Java. Сам я не считал, но заверяю, что похоже на правду. Например, наверняка многие знакомы с давним спором о том, стоит ли использовать final для локальных переменных:
String mama = "Jane";
final String papa = "John";
Вторая строка неизменяемая, что гарантирует её неприкосновенность, что уменьшает вероятность багов, бла-бла-бла… Но есть проблема: эта вторая строка на 28% больше первой, что означает общее разрастание кода, что увеличивает вероятность багов и т.д. А теперь смотрим сюда:
var mama = "Jane"
val papa = "John"
Этот код Scala идентичен предыдущему коду Java. Нужно ли что-то говорить?
Вот ещё более впечатляющий пример. Java:
public class Child {
final String mama;
final String papa;
public Child(String mama, String papa) {
this.mama = mama;
this.papa = papa;
}
}
Теперь то же самое на Scala:
class Child(val mama: String, val papa: String)
Всё! Даже ни одной фигурной скобки не понадобилось! А теперь представьте насколько такие вот фишки (а их ещё много, поверьте!) уменьшают код большого проекта и вспомните про то, что чем короче код, тем:
- меньше багов
- быстрее написание
- проще чтение
- да и вообще это красиво!
Причина пятая: это очень легко. Scala оригинальный язык в том плане, что он настолько же императивен, насколько декларативен. И между прочим он даже ещё больше объектно ориентирован, чем Java. Как Java-программист вы можете начать с изучения императивной части, рассматривая Scala как «Java на стероидах», а потом в процессе изучения функциональной части всё больше использовать последнюю. Наверное ни один функциональный язык программирования не обеспечивает такой гибкости и лёгкости. У меня даже сложилось впечатление, что Scala написана специально чтобы увести Java-программистов (шутка).
Причина шестая: новые горизонты. Изучение языка программирования очень похоже на изучение лингвистического языка в том плане, что это позволяет открыть массу нового (при условии, что язык программирования совершенно другой, а не «yet another boring language»). Другой язык открывает доступ к иной культуре, иному мышлению. Гарантирую, что изучение Scala, особенно его функциональной части, очень сильно изменит то, как вы пишете код на Java. Разумеется к лучшему.
Причина седьмая: это интересно. Ну тут мне больше сказать нечего. Любопытство свойственно всем живым организмам, обладающим хотя-бы самым маленьким мозгом, чего уж говорить о человеке. Правда многие люди с возрастом теряют любопытство, но уверен, что среди читателей таких нет. Поэтому моя рекомендация: найдите время и поиграйтесь со Scala. Уверяю, что вы испытаете массу приятных ощущений!