I’m a very practical developer. My learning style has always been to learn how to do something, usually by example, now what it’s called.
As such, I know that I know how to write code with predicates, but I might still fail a multiple-choice test to describe what a predicate is.
So I looked it up again. And it’s really quite simple:
A predicate is a statement (or function) that returns either true or false.
You pass some data into the predicate. The predicate logic then performs a check on the data. Then the function/statement return a true or false result to the caller.
The 2 clearest resources with descriptions and examples I’ve found so far are this StackOverflow answer and this other StackOverflow answer (which is C# oriented).
A common example is a function or short comparison statement you write and pass into a function on a list that then performs a mapping or reduction on the list (e.g. to find a subset of items in the list that contain the value(s) your predicate function or statement is checking for).
For example, if I have a list or array of People objects and each object has an Age property, I can write a predicate …
(Person p) => (p.Age >= 18)
… that I pass into a select() function on the list to return only those people who are age 18 or older.
var australianDrinkingAgePeople = fullList.Select(Person p => p.Age >= 18);
In this case, it’s a shortcut for writing your own big for loops and if statements over the list (although there’s nothing to say that the select() statement doesn’t implement that logic behind the scenes).