2014-01-04 3 views
0

Я принимаю курс Functional Programming Principles in Scala | Coursera на Scala. Я не понимаю с immutability, so many functions и so much dependencies on recursion, как Scala действительно подходит для приложений реального мира.Как Scala подходит для большого масштабируемого применения

Я имею в виду исходя из imperative languages я вижу риск StackOverflow или Garbage Collection ногами в и с несколькими копиями все, что я бегу Out Of Memory

Что недостающий здесь?

ответ

3
  • Переполнение стека: рекурсивная функция рекурсивной функции рекурсивно. Добавьте @tailrec от scala.annotation.tailrec, чтобы убедиться, что ваша функция на 100% рекурсивна. Это в основном цикл.
  • Наиболее важные рекурсивные решения являются лишь одним из многих доступных моделей. См. «Эффективная Java», почему изменчивость плоха. Неизменяемые данные гораздо лучше подходят для крупных приложений: нет необходимости синхронизировать доступ, клиент не может возиться с внутренними данными и т. Д. Неизменяемые структуры очень эффективны во многих случаях. Если вы добавите элемент в начало списка: elem :: list все данные разделяются между 2 списками - удивительный! Создается только голова и указывается на список. Представьте себе, что каждый раз, когда клиент запрашивает, вам нужно создать новый глубокий клон списка.
  • Выражения в Scala более сжатые и, возможно, более ленивые - создайте фильтр и карту и все, что применяется при необходимости. Вы можете сделать то же самое в Java, но церемония длится вечно, поэтому обычно разработчики просто создают несколько коллекций temp на этом пути.
  • Мартин Одерски определяет изменчивость как зависимость от времени/истории. Это очень интересно, потому что вы можете использовать var внутри функции, пока какой-либо другой код не может быть каким-либо образом затронут, т. Е. Результаты всегда одинаковы.
  • Посмотрите на Option[T] и сравните к null. Используйте их в методах for. Исключение становится действительно исключительным, и Option, Try, Box, Either обмениваются ошибками очень красиво.
  • Scala позволяет писать более модульный и общий код с меньшими усилиями по сравнению с Java.
  • Найдите хороший фрагмент кода Scala и попробуйте посмотреть, как вы это сделаете в Java - это будет само собой разумеющимся.
0

Реальные приложения становятся все более управляемой событиями, который включает в себя прохождение вокруг данных в различных процессов или систем, нуждающихся неизменные структуры

В большинстве случаев данные мы либо манипулируют данные или ожидания на ресурсе. В этом случае его легко подключить в обратный вызов с Актеров

Посмотрите на http://pavelfatin.com/scala-for-project-euler/ , который дает вам некоторые примеры по использованию функций, таких как карты fllter и т.д. Такие функции, как они используются обычно в приложениях Руби

Сочетание неизменности и рекурсии позволяет избежать множества проблем с потоками. Это происходит в руке при работе с приложениями, управляемыми событиями.

akka.io - это классический пример, который можно было бы сделать очень кратко в scala.

+2

«Сочетание неизменности и рекурсии позволяет избежать множества проблем с потоком стеков» - это утверждение не имеет никакого смысла ... –

Смежные вопросы