![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
||
|
SKrivosein |
|
|||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
Собствено сабж. Сам "Интересуюсь" ну и хотелось бы акадимическое мнение
![]() |
|||
|
||||
VSB |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 23.8.2007 Репутация: 1 Всего: 2 |
"Приглядываю одним глазом"
|
|||
|
||||
SKrivosein |
|
|||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
В общем-целoм F# на VINGRAD проигрывает, никто ничего толком не знает (а если знает, не признаётся
![]() Интересно бы было мнение (без рекламы MSDN), чегож он этот F такого умеет, что наш любимый С (у когото VB) с трудом... Это сообщение отредактировал(а) SKrivosein - 19.3.2012, 21:12 |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я поначалу воспринял язык с энтузиазмом(повелся на рекламу), начал изучать, но по мере изучения он нравился мне все меньше. В общем и целом не могу сказать, что я достаточно компетентен, чтобы мое мнение в этом вопросе имело вес, но, учитывая, что никто не высказывается... как говориться: "На безрыбье и рак - рыба".
За что обычно хвалят функциональные языки вообще и сабж в частности: в первую очередь это компактность изложения и удобство использования в многопоточных приложениях благодаря тому, что они обычно не работают с памятью непосредственно. Но применительно к сабжу компактность обеспечивается в большей степени питон-подобным синтаксисом. Да и я не уверен, что компактность - всегда так уж хорошо. Из основных языков нета я предпочтение отдаю вбнету, хотя он имеет более многословный синтаксис, чем к примеру си-шарп, но при этом код на нем гораздо читабельнее и работать с ним намного приятнее. Функциональных фишек в основных языках дотнета хватает, а то, что не реализовано - либо будет реализовано в ближайших версиях, либо является необходимостью в функциональных языках, а в ООЯ просто не нужно, в силу того, что там есть более удобные решения. Взять к примеру кортежи, для ФЯ это может и хорошее решение, но анонимные типы(решающие те же задачи) намного удобнее в использовании. Аналогично можно взять сравнение по образцу, которым так гордятся функциональщики, конечно вещь зачетная, но возникла она в силу особенности системы типов в функциональных языках. При решении некоторых задач функциональные языки более удобны, поэтому некоторые функциональные DSL'ы - просто конфетки, но что до языков общего назначения, то я не уверен, что это хорошо. Кроме того, в настоящее время хорош тот язык, который хорошо поддерживаестя IDE, а с этим у ФЯ беда, я уже не говорю о том, что для них вообще плохо развиты некоторые типы инструментов, поскольку ФЯ никогда не были мейнстримом программирования. Например хороший средств оладки для них не существует. Иногда от функциональщиков можно услышать, что это дескать и не нужно для ФЯ, но это не так. Это, конечно мое ИМХО и на объективность не претендую. Если есть желание освоиться с ФЯ, то изучение сабжа для дотнетчика - самый комфортный путь, а ответить на вопрос
я очень сильно затрудняюсь. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
k0rvin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Можно такой пример использования анонимных типов вместо кортежей?
Так а чем вы недовольны в данном случае? Да, сопоставление с образцом и алгебраические типы данных неразрывны, но в чем проблема-то? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Для начала хотелось бы пример того, какие преимущества дают именно кортежи. Возможно я в них чего-то не понял, я ведь оговорился, что это было мнение дилетанта. Но насколько я понял, кортеж нужен для тех же целей, что и анонимный тип.
Я разве сказал, что это проблема? Просто судя по отзывам функциональщиков это одна из вкусностей ФП, ради которых стоит заморачиваться на нем, в то время как на самом деле там это просто необходимость. То есть проблемы я тут не вижу, но и причин серьезно заняться функциональщиной тоже. В то же время, не стану возражать, если меня кто-то переубедит. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
k0rvin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Например вернуть несколько значений из функции (синтаксис немного условный):
тут же вам и сразу разбор кортежа с помощью сопоставления с образцом в let-выражении. Как это будет выглядеть с анонимными типами?
Необходимость не может быть "вкусной"? Впрочем вас никто не заставляет пользоваться сопоставлением, особенно в F#, где можно так же использовать классы. В хаскелле для размеченых кортежей автоматически создаются функции-геттеры для полей, думаю в F# это тоже есть. Но я просто не вижу причин им не пользоваться, там где оно удобно, а вот его отстутствие во многих мейнстримных языках меня сильно напрягает. Это сообщение отредактировал(а) k0rvin - 20.3.2012, 11:28 -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||
|
|||||||
diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Анонимный тип для этого не подходит что ли? ![]() Для анонимного типа разбор вообще не нужен, поскольку все объекты в него упакованные, по сути являются его свойствами и достучаться до них можно по именам, что намного удобнее. Как-то так я полагаю
Кроме того, если говорить о задаче возвращения результата целочисленного деления и остатка, то в библиотечной функции для этой цели используется аут-параметр, то есть возможность выбора способа. Я об этом и говорю. Так что же тогда там "вкусно"? ![]()
Если на F# писать так же как на C#, то тогда вообще смысл теряется, хотя бы даже потому, что, как я уже писал выше, C# лучше поддерживается...намного лучше.
А я вот не вижу чем оно удобно, особенно если есть более удобные средства. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||||
|
|||||||||
k0rvin |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Я не знаю, что такое анонимные типы в C# потому и спрашиваю.
Это лишь субъективное мнение, не более. Я не вижу в данном случае большего удобства. Опять же никто не мешает вам сохранить кортеж полностью в одну переменную, если нужно.
Теперь я знаю, что такое анонимные типы в C#. Это и есть размеченый кортеж.
Я рад за библиотечную функцию, но целочисленное деление и остаток был выбран лишь для примера. Я не вижу, чем использование out-параметров удобней возвращения кортежа.
Какие более удобные средства? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||||||||
|
|||||||||||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я не сказал, что это удобнее всегда, просто есть выбор и иногда это действительно удобнее. В данном случае удобно тем, что не требуются дополнительные типы для выполнения элементарной арифметической операции.
Если в конечном итоге это не более чем дело привычки, то опять-таки это плохой аргумент для того, чтобы окунуться в чудесный мир функционального программирования.
Вопрос тогда в том, для чего нужны не размеченные? Да и я ведь с самого начала сказал, что все хорошее, что есть в ФП постепенно заимствуется, а кортежи привел в пример и сказал, что анонимные типы решают те же задачи. С этого и начался спор, не так ли? Анонимный тип удобнее кортежа(по крайней мере не размеченного ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
k0rvin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Я не вижу, чем это:
удобней этого:
Лишней и ненужной переменной (car)? -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
||||||
|
|||||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну здесь же q и r фактически объявлены, разве нет? А если их будет не две, а больше? А если в рамках одной области видимости потребуется обработать несколько таких объектов(я имею в виду кортежи)? А как это сделать, чтобы отдельные элементы кортежей не смешивались с аналогичными элементами других кортежей того же типа? Ведь это был упрощенный частный пример. Анонимный тип позволяет сохранять его элементы упакованными в отдельные объекты и при этом работать с элементами, а здесь элементы должны быть сначала извлечены и причем отдельная переменная создается для каждого. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
SKrivosein |
|
|||
![]() Идущий в даль ![]() ![]() Профиль Группа: Участник Сообщений: 271 Регистрация: 9.6.2007 Где: Praha - Прага Репутация: 4 Всего: 8 |
Спасибо всем участникам.
Относительно F# буду и дальше "интересоватся" для расширения горизонта... но особо упорствовать навижу смысла. Есть у нас задачи посложней ![]() P.S. Например начинаются проблемы с забыванием родного (русского) языка ![]() Это сообщение отредактировал(а) SKrivosein - 20.3.2012, 14:06 |
|||
|
||||
k0rvin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 24.1.2010 Репутация: нет Всего: 5 |
Угу, это был простой пример с простым решением, но ты как истинный ООПшник взял и все усложнил. =) -------------------- “Object-oriented design is the roman numerals of computing.” — Rob Pike All software sucks |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
На этом простом примере код в обоих случаях получился практически одинаковым и различий не видно. К сожалению на практике все несколько сложнее и боюсь, в реальных примерах анонимные типы все-таки окажутся более удобными. Собственно об этом и речь. ![]()
Ну вот я примерно о том и сказал, что смысл если и есть, то увидеть его ну ооооочень сложно ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |