Угадай этот ярлык goto - PullRequest
       18

Угадай этот ярлык goto

0 голосов
/ 22 апреля 2009

Я собирался провести рефакторинг следующего кода VB6 (написанного кем-то другим).

Public Function GetValue(ID As Long) As Boolean
    On Error GoTo eh

    '' ... DAL Logic...

eh_Exit:
  On Error GoTo 0
  Exit Function
eh:
  Resume eh_Exit
End Function

Как вы думаете, что изначально задумал автор для лейбла eh?

Вероятно, просто "а, что-то случилось?" ...

Я хочу сделать его читаемым, не думая об этом, как сейчас ...

Ответы [ 4 ]

13 голосов
/ 22 апреля 2009

обработчик ошибок? Не знаю, почему там нет, знаете ли, обработки ошибок .

4 голосов
/ 22 апреля 2009

"*** E *** rror *** H *** andler"

Моя первая работа на C, каждая функция имела метку внизу под названием "err_exit". Любое условие ошибки, которое не может быть обработано локально, было обнаружено и обработано с помощью «if (error ...) goto err_exit;». Также все наши функции возвращали либо 0 в хорошем состоянии, либо -1 в случае ошибки.

Теоретически, err_exit должен был выполнить некоторую очистку, но на практике большинство наших функций заканчивалось как

  return 0;
err_exit:
  return -1;
0 голосов
/ 22 апреля 2009

Я бы рискнул предположить, что это шаблон, который позволяет коду функции просто завершиться и не должен пропускать какую-либо логику обработки ошибок, но также и корректно завершаться, если у создателя функции нет функции выхода заявление.

Таким образом, вы можете просто вставить все из eh_Exit в любую функцию без необходимости изменять оставшийся код в этой функции.

0 голосов
/ 22 апреля 2009

«Интересный» дизайн. Это выглядит как место для установки точки останова во время отладки, но это творчески запутанно.

...