Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В C# (и вообще .net) это (а) делается из коробки с помощью LINQ-операции select и (б) легко реализуется самостоятельно с помощью generics и делегатов.
map (^2) [0, 1, 2, 3]
map (\a -> sin a + cos a) [0, 1, 2, 3]
статья ничего нового не рассказала
почему забросили это дело?
статья направлена на популяризацию языка.
и совершенно точно хуже, чем го для асинхронных серверов.
int delegate(int x) d = ...
int function(int x) f = ...
достаточно разрешить передачу в шаблоны блоков кода в фигурных скобках.
Оно, кстати, глупое и уже неофициально deprecated — никто так не пишет
map!(x => x^^2)([1,2,3]);
template<block B>
void foo()
{
// do something
B; // это не вызов, а именно подстановка кода напрямую
// do something
}
// ...
foo<{ bar1(); }>();
foreach(X; in_array) {
X = sin(X) + cos(X);
out_array ~= X;
}
Да и map тут какой-то не очень обобщённый — работает только для массивов.
double f(double [] x) {
return x[0] + x[1];
}
double [] g(double x) {
return [x, x];
}
int main()
{
double y = f(g(1));
}
void sqr(ref int x)
{
x = x * x;
}
void main()
{
int x = 2;
sqr(x);
assert (x == 4);
}
import std.algorithm;
auto Sqr(int[] a)
{
return map!(x => x * x)(a);
}
void main()
{
int[] X = [0, 1, 2, 3, 4];
auto Y = Sqr(X); // ... так, чтобы затем в коде писать Y = f(X)
assert(equal(Y, [0, 1, 4, 9, 16]));
}
Принцип «лишь бы не как у всех», разработчиков D не заботит и это хорошо.
int delegate(int X) power2 = delegate(int X) { return X * X; };
val power2 = (x: Int) => x*x
auto power2 = delegate(int X) { return X * X; };
Большая избыточность определения.
# Скачать исходники с GitHub
git clone https://github.com/buggins/dlangui.git
cd dlangui
# example 1 - демо, в котором используется большинство виджетов
dub run dlangui:example1 --build=release
# tetris - демо, игра TETRIS
dub run dlangui:tetris --build=release
D старается следовать принципу zero overhead, но пока это у C++ получается всё же лучше
Фишки языка D