try/catch/finally

  • Автор темы autosoft
  • Дата начала

autosoft

Guest
Nirva
У меня два вопроса:
1. Чем не устраивает приведенный мною пример?
2. Откуда такая неприязнь к использованию finally? :)
 

Nirva

Dmitry Polyakov
autosoft
1. это не пример. это не задача, которую ты решаешь. это выдумка.
2. какая неприязнь? неприязнь у меня к попыткам перенести логику туда, где ей не место. при чем перености безосновательно. finally тут вообще не при чем.
 

autosoft

Guest
Nirva
Правильно – этот пример выдумка. Согласить, что все над чем ты работаешь (и это касается не только программирования) требует обдумывания. И все твои решения являются твоей выдумкой. Именно поэтому в программировании одну и туже задачу два разработчика решат по разному. И именно поэтому такое отношение к finally в исключениях – кому-то такая обработка нужна, а кому-то нет.
Ниже привожу несколько "выдумок" по поводу использования finally.
PHP:
protected function release() {

    try { parent::release(); } catch (Exception $e) { }

    $this->visible_count = NULL;
    $this->position->enabled = false;

    if (isset($e)) throw new Exception($e->getMessage(););
}
...
PHP:
try {

    if (is_null($count = $this->get_count()))
    throw new Exception("Ошибка определения количества строк сетки");

    for ($index = 1; $index <= $count; $index++) {

        $this->position->value = $index;
        $this->do_update();
    }

} catch (Exception $e) { }

$this->position->enabled = false;

if (isset($e)) throw new Exception($e->getMessage());
...
PHP:
protected function top() {

    echo "<tr><td>";

    try { $this->do_top(); } catch (Exception $e) { }

    if (isset($e)) $this->message_error($e->getMessage());

    echo "</td></tr>";
}
...
PHP:
protected function bottom() {

    echo "<tr><td>";

    try { $this->do_bottom(); } catch (Exception $e) { }

    if (isset($e)) $this->message_error($e->getMessage());

    echo "</td></tr>";
}
Между прочим, если присмотреться, то не в одной из этих выдумок finally нет. Но это не потому что он там не нужен, а потому что в языке он не предусмотрен.
Кстати по поводу исключений в PHP в принципе. Попробуйте выполнить вот эти два примера:
PHP:
try {

    throw new Exception("Исколючение");

} catch (Exception $e) { }
PHP:
try {

    throw new Exception("Исколючение");

} catch (Exception $e);
В PHP 5.0.5 второй пример вообще не выполняется.
Но я думаю что это не ошибка, а недоработка. Исключение в языке вещь новая и поэтому будет развиваться. И возможно появление finally не за горами.

На этом думаю тему можно закрывать. Во всяком случае я ответ на свой вопрос "кто и как обходиться без finally" получил.

-~{}~ 28.11.05 09:53:

Всем спасибо.
 
Сверху