Объясняя переменные
Ваш случай является примером введения, объясняющего переменный рефакторинг. Короче говоря, объясняющая переменная - это переменная, которая не является строго необходимой, но позволяет вам дать четкое имя чему-либо с целью повышения читабельности.
Код хорошего качества сообщает о намерениях читателю; и как профессиональный разработчик удобочитаемость и удобство обслуживания являются вашими целями # 1.
Таким образом, практическое правило, которое я бы порекомендовал, заключается в следующем: если цель вашего параметра не сразу очевидна, не стесняйтесь использовать переменную, чтобы дать ей хорошее имя. Я думаю, что это хорошая практика в целом (если не злоупотреблять). Вот быстрый, надуманный пример - рассмотрим:
editButton.Enabled = (_grid.SelectedRow != null && ((Person)_grid.SelectedRow).Status == PersonStatus.Active);
по сравнению с немного дольше, но, возможно, яснее:
bool personIsSelected = (_grid.SelectedRow != null);
bool selectedPersonIsEditable = (personIsSelected && ((Person)_grid.SelectedRow).Status == PersonStatus.Active)
editButton.Enabled = (personIsSelected && selectedPersonIsEditable);
Булевы параметры
Ваш пример на самом деле подчеркивает, почему логические значения в API часто являются плохой идеей - на вызывающей стороне они ничего не делают, чтобы объяснить, что происходит. Рассмотреть возможность:
ParseFolder(true, false);
Вы должны посмотреть, что означают эти параметры; если бы они были перечислениями, было бы намного яснее:
ParseFolder(ParseBehaviour.Recursive, CompatibilityOption.Strict);
Редактировать:
Добавил заголовки и поменял местами порядок двух основных абзацев, потому что слишком много людей фокусировалось на части логических параметров (честно говоря, это был первый абзац изначально). Также добавлен пример к первой части.