среда, 13 февраля 2008 г.
Трип
Вчера вечером наблюдал такую картину - кругом лежит снег, на деревьях иней и... радуга... я ничего такого не курил :-D
вторник, 12 февраля 2008 г.
"Безопасный" код.
В общем сразу после знакомства с C# у меня к нему возникло несколько притензий.
На C# можно вполне успешно писать небезопасный с точки зрения исключений код. Утечек памяти при возникновении исключений здесь конечно не будет, но все остальные прелести остаются.
Например такой код:
Какой-то класс
myList;
int foo; int bar; ..... public void stupid_method() { foo = get_foo(); bar = get_bar_by_foo(foo);// !!! }если значения foo и bar не могут быть любыми, скажем одно неявно зависит от другого, этот код работать правильно не будет, так как если get_bar_by_foo бросит исключение, состояние объекта останется некорректным. Самое интересное что похожий код можно встретить где угодно вплоть до учебников. Но это и понятно, я кагбы должен чувствовать себя в безопасности программируя под дотнет))) Еще один пример - анонимные функции. Недавно я захотел написать код, для поиска значения в списке. У контейнера List есть метод Find, который получает на вход делегат. Делегат получает по очереди все элементы списка, и в случае если один из них соответствует критерию должен вернуть true блаблабла. код примерно такой: List
метод(myType need_to_find)
{
//myList.Find(???что сюда писать, делегат получает только один параметр типа myType???);
//казалось бы здесь можно использовать closure
Predicate<myType> pred = delegate(myType m) {
if (m == need_to_find)
return true;
return false;
};
myList.Find(pred);
}
но не тут-то было, в C# анонимные функции не могут ничего возвращать)) в общем пришлось писать функтор...
Делая то-же самое на С++, я-бы мог забиндить один из параметров, здесь же так вроде-бы нельзя...
Подписаться на:
Сообщения (Atom)