Рефакторинг / верстка функционального Scala

Этот единственный лайнер ...

 Console.println(io.Source.fromFile("names.txt").getLines.mkString.split(",").map{x:String => x.slice(1, x.length -1)}.sortBy { x => x}.zipWithIndex.map{t =>{ (t._2 +1)*(t._1.map{_.toChar - "A"(0).toChar + 1}.sum)}}.sum);

... является моим решением проблемы 22 проекта Эйлера . Кажется, он работает, и он написан (моя попытка) функциональным стилем.

Этот пример является немного экстремальный, но мой вопрос немного более общий - как вы предпочитаете писать / форматировать / комментировать код функционального стиля? Функциональный подход, похоже, поощряет последовательность вызовов методов, которые, как я считаю, могут быть нечитаемыми, а также никуда не уезжают очевидно, чтобы помещать комментарии.

Кроме того, когда я пишу процедурный код, я обнаруживаю, что пишу небольшие методы, каждый с одной целью и со значимыми именами. Когда я пишу функциональный код, у меня, кажется, развивается привычка, которая создает строки, немного похожие на тот, что выше, где (для меня) значение трудно расшифровать - а также t Индивидуальные вычисления трудно повторно использовать где-либо еще. Довольно много примеров функционального кода, которые я вижу в сети, также лаконичны (для меня) непонятны.

Что мне делать? Написание небольших функций для каждой части вычислений с именами, значимыми в текущем контексте? (даже если они, скажем, не более чем оболочка для карты?)

Для примера, который я привел, как лучше всего написать и представить его?

(Как и все вопросы о стиле, этот один субъективен.Однако нет причин, по которым это должно быть аргументировано!)

12
задан Ken Bloom 21 November 2010 в 18:14
поделиться