это зависит от языка, который вы используете.например, в php обычной практикой является генерирование исключения и перехватывание его, например, для прерывания цикла или рекурсии, вызываемой внутри объекта, где недостаточно просто перейти к родительской функции.рассмотрим этот пример:
<?php
class hideAndSeekWithOnlyOneOtherPlayer {
public function seek() {
foreach($rooms as $room) {
if($this->checkRoom($room)) {
$this->shoutThatIFoundYou();
return;
}
}
$this->shoutThatICantFindYou();
}
function checkRoom($room) {
$hideouts = $this->getPossibleHideoutsForRoom($room);
return $this->checkHideouts($hideouts);
}
function checkHideouts($hideouts) {
foreach($hideouts as $hideout) {
return $this->checkHideout($hideout);
}
return false;
}
function checkHideout($hideout) {
$this->walkToHideout();
return $this->seeIfPersonIsInsideHideout();
}
}
?>
раздражает постоянная передача логического значения от одной функции к другой, вместо этого вы можете просто сгенерировать исключение в seeIfPersonIsInsideHideout () и вообще не заботиться о возвращаемых значениях!Мэйби, это плохой пример, потому что он действительно важен, когда у тебя может быть несколько случаев.тогда вам придется вернуть обратно константу, или строку, или целое число, которые вы проверяете в операторе case и т. д., гораздо лучше (проще кодировать и понимать, меньше вероятность ошибок), чем определять собственный класс исключений!