С почти всем кодом, который я пишу, я часто сталкиваюсь с задачами набора сокращений в коллекциях, которые в конечном итоге заканчиваются наивными условиями "если" внутри них. Вот простой пример:
for(int i=0; i<myCollection.size(); i++)
{
if (myCollection[i] == SOMETHING)
{
DoStuff();
}
}
С функциональными языками я могу решить проблему, уменьшив коллекцию до другой коллекции (легко), а затем выполнив все операции над моим уменьшенным набором. В псевдокоде:
newCollection <- myCollection where <x=true
map DoStuff newCollection
И в других вариантах C, таких как С#, я мог бы уменьшить с предложением where, как
foreach (var x in myCollection.Where(c=> c == SOMETHING))
{
DoStuff();
}
Или лучше (по крайней мере, на моих глазах)
myCollection.Where(c=>c == Something).ToList().ForEach(d=> DoStuff(d));
По общему признанию, я делаю много смешения парадигмы и субъективного/основанного на мнениях стиля, но я не могу не чувствовать, что мне не хватает чего-то действительно фундаментального, что позволило бы мне использовать эту предпочтительную технику с С++. Может ли кто-нибудь просветить меня?