Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > F# |
Автор: SKrivosein 15.3.2012, 15:59 |
Собствено сабж. Сам "Интересуюсь" ну и хотелось бы акадимическое мнение ![]() |
Автор: VSB 19.3.2012, 09:19 |
"Приглядываю одним глазом" |
Автор: SKrivosein 19.3.2012, 16:01 |
В общем-целoм F# на VINGRAD проигрывает, никто ничего толком не знает (а если знает, не признаётся ![]() Интересно бы было мнение (без рекламы MSDN), чегож он этот F такого умеет, что наш любимый С (у когото VB) с трудом... |
Автор: k0rvin 20.3.2012, 09:38 | ||||
Можно такой пример использования анонимных типов вместо кортежей?
Так а чем вы недовольны в данном случае? Да, сопоставление с образцом и алгебраические типы данных неразрывны, но в чем проблема-то? |
Автор: diadiavova 20.3.2012, 10:06 | ||
Для начала хотелось бы пример того, какие преимущества дают именно кортежи. Возможно я в них чего-то не понял, я ведь оговорился, что это было мнение дилетанта. Но насколько я понял, кортеж нужен для тех же целей, что и анонимный тип.
Я разве сказал, что это проблема? Просто судя по отзывам функциональщиков это одна из вкусностей ФП, ради которых стоит заморачиваться на нем, в то время как на самом деле там это просто необходимость. То есть проблемы я тут не вижу, но и причин серьезно заняться функциональщиной тоже. В то же время, не стану возражать, если меня кто-то переубедит. |
Автор: k0rvin 20.3.2012, 11:26 | ||||||
Например вернуть несколько значений из функции (синтаксис немного условный):
тут же вам и сразу разбор кортежа с помощью сопоставления с образцом в let-выражении. Как это будет выглядеть с анонимными типами?
Необходимость не может быть "вкусной"? Впрочем вас никто не заставляет пользоваться сопоставлением, особенно в F#, где можно так же использовать классы. В хаскелле для размеченых кортежей автоматически создаются функции-геттеры для полей, думаю в F# это тоже есть. Но я просто не вижу причин им не пользоваться, там где оно удобно, а вот его отстутствие во многих мейнстримных языках меня сильно напрягает. |
Автор: diadiavova 20.3.2012, 11:53 | ||||||||
Анонимный тип для этого не подходит что ли? ![]() Для анонимного типа разбор вообще не нужен, поскольку все объекты в него упакованные, по сути являются его свойствами и достучаться до них можно по именам, что намного удобнее. Как-то так я полагаю
Кроме того, если говорить о задаче возвращения результата целочисленного деления и остатка, то в библиотечной функции для этой цели используется аут-параметр, то есть возможность выбора способа. Я об этом и говорю. Так что же тогда там "вкусно"? ![]()
Если на F# писать так же как на C#, то тогда вообще смысл теряется, хотя бы даже потому, что, как я уже писал выше, C# лучше поддерживается...намного лучше.
А я вот не вижу чем оно удобно, особенно если есть более удобные средства. |
Автор: k0rvin 20.3.2012, 12:20 | ||||||||||||
Я не знаю, что такое анонимные типы в C# потому и спрашиваю.
Это лишь субъективное мнение, не более. Я не вижу в данном случае большего удобства. Опять же никто не мешает вам сохранить кортеж полностью в одну переменную, если нужно.
Теперь я знаю, что такое анонимные типы в C#. Это и есть размеченый кортеж.
Я рад за библиотечную функцию, но целочисленное деление и остаток был выбран лишь для примера. Я не вижу, чем использование out-параметров удобней возвращения кортежа.
Какие более удобные средства? |
Автор: diadiavova 20.3.2012, 12:34 | ||||||
Я не сказал, что это удобнее всегда, просто есть выбор и иногда это действительно удобнее. В данном случае удобно тем, что не требуются дополнительные типы для выполнения элементарной арифметической операции.
Если в конечном итоге это не более чем дело привычки, то опять-таки это плохой аргумент для того, чтобы окунуться в чудесный мир функционального программирования.
Вопрос тогда в том, для чего нужны не размеченные? Да и я ведь с самого начала сказал, что все хорошее, что есть в ФП постепенно заимствуется, а кортежи привел в пример и сказал, что анонимные типы решают те же задачи. С этого и начался спор, не так ли? Анонимный тип удобнее кортежа(по крайней мере не размеченного ![]() |
Автор: k0rvin 20.3.2012, 12:41 | ||||||
Я не вижу, чем это:
удобней этого:
Лишней и ненужной переменной (car)? |
Автор: diadiavova 20.3.2012, 12:55 |
Ну здесь же q и r фактически объявлены, разве нет? А если их будет не две, а больше? А если в рамках одной области видимости потребуется обработать несколько таких объектов(я имею в виду кортежи)? А как это сделать, чтобы отдельные элементы кортежей не смешивались с аналогичными элементами других кортежей того же типа? Ведь это был упрощенный частный пример. Анонимный тип позволяет сохранять его элементы упакованными в отдельные объекты и при этом работать с элементами, а здесь элементы должны быть сначала извлечены и причем отдельная переменная создается для каждого. |
Автор: SKrivosein 20.3.2012, 14:02 |
Спасибо всем участникам. Относительно F# буду и дальше "интересоватся" для расширения горизонта... но особо упорствовать навижу смысла. Есть у нас задачи посложней ![]() P.S. Например начинаются проблемы с забыванием родного (русского) языка ![]() |
Автор: k0rvin 20.3.2012, 14:34 | ||
Угу, это был простой пример с простым решением, но ты как истинный ООПшник взял и все усложнил. =) |
Автор: diadiavova 20.3.2012, 16:25 | ||||
На этом простом примере код в обоих случаях получился практически одинаковым и различий не видно. К сожалению на практике все несколько сложнее и боюсь, в реальных примерах анонимные типы все-таки окажутся более удобными. Собственно об этом и речь. ![]()
Ну вот я примерно о том и сказал, что смысл если и есть, то увидеть его ну ооооочень сложно ![]() |
Автор: Garcian 20.3.2012, 16:59 |
Про все прелести F# очень много рассазывает Сошников в своих лекциях. Правда является сотрудником Майкрософт ![]() |
Автор: diadiavova 20.3.2012, 17:06 | ||
Смотрел я его лекции, возможно кроме двух-трех последних. Не впечатлило. Ога, он там евангелистом служит, по нашему - благовестником ![]() |