В настоящее время я интенсивно изучаю F #. Мне очень нравится это как язык, это просто "чувствует" право и, кажется, позволяет вам создавать элегантный текст с succint.
Мне интересно найти некоторые действительно замечательные "вау-фактор" фрагменты кода F #, которые демонстрируют элегантность языка, особенно по сравнению с С#. Например, мне очень нравится: -
#light let ListProduct l = List.fold_left (*) 1 l
Который вводит список int и умножает каждый элемент в списке, т.е. получает произведение списка (например, список из 1,2,3 будет вычисляться как 1 * 2 * 3 = 6). Ближайшим С# equivilent, использующим LINQ и функциональными концепциями, является следующее: -
using System;
using System.Collections.Generic;
using System.Linq;
...
public static class ListHelper {
public static int ListProduct(List<int> l) {
return l.Aggregate(1, (i, j) => i * j);
}
}
До LINQ, который был бы: -
using System;
using System.Collections.Generic;
...
public static class ListHelper {
public static int ListProduct(List<int> l) {
int ret = 1;
foreach (int i in l) ret *= i;
return ret;
}
}
Я, конечно, не пытаюсь критиковать С# здесь, я думаю, что это замечательный язык, просто приятно видеть, как F # сравнивает и видеть, как он может сделать что-то более элегантно - есть ли у кого-нибудь что-нибудь действительно приятное?