Вот два небольших примера.
1. Есть очень популярная задача, организовать конвейер для обработки документов, которые по сути из себя представляют Map или, если говорим о C#, Dictionary. К Dictionary в дот нете, у меня есть одна большая претензия, он слишком часто кидает исключения. Но речь не об этом. Вот так выглядит простой документ, я добавил в него метод AddProperty, с помощью которого можно не только добавить элемент, но и перезаписать старый:
- public class Document : Dictionary<string, object>
- {
- public Document AddProperty(string name, object value)
- {
- if (ContainsKey(name))
- Remove(name);
- Add(name, value);
- return this;
- }
- }
API конвейера тоже простое:
- public class Pipeline
- {
- public void AddProccessor(Func<Document, Document> proccessor)
- {
- }
- public void Execute()
- {
- }
- }
Но самое интересное теперь. Иногда требуется добавить очень простую обработку, которая просто добавляет пару полей к документу. В java пришлось бы поступить как в свинге, анонимный класс с реализацией метода интерфейса листенера. Но в C# коллега подсказал очень и очень красивое решение:
- var pipeline = new Pipeline();
- pipeline.AddProccessor(record => record.AddProperty("NewProp", "Value").AddProperty("AnotherProp", 1));
2. На эту тему копий сломано не мало, перегрузка методов или параметры по умолчанию. Кто бы, что ни говорил, но C# 4.0 c параметрами по умолчанию плюс именование параметров, лично для меня, отличное, красивое и удобно решение.
Вот есть метод:
- public static string format(string value,
- bool option1 = false, bool option2 = false)
- {
- return value;
- }
- format("test", option2: true);
Ну и так, ещё одна рабочая мысль за сегодня: парное программирование - это не только весело, но и действительно продуктивно.
И совсем напоследок цитата дня (которую правда уже постил в Buzz'е, но уж больно понравилась):
- select fun, profit from real_world where relational=false