[Moscow.pm] Запутался

Ivan Petrov i.petro.77.00 на gmail.com
Вт Окт 2 12:54:44 PDT 2012


>> Зрасте.
> ?

>> 
>> Недавно начал учить Perl и вот узнал, что в нем есть goto.
>> А препод информатики говорит, что за использование goto по рукам надо

> Интересно, а чем ему goto не угодили?
> и чем они должны быть хуже условных переходов или return?

> Есть ли внятная мотивировка?

вообще goto очень удобен в случаях когда идет последовательная
инициализация (выделение) ресурсов и в случае если надо сделать откат:

sub init() {
    unless (do_something1) { goto rollback_something1 }
    unless (do_something2) { goto rollback_something2 }
    unless (do_something3) { goto rollback_something3 }
    unless (do_something4) { goto rollback_something4 }
    return;

    rollback_something4:
        rollback_something4();
    rollback_something3:
        rollback_something3();
    rollback_something2:
        rollback_something2();
    rollback_something1:
        rollback_something1();
}

Если посмотреть скажем в исходники ядра линукс (не перл конечно, но
штукенция серьезная), то там таких конструкций чуть поменьше чем в
каждом модуле встречается :)


Подробная информация о списке рассылки Moscow-pm