2016-11-21 4 views
2

Итак, я новичок в функциональном программировании, и я все еще пытаюсь переварить основополагающие принципы. До сих пор я могу оценить, что в идеале необходимо кодировать без изменяемые переменные, присвоения, петли и другие императивные структуры управления. Поэтому у меня есть вопрос. Между следующие два кода snipets:Принципы функционального программирования

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = { 

    val temp = functionA(xRDD, yRDD) 
    functionB(temp, zRDD) 
} 

и

def enrich(xRDD: RDD[xObject], yRDD: RDD[yObject], zRDD: RDD[zObject]): RDD[Result] = { 
    functionB(functionA(xRDD, yRDD), zRDD) 
} 

который один я должен выбрать и почему? Моя догадка - вторая, поскольку она позволяет локально присваивать данные временному значению val. Это все для этого? Правильно ли я понял? Я что-то упускаю?

+0

Результат все равно будет в памяти, это просто вопрос читаемости. Если вы можете подумать о хорошем имени для «val temp», то первый вариант лучше. – ipoteka

ответ

4

Оба способа хороши, но зависят от того, какой из них следует использовать.

Нет ничего плохого в обоих способах. Вы можете использовать любой из указанных способов. Но поскольку вы не используете значение, возвращаемое функцией A, где угодно, кроме функции functionB. Второй способ выглядит хорошо (нет дополнительной переменной). Extra переменный меньше беспокойства (памяти, используемое в качестве ссылки незначительна для практических целей.)

Заблуждения

Задания OK в функциональном программировании. Перераспределения не в порядке. Захват результата с использованием переменной в функциональном программировании в порядке. Но использование var и переназначение var - это не функциональное программирование.

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