All streams
Search
Write a publication
Pull to refresh
142
0
Виталик Гордон @alex_blank

незаслуженный народный артист™

Send message
лучше — это мера весьма контекстно-зависимая

для моей больной головы лучше Haskell, т.к. мне во многих случаях удобнее думать на нём

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

индус за $500/month лучше Haskell'а, да

собственно, статья не про это
да, это типа monad comprehension :)

а всё благодаря тому, что Microsoft знает, кого нанимать на ключевые посты

у LINQ ноги растут из Haskell
я не стал переводить Update, незачем разжевывать очевидное

то был ответ автора некоторым личностям из комментариев к оригинальной статье
добавил, комментируйте еще

дело в том, что помимо того, что код надо читать, его надо еще и писать - и то, что я на C# заверну 'нудную' реализацию в функцию с читабельным именем никак мне не облегчит саму задачу написания кода

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

цикл там парой строк ниже приведён

еще один горе-комментатор
да им и так страшно будет, доделывать чужой код — работа неблагодарная, на чём бы и как бы этот код ни писался

кроме того, в крупных проектах используются mainstream-технологии (а не Haskell) и применяются определенные policy при кодировании, что облегчает задачу
статья не про критику языка в каких-то частностях, а про психологический стресс из-за невозможности адекватно выразить свои мысли в нём

стресс - это объективный критерий

если я мыслю задачу в терминах списков и свёрток, то транслировать это в циклы и состояния при кодировании на C# - больно

хорошо лишь тем, кто по-другому кроме как в императивных терминах думать не умеет
вопрос риторический
у вас мало опыта — no offence
да, на x86-ассемблере тоже реализации алгоритмов по-другому выглядят

и покажите мне пальцем на того, кто не шизанется написать пару сотен таких вот реализаций на x86

а так да, всего-то лишь — символов больше

видите ли, программы пока еще пишут люди :)
>> Во-вторых, какого хрена этот чудик ухитрился впереть сюда генерикс и делегаты

вообще-то это была иллюстрация "как не надо делать в C#" — статью, вы, похоже, не читали (много букв?)
про XNA - это в gamedev

и, btw, не вижу ничего примечательного в унылом managed-враппере над Direct3D и D3DX
упс, забыл про дескрипшены :)

myDescriptions = map description >>> delete "" >>> List.intersperse "\n" >>> concat
вам показалось
для иллюстрации, тот же код на Haskell, но приправленный библиотекой Arrows:

myDescriptions = delete "" >>> List.intersperse "\n" >>> concat


это практически человеческое объяснение того, что нужно сделать:

myDescriptions = вырезав пустые, разбавить ньюлайнами, потом всё склеить


сравните это с унылым циклом:

завести пустой аккумулятор

для каждого foo:
если аккумулятор непустой, прибавить в него ньюлайн
получить дескрипшен, если он непустой - прибавить в аккумулятор

возвратить аккумулятор


Оккам был бы недоволен
если автор что-то и фетишизирует, то декларативность

когда вы пишете цикл, вы говорите, как нужно сделать

когда вы пишете list comprehension или даже map/filter (как в примере) — вы говорите, что нужно сделать

семантика разная, а не внешний вид
а foreach - это совсем другие тапки, в функциональных языках этого не существует (т.к. понятие foreach неприменимо в функциональной терминологии)
нет, вы написали классическую higher-order функцию fold
вообще, если уж ломать шаблоны, то ломать до конца — т.е. сразу взяться за Haskell (там нет возможности писать код так, как вы делали это раньше)

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity