История изменений
Исправление
vertexua,
(текущая версия)
:
Вместо <бред>
Мне кажется корень проблемы как раз в том, что ты видишь функциональный код таким как его изобразил. А другие люди видят его понятным и читаемым. Другие люди - не ты. Эту истину лучше понять раньше, чем позже
Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)
В данном случае на каждом шаге декларируется твой intent (намерение). Циклы - это подробно описаный способ получения нужного, ФП - это описание того, что хочешь получить. Если попрактиковаться ФП должное время, то даже человек привыкший к loops будет видеть этот код более читаемый, ведь намерения читаются очень просто. «Хочу все элементы списка сделать в нижнем регистре», «хочу оставить только те элементы, которые начинаются на a», «хочу сгрупировать их в Map по длине». Loop скорее всего бы смешал три действия в кучу. Если не смешал бы, то написал бы значительно более длинным способом и намерение пришлось бы писать в комментариях. Особенно интересно как легко воспринимают ФП подход начинающие программисты без сформированых привычек. Для них вполне естественно думать трансформациями одних данных в другие, вместо перекладывания одиночных кубиков.
Насчет исполнения, то многие языки выполняют код лениво или не лениво. Например Java по дефолту выполнила бы код лениво, как я себе понимаю Streams, и так вплоть до финальной трансформации в желаемую структуру данных. Ленивое выполнение позволяет избежать создания промежуточных структур данных, которые бы нагрузили сборщик мусора.
Исправление
vertexua,
:
Вместо <бред>
Мне кажется корень проблемы как раз в том, что ты видишь функциональный код таким как его изобразил. А другие люди видят его понятным и читаемым. Другие люди - не ты. Эту истину лучше понять раньше, чем позже
Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)
В данном случае на каждом шаге декларируется твой intent (намерение). Циклы - это подробно описаный способ получения нужного, ФП - это описание того, что хочешь получить. Если попрактиковаться ФП должное время, то даже человек привыкший к loops будет видеть этот код более читаемый, ведь намерения читаются очень просто. «Хочу все элементы списка сделать в нижнем регистре», «хочу оставить только те элементы, которые начинаются на a», «хочу сгрупировать их в Map по длине». Loop скорее всего бы смешал три действия в кучу. Если не смешал бы, то написал бы значительно более длинным способом и намерение пришлось бы писать в комментариях.
Насчет исполнения, то многие языки выполняют код лениво или не лениво. Например Java по дефолту выполнила бы код лениво, как я себе понимаю Streams, и так вплоть до финальной трансформации в желаемую структуру данных. Ленивое выполнение позволяет избежать создания промежуточных структур данных, которые бы нагрузили сборщик мусора.
Исправление
vertexua,
:
Вместо <бред>
Мне кажется корень проблемы как раз в том, что ты видишь функциональный код таким как его изобразил. А другие люди видят его понятным и читаемым. Другие люди - не ты. Эту истину лучше понять раньше, чем позже
Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)
В данном случае на каждом шаге декларируется твой intent (намерение). Циклы - это подробно описаный способ, ФП - это что собственно требуется. Если попрактиковаться ФП должное время, то даже человек привыкший к loops будет видеть этот код более читаемый, ведь намерения читаются очень просто. «Хочу все элементы списка сделать в нижнем регистре», «хочу оставить только те элементы, которые начинаются на a», «хочу сгрупировать их в Map по длине». Loop скорее всего бы смешал три действия в кучу. Если не смешал бы, то написал бы значительно более длинным способом и намерение пришлось бы писать в комментариях.
Насчет исполнения, то многие языки выполняют код лениво или не лениво. Например Java по дефолту выполнила бы код лениво, как я себе понимаю Streams, и так вплоть до финальной трансформации в желаемую структуру данных. Ленивое выполнение позволяет избежать создания промежуточных структур данных, которые бы нагрузили сборщик мусора.
Исправление
vertexua,
:
Вместо <бред>
Мне кажется корень проблемы как раз в том, что ты видишь функциональный код таким как его изобразил. А другие люди видят его понятным и читаемым. Другие люди - не ты. Эту истину лучше понять раньше, чем позже
Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)
В данном случае на каждом шаге декларируется твой intent (намерение). Циклы - это подробно описаный способ, ФП - это что собственно требуется. Если попрактиковаться ФП должное время, то даже человек привыкший к loops будет видеть этот код более читаемый, ведь намерения читаются очень просто. «Хочу все элементы списка сделать в нижнем регистре», «хочу оставить только те элементы, которые начинаются на a», «хочу сгрупировать их в Map по длине». Loop скорее всего бы смешал три действия в кучу. Если не смешал бы, то написал бы значительно более длинным способом и намерение пришлось бы писать в комментариях
Исходная версия
vertexua,
:
Вместо <бред>
Мне кажется корень проблемы как раз в том, что ты видишь функциональный код таким как его изобразил. А другие люди видят его понятным и читаемым. Другие люди - не ты. Эту истину лучше понять раньше, чем позже
Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)