Ошибочное несоответствие Контрольной суммы Регистрации черепахи

Сообщение в блоге, которое Вы заключили в кавычки, преувеличивает свое требование немного. FP не делает , устраняют потребность в шаблонах разработки. Термин "шаблоны разработки" просто широко не используется для описания того же самого на языках FP. Но они существуют. Функциональные языки имеют много правил лучшей практики формы, "при обнаружении с проблемой X используйте код, который похож на Y", который является в основном, каков шаблон разработки.

Однако это корректно, что САМЫЕ ОПРЕДЕЛЕННЫЕ ДЛЯ ООП шаблоны разработки в значительной степени не важны на функциональных языках.

я не думаю, что это должно быть особенно спорно, чтобы сказать, что шаблоны разработки в общем только существуют для исправления недостатков на языке. И если другой язык может решить ту же проблему тривиально, что другой язык не будет иметь потребности шаблона разработки для него. Пользователи того языка даже не могут знать, что проблема существует , потому что, ну, в общем, это не проблема на том языке.

Вот то, что Банда Четыре должна заявить об этой проблеме:

выбор языка программирования важен, потому что это влияет на точку зрения. Наши шаблоны принимают Smalltalk/C ++-level функции языка, и тот выбор определяет то, что может и не может быть реализовано легко. Если мы приняли процедурные языки, мы, возможно, включали шаблоны разработки под названием "Наследование", "Инкапсуляция" и "Полиморфизм". Точно так же некоторые наши шаблоны поддерживаются непосредственно менее общими объектно-ориентированными языками. CLOS имеет мультиметоды, например, которые уменьшают потребность в шаблоне, таком как Посетитель. На самом деле существует достаточно различий между Smalltalk и C ++, чтобы означать, что некоторые шаблоны могут быть выражены более легко на одном языке, чем другой. (См. Итератор, например.)

(Вышеупомянутое является кавычкой от Введения до книги Шаблонов разработки, страницы 4, абзаца 3)

основные функции функционального программирования включают функции как первоклассные значения, приправляющие карри, неизменные значения, и т.д. Для меня не кажется очевидным, что шаблоны разработки OO приближают любую из тех функций.

, Каков шаблон "команда", если не приближение первоклассных функций?:) На языке FP Вы просто передали бы функцию как аргумент другой функции. На языке ООП необходимо обернуть функцию в классе, который можно инстанцировать и затем передать тот объект другой функции. Эффект является тем же, но в ООП это назвало шаблон разработки, и требуется намного больше кода. И каков шаблон "абстрактная фабрика", не приправляя карри? Параметры передачи к функции понемногу, для конфигурирования, какое значение это выкладывает при окончательном вызове его.

Так да, несколько шаблонов разработки GoF представляются избыточные на языках FP, потому что более мощный и легче использовать альтернативы существуют.

, Но конечно существуют все еще шаблоны разработки, которые являются не решены языками FP. Что FP эквивалентен из одиночного элемента? (Игнорирующий на мгновение, что одиночные элементы обычно являются ужасным шаблоном для использования)

И он работает оба пути также. Как я сказал, FP имеет свои шаблоны разработки также, люди просто обычно не думают о них как таковой.

, Но Вы, возможно, натыкались на монады. Каковы они, если не шаблон разработки для "контакта с глобальным состоянием"? Это - проблема, это так просто на языках ООП, что никакой эквивалентный шаблон разработки не существует там.

Нам не нужен шаблон разработки для "инкремента, который статическая переменная", или "считала из того сокета", потому что это, что Вы делаете .

Высказывание Монады является шаблоном разработки, так же абсурдно, что Целые числа с их обычными операциями и нулевым элементом являются шаблоном разработки. Нет, Монада математический шаблон , не шаблон разработки.

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

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

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

, Но другая возможность мог бы быть то, что Вы просто не поняли решение проблем тривиально, которые потребовали бы шаблонов разработки на языке ООП.

, Когда Вы используете приправление карри, или передаете функцию как аргумент другому, остановке и думаете о том, как Вы сделали бы это на языке ООП.

там какая-либо истина к заявлению, что функциональное программирование избавляет от необходимости шаблоны разработки ООП?

Да.:), Когда Вы работаете на языке FP, Вам больше не нужны ОПРЕДЕЛЕННЫЕ ДЛЯ ООП шаблоны разработки. Но Вам все еще нужны некоторые общие шаблоны разработки, как MVC или другое не-ООП определенный материал, и Вам нужны несколько новых определенных для FP "шаблонов разработки" вместо этого. Все языки имеют свои недостатки, и шаблоны разработки обычно, как мы работаем вокруг них.

Так или иначе, можно найти интересным попробовать силы в "более чистых" языках FP, как ML (мой любимый, по крайней мере, для изучения целей), или Haskell, где у Вас нет опоры ООП для возвращений, когда Вы сталкиваетесь с чем-то новым.

<час>

Как ожидалось, несколько человек, которым возражают против моего определения шаблонов разработки как "исправление недостатков на языке", таким образом, вот мое выравнивание: Как уже сказано, большинство шаблонов разработки характерно для одной парадигмы программирования, или иногда даже одного определенного языка. Часто, они решают проблемы, что [только 1 110] существуют в той парадигме (См. монады для FP или абстрактные фабрики для ООП). Почему шаблон "абстрактная фабрика" не существует в FP? Поскольку проблема, которую это пытается решить, не существует там. Так, если проблема существует на языках ООП, который не существует на языках FP, тогда ясно, который является недостатком языков ООП. Проблема может быть решена, но Ваш язык не делает так, но требует, чтобы набор шаблонного кода от Вас работал вокруг этого. Идеально, мы хотели бы, чтобы наш язык программирования волшебно сделал весь , проблемы уходят. Любая проблема, которая является все еще, существует в принципе недостаток языка.;)

5
задан PositiveGuy 21 July 2009 в 16:44
поделиться

2 ответа

Что-то рассинхронизировалось или стало поврежденным, и поскольку оно находится в вашем каталоге .svn BASE, если вы не уверены, что возитесь с этим, вам, вероятно, лучше удалить родительский элемент .svn, а затем выполните обновление. Конечно, сделайте резервную копию или посмотрите, работает ли экспорт, прежде чем делать это, чтобы вы не потеряли никаких изменений.

FWIW, я иногда получаю это со ссылками на наши библиотеки, где Visual Studio, кажется, держит блокировку некоторых файлов ( даже если он не компилируется) и не позволяет мне их обновлять. Я считаю, что это связано с файлами документации xml.

Примечание : Subversion 1.7+ реализует новый подход к рабочей копии , который централизует метаданные, и теперь у нее есть единственный каталог .svn в корень вашей рабочей копии. Лучше всего навести порядок,

9
ответ дан 13 December 2019 в 05:40
поделиться

Похоже, один из ваших файлов SVN поврежден. Во-первых, отметьте все, что можно безопасно зарегистрировать, и обязательно сделайте резервную копию всего. Затем исправьте проблемный файл - обычно для этого нужно удалить его из вашего репозитория. Это должно быть нормально, если вы все равно проверяете новую версию.

3
ответ дан 13 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: