вторник, 27 октября 2015 г.

Из 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. Уверен, что вы испытаете массу приятных ощущений!

Комментариев нет:

Отправить комментарий