В программировании есть (как минимум) две фундаментальные и неразрешимые проблемы – предсказание сроков разработки и выбор имен для классов/функций/переменных. С первой проблемой хоть как-то пытаются бороться. А вот вторую, складывается впечатление, только стараются усугубить.
Помнится, несколько лет назад на RSDN я защищал короткие имена методов, принятые в стандартной библиотеки Ruby – вроде to_i (а не ToInteger), to_a (а не ToArray) и пр. Поскольку у меня большой C/C++ опыт, то ничего страшного в to_i по сравнению с strcpy не видел и не вижу. Тем не менее, сейчас я сам оказался в ситуации своего тогдашнего оппонента. Но смолчать не смогу :)
Читаю статью Beautiful Concurrency Саймона Пейтона Джонса. Дохожу до примера в разделе 4.3 на стр.17:
sequence_ [ elf elf_group n | n <- [1..10] ]
Конструкция в квадратных скобках – это list comprehension, т.е. формирование списка элементов вида [elf elf_group 0, elf elf_group 1, ...,elf elf_group 10].
Намного интереснее функция sequence_. Делает она простую вещь – перебирает последовательно элементы переданного ей списка. И возвращает, грубо говоря, void. Т.е. имеет прототип:
sequence_ [IO a] :: IO ()
В принципе, ее цель понятна. Но почему название такое, с подчеркиванием на конце? А потому, что уже есть sequence без подчеркивания с прототипом:
sequence [IO a] :: IO [a]
которая берет один список и возвращает второй список. А не void.
Вот такие вот две функции в стандартной библиотеке. С сильно разным возвращаемым значением, но отличающиеся всего лишь наличием подчеркивания в имени!
Все-таки остаюсь при мнении, что хардкорные функциональщики не от мира сего. Слишком сильна в них любовь к математике, чрезмерной компактности, однобуквенным обозначениям с разным количеством дополнительных закорючек.
2 комментария:
А вариант с возвращаемым значением нельзя применть в данном случае?
Можно. Но смысла в этом нет, т.к. оно будет проигнорированно.
Отправить комментарий