Рассмотрим следующую (общую, может быть общедоступную в библиотеке) служебную функцию для анализа строки как учетных данных HTTP Basic и возврата имени пользователя и пароля:
let parseBasicCredentials (encodedCredentials: string) =
(* approx. 10 lines of pipes, matching and try/with *)
username, password
Поскольку имя пользователя и пароль являются строками, вызывающие абоненты должны помнить (или проверять документы), что имя пользователя возвращается в качестве первого элемента кортежа, а пароль - в качестве второго.
Однако F # скоро получит поддержку анонимных записей (уже доступно в ночных клубах). Когда это происходит, такие функции также могут возвращать анонимную запись:
let parseBasicCredentials (encodedCredentials: string) =
(* approx. 10 lines of pipes, matching and try/with *)
{| Username = username; Password = password |}
Кажется, это работает нормально, но, поскольку это совершенно новая языковая функция, я не уверен, есть ли в этом какие-либо недостатки, будь то технические или просто неодобрительные. AFAIK, возвращающий кортеж, является идиоматическим и приемлемым решением для простых вспомогательных функций, таких как эта. Кроме того, анонимный тип позволяет присваивать имена элементам и, таким образом, его можно считать более «безопасным», поскольку он более самодокументирован и, следовательно, лучше предотвращает перепутывание возвращаемым значением вызывающей стороны.
Я не рассматриваю вспомогательные функции общего назначения (не доменные), такие как эти кандидаты для возврата отдельно определенных типов записей или кортежей единичных DU. Мне только любопытно, теперь, когда существуют анонимные записи, могут ли они служить «лучшими кортежами», когда нужны специальные, не примитивные возвращаемые значения, как здесь, или если кортежи как-то все еще предпочтительны (и, если да, для которых причины).