Todos conocen las Cartas de Dijkstra al editor: vaya a la declaración considerada perjudicial (también aquí transcripción .html y aquí .pdf) y ha habido un impulso formidable desde ese momento para evitar la declaración goto siempre que sea posible. Si bien es posible usar goto para producir un código extenso e imposible de mantener, no obstante permanece en los lenguajes de programación modernos . Incluso la estructura avanzada de control de continuación en Scheme puede describirse como un goto sofisticado.
¿Qué circunstancias justifican el uso de goto? ¿Cuándo es mejor evitarlo?
Como una pregunta de seguimiento: C proporciona un par de funciones, setjmp y longjmp, que proporcionan la capacidad de ir no solo dentro del marco de pila actual sino dentro de cualquiera de los marcos de llamada. ¿Deberían considerarse estos tan peligrosos como el goto? ¿Más peligroso?
El propio Dijkstra lamentó ese título, del que no era responsable. Al final de EWD1308 (también aquí .pdf) escribió:
Finalmente una historia corta para el registro. En 1968, las Comunicaciones de la ACM publicaron un texto mío bajo el título " La declaración Goto considerada dañina ", que en años posteriores sería mencionada con mayor frecuencia, sin embargo, lamentablemente, a menudo por autores que no habían visto más de ella título, que se convirtió en una piedra angular de mi fama al convertirse en una plantilla: veríamos todo tipo de artículos bajo el título "X considerado dañino" para casi cualquier X, incluido uno titulado "Dijkstra considerado dañino". ¿Pero que había pasado? Había presentado un documento con el título " Un caso contra la declaración Goto", que, para acelerar su publicación, el editor había cambiado a una" carta al Editor ", ¡y en el proceso le había dado un nuevo título de su propia invención! El editor era Niklaus Wirth.
Un artículo clásico bien pensado sobre este tema, que debe coincidir con el de Dijkstra, es Programación estructurada con Ir a declaraciones , por Donald E. Knuth. Leer ambos ayuda a restablecer el contexto y una comprensión no dogmática del tema. En este documento, se informa la opinión de Dijkstra sobre este caso y es aún más fuerte:
Donald E. Knuth: Creo que al presentar tal punto de vista no estoy en desacuerdo con las ideas de Dijkstra, ya que recientemente escribió lo siguiente: "Por favor, no caigas en la trampa de creer que soy terriblemente dogmático sobre [el ir a la declaración]. ¡Tengo la incómoda sensación de que otros están haciendo de ella una religión, como si los problemas conceptuales de la programación pudieran resolverse con un solo truco, con una forma simple de disciplina de codificación! "
goto
.