В функциональных языках вроде F# и разных командных оболочках часто можно встретить поддержку "потоковых" операций для работы с данными. Это называется pipe или forwarding или как нибудь-еще, но суть одна – данные подаются на вход одной функции, затем другой, третьей и так далее, и как бы по конвееру перемещаются от источника к приемнику. Также возможна ситуация, когда нескольких элементарных функций объединяются в одну, и потом уже эта функция используется для обработки данных. Такое объединение в функциональной парадигме называется композицией.
Обычно промежуточные функции выполняют над данными какие нибудь операции, трансформируют их, переупорядочивают и т.д. При этом они не обращаются к данным из внешнего контекста, т.е. не имеют побочного эффекта.
Несмотря на то, что в языке C# нет поддержки композиции функций, нечто подобное можно при необходимости реализовать самостоятельно, что позволит писать программы довольно необычным (для программистов на C#, конечно) способом.
Вот такие extension методы для этого понадобятся:
Используя их, программу вычисления хэш-кода файла, например, можно выразить в виде такого "конвеера":Обычно промежуточные функции выполняют над данными какие нибудь операции, трансформируют их, переупорядочивают и т.д. При этом они не обращаются к данным из внешнего контекста, т.е. не имеют побочного эффекта.
Несмотря на то, что в языке C# нет поддержки композиции функций, нечто подобное можно при необходимости реализовать самостоятельно, что позволит писать программы довольно необычным (для программистов на C#, конечно) способом.
Вот такие extension методы для этого понадобятся:
А вот такой метод расширения позволит собрать "конвеер" в виде кольца, используя рекурсивный вызов: Полный код программы будет выглядеть так:
Комментариев нет:
Отправить комментарий