Pull to refresh
70
0
Александр Фомин @Sane

User

Send message

Монада Maybe на стероидах

Reading time4 min
Views22K
Про монады на Хабре было уже столько много публикаций, что, мне кажется, не хватает еще одной.

Я не буду расписывать, что такое монада, я просто покажу одну забавную реализацию монады Maybe (мы же в хабе «Ненормальное программирование»?).
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments11

Аппликация Expressions

Reading time4 min
Views4.6K
Добрый день.

Просматривая недавно чужой код, наткнулся на довольно интересную задачу о IQueryable и Expession trees. Надеюсь, решение будет кому-нибудь полезно.

Задача заключается в том, чтобы повторно использовать некоторый Expression внутри другого Expression, например, у нас есть некий f:

Expression<Func<int, int, int>> f = (a, b) => a + b;


И мы бы хотели использовать этот f внтури другого expression, например так:

Expression<Func<int, int, int, int>> g = (a, b, c) => f(a+b,b)*c;


Причем необходимо, чтобы результирующий expression был «чистым», т.е. пригодным для использования внутри IQueryable (без скомпилированных функций и т.п.)

Решение
Total votes 35: ↑33 and ↓2+31
Comments16

Еще одна причина, почему структуры — это плохо

Reading time3 min
Views3.3K
Столкнулся на работе с интересной точкой зрения. В проекте все мало-мальские data transfer objects сделаны структурами. На вопрос, зачем так было сделано, получил ответ, что таким образом данные защищаются от изменений. С одной стороны, да, звучит, в принципе, логично, любые методы получают только копию и не в силах ничего подменить.
Но с другой стороны...
Total votes 63: ↑38 and ↓25+13
Comments61

Экология программирования

Reading time3 min
Views4.5K
Речь не пойдет о пользе для лесов Бразилии перехода на электронный документооборот или выключении Num lock для экономии электроэнергии. Я хочу поговорить об «экологии» как более широком (или же наоборот, более специализированном) понятии, как взаимодействии разработчика со средой разработки в широком смысле этого слова.
Читать дальше →
Total votes 53: ↑46 and ↓7+39
Comments38

Школьная задачка по физике

Reading time1 min
Views8.5K
Привет,

Предлагаю на ваш суд следующую задачку на школьный курс физики.

На весы поместили сосуд с водой, в воду положили деревянный брусок. Брусок плавает на поверхности. Уровень воды в сосуде, естествено, поднялся. После брусок вынули и в сосуд долили воды до уровня, который был в сосуде вместе с бруском. В каком случае весы покажут больший вес — с плавающим бруском или с долитой водой?
Читать дальше →
Total votes 53: ↑18 and ↓35-17
Comments126

Expressions в C# — impress yourself!

Reading time9 min
Views104K
.NET 4.0 уже не за горами и принесет кучу всего нового, нужного и не очень, крутого и суперкрутого. Однако и в старом добром .NET 3.5 есть много разных интересных фич, которые не используются в повседенвной работе, но иногда здорово облегчают жизнь разработчикам. Одна из таких замечательных штук — это Expressions.
Много текста и кода
Total votes 51: ↑39 and ↓12+27
Comments23

Трехсторонняя монетка

Reading time1 min
Views2.8K
Предположим, у нас есть три варината, среди которых мы хотим выбрать один случайным образом. Еще у нас есть монетка. Как с помощью подбрасывания монетки выбрать один вариант из трех случайным образом с одинаковой вероятностью? Каково мат.ожидание количество подбрасывания монеток? Сколько раз придется бросить монетку в худшем случае?
Total votes 10: ↑7 and ↓3+4
Comments19

Открыть сейф

Reading time1 min
Views1.9K
Привет.

Хочу рассказать вам об одной задаче, которая занимает меня уже очень продолжительное время. Сразу хочу сказать, что я не знаю ее решения (чтобы не превращать топик в очередной топик зла). Также я не встречал задач, подобной этой, в интернете, хотя вполне допускаю, что первый же коммент будет со ссылкой на решение.

Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments36

Метапрограммирование в C++

Reading time5 min
Views39K
Метапрограммирование — это «программирование программ», то есть написание некой промежуточной программы, результатом которой будет некая часть другой программы. Самый простой пример метапрограммирования — это шаблоны C++. Вместо написания десяти одинаковых функций для разных типов, мы пишем шаблон, и компилятор сам соберет нам эти десять функций.
Читать дальше →
Total votes 69: ↑64 and ↓5+59
Comments55

Анонимные типы за пределами функции

Reading time2 min
Views12K
Анонимные типы — очень приятное расширение C#, появившееся в версии 3.0. С помощью анонимных типов мы можем налету создать объект-хранилище и наполнить его данными.
Основное применение анонимных типов — это, конечно, LINQ. Фактически, они и были созданы для него (вообще говоря, все нововведения C# 3.0 были сделаны для LINQ, за исключением, пожалуй, частичных методов).
var o = new {Bar=2, Foo="string"};

Читать дальше →
Total votes 35: ↑26 and ↓9+17
Comments31

Замыкания в C#

Reading time2 min
Views62K
Перед прочтением статьи, ответьте на следующий вопрос — что будет напечатано, после исполнения следующего кода?

P p = Console.WriteLine; // P объявлен как delegate void P();
foreach (var i in new [] { 1, 2, 3, 4 }) {
  p += () => Console.Write(i);
}
p();
Элементарно?
Total votes 65: ↑53 and ↓12+41
Comments43

Information

Rating
Does not participate
Location
Минская обл., Беларусь
Date of birth
Registered
Activity