Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как перейти от Java к Scala в вашем плане

Anna | 3.06.2014 | нет комментариев
Всем здравствуй.
Периодично от Java-разработчиков, которые узнали о существовании Scala, звучат вопросы «Как начать применять Scala в присутствующем Java-плане? Трудно ли перейти от одного к иному? Много ли времени это займет? Как уговорить руководство?» В нашем плане именно такой переход и происходил, на сегодняшний день фактически каждый план теснее на Scala, следственно решил поделиться рецептами и ощущениями.

С чего все началось, оно же «А для чего оно мне вообще нужно?»:

  1. хотелось исследовать что-то новое и пригодное в производстве;
  2. наскучило писать много букв на Java, но и решительно переписывать все, скажем на Python, вовсе не хотелось;

С учетом таких желаний выбор пал на обзор альтернативных JVM-based языков.
Позже обзора остановились на Scala. Понравились суперкомпактный синтаксис, strong typing, вероятность писать в ОО-жанре и заявленное отменное взаимодейтствие с Java-кодом в обе стороны. Тот факт, что Scala теснее энергично применяют такие большие компании, как Twitter, LinkedIn, Foursquare и так дальше, внушил определенную убежденность в грядущем языка.
У нас теснее имелся план на Maven с юнит-тестами на JUnit, следственно значимо было легко включить Scala без значительных расходов на адаптацию инфраструктуры.
Выходит, по порядку.

Много ли времени это займет?

Всеобщее ощущение для тех, кто сомневается, стоит ли начинать сей процесс — переходить на Scala и постигать ее понемногу безусловно реально. До первого утилитарного использования времени пройдет немного, я бы сказал день либо два, чай вначале это может быть даже легко «Java с val и без точек с запятой». Пройдет время, и понемногу вы внезапно найдете у строк кучу непостижимо откуда взявшихся бонусных способов (hello implicit), начнете применять функции, замыкания, case-классы, паттерн-матчинг, коллекции ну и так далее… Вот Добросовестно, прям понемногу, без отрыва от ежедневной работы.

Как начать применять Scala в присутствующем Java-плане?

Для начала добавляем поддержку Scala в родительском pom.xml:

<project>
  ...
  <properties>
    <version-scala>2.10.3</version-scala>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${version-scala}</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>net.alchim31.maven</groupId>
          <artifactId>scala-maven-plugin</artifactId>
          <version>3.1.6</version>

          <configuration>
            <scalaVersion>${version-scala}</scalaVersion>
            <args>
              <arg>-deprecation</arg>
              <arg>-explaintypes</arg>
              <arg>-feature</arg>
              <arg>-optimise</arg>
              <arg>-unchecked</arg>
            </args>
          </configuration>

          <executions>
            <execution>
              <id>scala-compile</id>
              <phase>process-resources</phase>
              <goals>
                <goal>add-source</goal>
                <goal>compile</goal>
              </goals>
            </execution>
            <execution>
              <id>scala-compile-tests</id>
              <phase>process-test-resources</phase>
              <goals>
                <goal>testCompile</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

Далее… а правда нет, собственно это всё.
Сейчас mvn compile будет собирать все .scala-исходники, расположенные в src/main/scala (однако расположенныу size, у Collection теснее есть add, Collections.unmodifiable… лишь добавляют охрану от дурака но не охраняют от неверного применения). На мой взор, даже только ради этой библиотеки стоит исследовать Scala (однако у JDK есть богатенький выбор продуктивных concurrent-коллекций);

  • усилилась экспрессивность кода, исключительно Зачастую употребляем Option[T] тот, что в самом простом случае решает задачу проверок на null (читай, багов с этим связанных);
  • higher order functions и прочая функциональная составляющая Scala вновь же разрешает писать больше короткий, экспрессивный и переиспользуемый код (в Java 8 небольшим утешением безусловно будут лямбды, но их еще дождаться нужно);
  • implicit conversions в умеренных числах дозволили избежать замусоривания кода каждыми оберточными классами;
  • == в Scala это как Objects.equals(o1, o2) в Java, прощай случайное сравнивание ссылок (однако если необходимо именно это, есть eq и neq);
  • отличное взаимодействие с Java лежит в основах дизайна Scala, следственно интеграция любых Java-фреймворков (Spring, Hibernate и тд) проходит достаточно безболезненно. Скажем есть куча аннотаций типа@BeanProperty, которая говорит компилятору сгенерить для поля геттеры и сеттеры в жанре JavaBeans.

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

Итого, если лаконично описать итог, то «поменьше букв — поменьше багов — огромнее производительности».
С момента перехода на Scala новейший код на Java писать больше не доводилось, это была точка невозврата.
Хочется еще раз повториться, совсем необязательно выделять на обучение сразу много времени (как вариант для руководства, «необязательно выделять много денег»).

PS: есть суждение, что Scala трудна и не подходит большинству Java-разработчиков (см перевод на Прогре здесь habrahabr.ru/post/134897/), но на мой взор входной порог у Scala маленький, язык не принуждает с головой кидаться в омут и основательно постигать его перед фактическим использованием, а вот пользу может принести довольно стремительно.

Пригодные источники:

 

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB