Re:How to reduce the cognitive load of your code
by Retric on Tuesday March 29, 2016 @03:20PM
(#11384121)
Depends on the Validation Logic. I like the style that basically works like this:
validateSortDisplayedItems
{
if(!DisplayedItemsValid())
{
CorrectDisplayedItems();
if(!DisplayedItemsValid())
{
DisplayValidationError();
return;
}
}
sortDisplayedItems(); //Actually sorts items.
}
AKA validate means try and make valid, not verify that data isValid. So, you can't just do if(isValid) sort; the bonus is unrecoverable errors end up at leaf nodes vs. the happy path.At the high level, your function might be sortClicked, which can then respond to that by calling a wide range of functions. (userCanSort,SortData,UpdateDisplay)
PS: I find the validate > correct loop is generally the important and error prone part of code, so I give it priority. The happy path where everything works is more or less an addendum.
I mean, your above code LIES. If I call validateSortDisplayedItems, I don't validate, I validate AND sort. Plus, what do you do if you have "validateItems" and "sortItems", and then one function that calls them each in turn? call it "validateAndSortItems"? Yuck.