Что использовать, C # или F #? В этом случае "реального мира" - PullRequest
3 голосов
/ 23 августа 2010

Я прочитал несколько интересных сравнений C # / F # здесь на stackoverflow. Итак, прежде всего, спасибо всем авторам!

F # очень хвалят, причины выбора C # немного сложнее найти. Во всяком случае, я до сих пор не уверен, какой из них выбрать для этого небольшого и простого «приложения реального мира»: имитация стебля сельди.

Я не знаю функционального программирования (пока), но с точки зрения ОО некоторые разработки кажутся простыми: создать класс Fish и извлечь из него следующие классы: Сельдь, Хищник, Добыча. У каждого должны быть такие свойства, как положение, направление и скорость.

Будет много проходов по коллекциям: каждый небольшой прирост времени каждый объект-рыба будет проверять свою среду и обновлять свои действия.

Я пока не знаю, будет ли это достаточно интенсивно загружать процессор, чтобы я позаботился о мультипроцессоре, но, может быть, поэтому F # там звучит хорошо.

Я уверен, что потрачу много времени на создание прототипов и изучение - я слышал, что F # хорош для этого.

Из того, что я прочитал, C # лучше для GUI, но этого не будет много. Было бы неплохо построить некоторые кривые, но я бы предпочел отправить большую часть результатов на открытый лист Excel или в базу данных. Не уверен, как C # и F # различаются в отношении Excel / баз данных.

Во всяком случае, этот проект просто кажется объектно-ориентированным - может ли C # быть лучше для этого проекта, несмотря на вышеупомянутые моменты в пользу F #? Или ??

Редактировать: Просто хотел сказать спасибо за все комментарии, очень полезные и интересные, надеюсь, это поможет кому-то еще. Одна из вещей, которые мне кажутся интересными, заключается в том, что, хотя F # является мультипарадигмой, все, похоже, предпочитают подход C # к ОО, несмотря на, например, это сравнение . (Кстати, я собираюсь изучать F #.)

Ответы [ 4 ]

14 голосов
/ 23 августа 2010

Нет никаких причин, по которым вы не можете написать алгоритмический код на F # и все еще иметь свой графический интерфейс на C #. Просто поместите алгоритмы в библиотеку, написанную на F #, и напишите приложение с графическим интерфейсом на C #, ссылаясь на библиотеку.

4 голосов
/ 23 августа 2010

Это звучит как приложение, которое может быть написано с использованием обоих стилей. Использование F # кажется целесообразным, и это, вероятно, хорошее приложение для изучения языка F # и функционального программирования.

По поводу архитектуры вы написали:

Я не знаю функционального программирования (пока), но с точки зрения ОО некоторые разработки кажутся простыми: создать класс Fish и извлечь из него следующие классы: Сельдь, Хищник, Добыча. У каждого должны быть такие свойства, как положение, направление и скорость.

Функциональное программирование не так уж и отличается. Это подчеркивает работу с конкретными типами (и вы не используете наследование так часто), поэтому вы, вероятно, определите различные типы, такие как Herring и Predator с похожими свойствами. Затем вы должны создать списки сельдей и список хищников и выполнить пошаговое моделирование двух типов отдельно.

По совпадению, я написал похожую симуляцию с "животными" и "хищниками" в качестве образца для моей книги по функциональному программированию (как на C #, так и на F #). Источник находится в свободном доступе (см. Главу 14), так что вы можете найти это как полезное вдохновение (образец также демонстрирует параллелизм). Использование Excel из F # также вполне возможно (точно так же, как в C #), и пример также доступен в моей книге (см. Исходный код главы 13).

В общем, решение проблемы в F # с использованием функционального программирования потребует несколько иной точки зрения, и вам, вероятно, придется потратить больше времени на эксперименты, но кажется, что проблема могла бы приятно извлечь выгоду из некоторых функций F # (и это это хороший шанс узнать что-то новое).

3 голосов
/ 23 августа 2010

Звучит как хороший шанс попробовать и то и другое, либо смешав их, либо выполнив все на обоих языках, чтобы вы могли испытать оба из них и изучить все различия между функциональным и ОО-программированием.Кстати, вы можете делать OO в F #, так как это гибридный язык, и вы можете заниматься функциональным программированием на C #, конечно, с ограничениями.

Кроме того, у вас не должно быть никаких реальных проблем с доступом к БД или интеграцией в Excel с любого языка.

3 голосов
/ 23 августа 2010

Я на заборе.

Если (как вы подразумеваете из написанного вопроса) вам нужно объектно-ориентированное решение для симуляции, то, конечно, C # будет лучшим инструментом, потому что по своей природе он ОО.

Но если вы захотите рассмотреть функциональное решение, тогда вы обнаружите, что F # будет лучше - потому что оно функционально по своей природе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...