Статьи

JavaOne 2012: хитрости Scala

Первым сеансом, на котором я присутствовал после обеда, были « Скаловские трюки» Венката Субраманиама , проходившие в конференц-зале Hilton Golden Gate 3/4/5. Это первый сеанс, в котором я переключил свой запланированный сеанс во время JavaOne. Я переключил его прошлой ночью, когда посмотрел расписание своего дня и понял, что, хотя и взволнован лямбдой, я чувствовал, что у меня уже есть знакомство с лямбдой, которую я искал в данный момент (благодаря Технической лейтмотиве и «Путь к лямбде»), и я почувствовал, что выиграл бы больше от участия в «Уловках Scala», чем от ранее запланированного сеанса «Запуск лямбда-программирования» (который все равно звучит упакованным ). Хотя некоторые ораторы предпочитают, чтобы вопросы и комментарии задавались в конце, Субраманиам предпочитает задавать вопросы, когда они возникают.

Субраманиам начался с краткого изложения основ языка программирования Scala . Он показал, что в Scala все является объектом, продемонстрировав Groovy / Ruby-подобный пример 1.toString() . Он заявил, что вы можете использовать Scala везде, где вы используете Java, и вам следует ожидать на 40–60 процентов меньше кода, чем вы пишете на Java. Он добавил, что, как и Groovy, вы можете смешивать Scala и Java. Ему нравится лаконичность и выразительность Scala.

Подход, использованный в этой презентации, заключался не в том, чтобы предоставить учебное пособие по основам Scala, а в том, чтобы подходить к введению Scala с помощью примеров. Во многих отношениях это было похоже на презентационный эквивалент «рецептов» или «кулинарной книги».

Первым реальным примером Субраманиама было чтение файла (он рано обратился к одному из уродливых моментов Java!): val stuff = Source.fromFile('sample.scala').mkString() [См. Этот поток StackOverflow для различий между toString() и mkString() ] Нет признаков обработки исключений. Как и в Groovy, Scala не требует перехвата или повторного создания / утверждения проверенных исключений. Удаление обработки исключений делает код намного более кратким.

Субраманиам заявил, что «одна из вещей, которые мне действительно нравятся в Скале, — это отсутствие церемонии, с которой нужно иметь дело». Он описал «церемонию» как то, что вы должны сделать, прежде чем вы сможете делать то, что вы хотите сделать. Он отметил, что людям, которые преподают Java кому-то еще, напоминают о том, как трудно изучать Java, потому что есть так много аспектов церемонии, которые нужно изучить.

В следующем примере, показанном Subramaniam, возвращалось несколько значений из метода. В этом случае он хотел вернуть два имени: «Джеймс» и «Бонд». Он показал создание неизменного кортежа :

1
2
3
4
def createAgent() =
{
   ('James', 'Bond')
}

Он показал, как можно получить доступ к вышеуказанному кортежу.

1
2
val agent = createAgent()
println(agent._1 + ' ' + agent._2)

Субраманиам показал, что происходит, когда он пытался получить доступ к agent._3 в приведенном выше коде: это привело к ошибке во время компиляции, потому что нет трех полей. Это был пример ошибки времени выполнения, перемещаемой в ошибку времени компиляции.

Одна из особенностей Scala, на которой Субраманиам сосредоточился и которая мне нравится, — это требование, чтобы аргументы метода были указаны как изменяемые или неизменные ( val или var ) при написании подписи. Мне понравился модификатор var clear назад при программировании и взломе с помощью Pascal, и я рад видеть это различие.

Субраманиам рассмотрел «очень удобную особенность», которая находится на границе между «действительно крутой» и «действительно страшной»: implicit ключевое слово. Конечно, может быть трудно понять, когда сработает неявное ключевое слово , особенно если оно происходит от импорта. Subramaniam пошутил, что его использование помогает улучшить «безопасность работы».

Другой пример был основан на реализации факториального метода в Scala. Как почти всегда, факториал был реализован с помощью рекурсии. Subramaniam вынудил его повторить достаточно много раз, чтобы привести к ошибке StackOverflowError . Он процитировал структуру и интерпретацию компьютерных программ, а затем рассказал о том, как код может быть написан на Scala, чтобы он казался рекурсивным, но компилятор Scala оптимизирует его как процедурный цикл. Аннотация @ scala.annotation.tailrec может использоваться для принудительного применения хвостовой рекурсии , что позволяет оптимизировать время компиляции. Это довольно изящно, но это также напоминание о том, что рекурсия не должна использоваться исключительно потому, что это круто.

Субраманиам заявил, что «Scala говорит, что к XML следует относиться с уважением, которого он заслуживает», а не заставлять XML-контент в строки. Затем он показал код, в котором переменная была присвоена элементу XML напрямую без кавычек. Он показал, как использование фигурных скобок вокруг этой переменной, назначенной непосредственно XML, позволяет получить доступ к телу этого XML-элемента. Он сказал, что поддержка XML в Scala намного больше.

«Создание кода, который выплевывает XML, должен передаваться тем, кто находится в тюрьме», — было вступительное заявление Субраманиама, в котором говорилось о поддержке Scala для генерации XML. Он показал, как он может встраивать код Scala в фигурные скобки в пределах определенного XML. Это позволило ему определить функцию, которая использовала бы хитрость Scala для простой сборки XML на основе базовой карты данных. Это впечатляет!

Черты , вероятно, являются одним из наиболее известных аспектов Scala, и Субраманиам освещал их в своей презентации. Он заявил, что одной из проблем множественного наследования является его реализация в C ++. Он рассказал о загрязнении метода и показал, как использование ключевого слова with в сочетании с ключевыми словами extends и ключевым словом trait поддерживает признаки.

Субраманиам показал, как черты могут быть применены к отдельным экземплярам, ​​а не к общему классу, когда это желательно (когда экземпляр отличается от общего класса). Его примером здесь было то, что собаки — друзья, и поэтому им нужна черта на уровне класса, в то время как большинство кошек не друзья, поэтому он смоделировал индивидуальный экземпляр своей кошки с чертой друга, а не применял жареную черту к классу Кошки.

Субраманиам заявил, что он не позволит никому использовать Java, который сначала не читал Effective Java . Он сказал, что Java исправлена ​​в соответствии с подходами, описанными в Effective Java, и что версия, описанная в Effective Java, называется Scala .

Субраманиам хорошо справился с одной из самых сложных вещей, которые я видел в презентациях. Большинство ораторов, которые обращаются к своей IDE, быстро теряют аудиторию, поскольку теряют себя в коде и начинают разговаривать с монитором. Subramaniam, однако, хорошо поработал над тем, чтобы образцы кода были маленькими и отображались с крупным шрифтом. Это позволило легко сосредоточиться на важных вещах. Это одна из немногих презентаций с интенсивным использованием кода, к которой я легко отношусь. Единственным недостатком является то, что эти примеры не находятся на слайдах, но он сказал, что они будут доступны для скачивания.

Это была еще одна презентация, на которую я рассчитывал. У меня появляется мотивация снова поиграть со Scala и подхватить несколько хороших идей. Не повредило, что Субраманиам — опытный и опытный оратор и развлекает свою аудиторию, обучая их. Некоторые докладчики, даже на этом JavaOne 2012, требовали дополнительных усилий со стороны аудитории, чтобы оставаться внимательными, но здесь это было не так.

Ссылка: JavaOne 2012: Scala Tricks от нашего партнера по JCG Дастина Маркса в блоге Inspired by Actual Events .