Boolean function parameters should be avoided: the parameters of a function or method should be strongly correlated to the name of that method for optimal readability when the method is invoked. Booleans tend to be used as ancillary parameters more often than most, and they also tend to be passed as literals fairly often, which can lead to extremely obtuse code:
container.FindObjectsOfType("Skill", true, false)
In this example, the first parameter (a string) is associated very firmly with the method name. The inclination upon reading the method is most likely to assume that the first parameter names the type to be searched for. But while it’s reasonable to assume that the subsequent parameters affect the search behavior in some way, it isn’t obvious how. To find out what those parameters do, one would need to consult the documentation or at the very least hover over the method to pop up an Intellisense window (possibly clicking through multiple overloads). Both actions disrupt the flow of reading the code.
I tend to refactor boolean parameters into flag enumerations — always for ancilliary parameters, and usually for primary ones as well. The result is far more self-documenting:
container.FindObjectsOfType(
"Skill",
FindOptions.Recursive | FindOptions.SearchSubcomponents
);
As an aside, Objective-C’s selector syntax, which allows the semantics of each argument to be named at the call site, renders this problem much less of a concern, as do named parameters in languages that support them such as Python and newer versions of C#.