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

User

28
Subscribers
Send message

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

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

Я не буду расписывать, что такое монада, я просто покажу одну забавную реализацию монады Maybe (мы же в хабе «Ненормальное программирование»?).
Читать дальше →

Аппликация Expressions

Reading time4 min
Reach and readers4.9K
Добрый день.

Просматривая недавно чужой код, наткнулся на довольно интересную задачу о 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 (без скомпилированных функций и т.п.)

Решение

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

Reading time3 min
Reach and readers3.7K
Столкнулся на работе с интересной точкой зрения. В проекте все мало-мальские data transfer objects сделаны структурами. На вопрос, зачем так было сделано, получил ответ, что таким образом данные защищаются от изменений. С одной стороны, да, звучит, в принципе, логично, любые методы получают только копию и не в силах ничего подменить.
Но с другой стороны...

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

Reading time3 min
Reach and readers4.6K
Речь не пойдет о пользе для лесов Бразилии перехода на электронный документооборот или выключении Num lock для экономии электроэнергии. Я хочу поговорить об «экологии» как более широком (или же наоборот, более специализированном) понятии, как взаимодействии разработчика со средой разработки в широком смысле этого слова.
Читать дальше →

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

Reading time1 min
Reach and readers9.1K
Привет,

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

На весы поместили сосуд с водой, в воду положили деревянный брусок. Брусок плавает на поверхности. Уровень воды в сосуде, естествено, поднялся. После брусок вынули и в сосуд долили воды до уровня, который был в сосуде вместе с бруском. В каком случае весы покажут больший вес — с плавающим бруском или с долитой водой?
Читать дальше →

Expressions в C# — impress yourself!

Reading time9 min
Reach and readers115K
.NET 4.0 уже не за горами и принесет кучу всего нового, нужного и не очень, крутого и суперкрутого. Однако и в старом добром .NET 3.5 есть много разных интересных фич, которые не используются в повседенвной работе, но иногда здорово облегчают жизнь разработчикам. Одна из таких замечательных штук — это Expressions.
Много текста и кода

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

Reading time1 min
Reach and readers3.3K
Предположим, у нас есть три варината, среди которых мы хотим выбрать один случайным образом. Еще у нас есть монетка. Как с помощью подбрасывания монетки выбрать один вариант из трех случайным образом с одинаковой вероятностью? Каково мат.ожидание количество подбрасывания монеток? Сколько раз придется бросить монетку в худшем случае?

Открыть сейф

Reading time1 min
Reach and readers2.1K
Привет.

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

Читать дальше →

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

Reading time5 min
Reach and readers47K
Метапрограммирование — это «программирование программ», то есть написание некой промежуточной программы, результатом которой будет некая часть другой программы. Самый простой пример метапрограммирования — это шаблоны C++. Вместо написания десяти одинаковых функций для разных типов, мы пишем шаблон, и компилятор сам соберет нам эти десять функций.
Читать дальше →

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

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

Читать дальше →

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

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

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

Information

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