Hace poco me enteré de que PHP 5.3 apoya la nueva construcción del lenguaje llamado GOTO. Todo el mundo sabe lo que hace. Sin embargo, no es exactamente el tradicional GOTO, es sólo una marca de salto. Estoy interesado en saber si este GOTO es malo y que implica el código de malo?

  • véase la Pregunta stackoverflow.com/questions/723324/…
  • GOTO es como regexp para el análisis de HTML; codinghorror.com/blog/archives/001311.html
  • en la universidad yo solía usar el goto cuando yo quería cabrear a mis profesores, muahahaha….los programas de curso todavía funcionan a la perfección, pero siempre pude ver sus ojos espasmos cuando te vienen a través de esos pequeños declaraciones
  • >»sin Embargo, no es exactamente el tradicional GOTO, es sólo una marca de salto.» ¿Cómo se diferencia esto de los «tradicionales» GOTO?
  • Recurrente GOTO pregunta en StackOverflow se consideran perjudiciales.
  • A veces, el código es mucho más clara y robusta uso de goto. Por ejemplo, algún tipo de analizadores o el estado de las máquinas son mejores programado mediante un goto. Pero en general, me gustaría evitar esto.
  • goto no está mal del todo.. pero este es realmente el mal: eval("foo: goto foo;");
  • si usted piensa goto es el mal y no puede usar goto de forma segura, limpia y sana solo eres un mal programador eso es todo

12 Comentarios

  1. 141

    A menos que usted está programando en ensamblador GOTO siempre deben ser tratados de la misma manera como el chaleco salvavidas de los aviones: es bueno tener disponibles, pero si usted necesita para usarlos significa que usted está en un gran problema.

    • Yo diría más bien que «si es necesario para el uso de ellos Y USTED NO TIENE de ellos, usted está en un gran problema». Que es un punto fuerte a favor de tener un goto en un lenguaje de programación.
    • Sí, porque la vida chalecos han salvado muchas vidas en accidentes de avión!
    • No en el plano de la se bloquea, pero se salvó muchas vidas en aterrizaje de emergencia sobre el agua (mar, lagos, ríos).
    • En realidad, tenía un escenario donde ir, literalmente, nos salvó. Empezamos a usar MVC, y estábamos usando el MVC para la gestión de la dependencia, ya que tenía una muy maduro de carga de clases del sistema. Así, de repente, en el legado de los archivos que utiliza el tradicional header(); die; construir, APC comenzó a tirar de la segmentación de fallas al azar. Goto se convirtió en el chaleco de vida que mantienen el legado de código flotante hasta que todo podría ser refactorizado en los controladores. Asimismo, ofrece un rendimiento mejorado, evitando abrumadoramente profundo condicionales
    • Muy bien explicado. Me gusta mucho esta respuesta. 😀
    • Me encanta que cuando stackoverflowers argumentar sobre la semántica de una analogía se utiliza para hacer un punto…

  2. 103

    No puedo creer que nadie ha publicado esto 🙂

    Es GOTO en PHP mal?

    Concedido, PHP no está compilado… tal vez el raptor se caza en cada visita a su sitio web?

    • El más divertido de bits es que el cómic es en el manual de php de referencia para ir a: es.php.net/manual/en/control-structures.goto.php así que sí, el raptor perseguirá, incluso en PHP 😉 también gran texto alternativo: «de Neal Stephenson piensa que es lindo a nombre de sus etiquetas ‘dengo'»
    • Yo le doy +2 si pudiera (uno por ser de derecha, una para el comic)
    • El raptor se caza en cada visita a su sitio web a través de la no-navegador de Mozilla 🙂
  3. 78

    Mala estructuración de código está mal, independientemente de la estructura de control que utilice.

    Yo personalmente prefiero un goto que pone de manifiesto el flujo del programa a «variables de control» y anidada «si» que indirectamente causa justa de la misma rama en el código.

    Así, sólo tiene que escribir las dos versiones (con y sin GOTO) y ver cual es más fácil de comprender. A continuación, la elección es fácil.

    • +1 para los dos primeros párrafos. ¿Por qué no este la aceptó responder en su lugar? 🙂
    • Bueno…es razonable, pero todos sabemos que, en el fondo, hemos llegado a esta página es porque se sentía culpable al pensar en el uso de goto x;. Nunca alguien del flujo de trabajo ideal, sólo el soporte de la vida que sabemos que nunca vamos a volver a escribir, en lugar, te tristemente dejar para la próxima pobre hombre a tratar.
    • +1 yo lo uso para ir a la final de código en línea, para evitar feo si anidadas()’s. También puede evitar la innecesaria la ejecución de código – por ejemplo, el código que se ejecuta antes de un if-elseif-elseif-else bloque que podría haber «rescatado» después de la 2ª elseif.
    • Si no está disponible en su versión de PHP, a continuación, un «break;» en medio de un do{ … } while(0) puede ser apropiada para usted. Yo solía hacer esto (con la documentación de forma natural).
    • Tornillo de la estructura que vamos a utilizar GOTO para la diversión de ella !!
    • Este es un viejo post, pero tengo que estar de acuerdo aquí… Es una estructura de control como cualquier otro y si son una mierda programador, usted va a escribir mierda estructuras de control con o sin goto. He visto el código incrustado con anidadas y 5/6 niveles de profundidad con variables de control if ($somePass): cuando realmente cada paso es sólo la comprobación para ver que tiene lo que necesita, y quiere ir a otro lugar para terminar el trabajo.. Ir GOTO bien pequeña cosa que usted!
    • Yo uso goto y realmente me ayuda a evitar innecesarias estructuras de control. Puedo mantener el código corto así como legible. Estoy feliz de que tenemos esta en Php.

  4. 22

    Creo que esta es la parte más importante de la El manual de PHP de la página y que falta aquí:

    Este es no una plena sin restricciones ir a. El objetivo de la etiqueta debe estar dentro del mismo archivo y el contexto, lo que significa que usted no puede saltar fuera de una función o método, ni se puede saltar en un. Usted también puede saltar en cualquier tipo de bucle o de cambiar la estructura. Usted puede saltar fuera de estos, y de un uso común es usar un goto en lugar de un multi-nivel de descanso.

    Mi humilde opinión, esto hace que sea muy diferente de la ye olde estilo BÁSICO gotos.

  5. 18

    Estoy en la minoría (en la actualidad), pero creo que las restricciones impuestas en PHP goto construir una herramienta beneficiosa:

    http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

    De hecho, me paseo a través de un ejemplo de código de señal (profundamente anidadas condicionales) y refactorizar utilizando las prácticas (guardia de cláusulas, la agrupación de condiciones, tirando de funciones) en una versión y un goto versión basada en la otra versión, y yo realmente prefiero el goto basado en la refactorización.

  6. 10

    Son las armas del mal? Ambos pueden ser utilizados para el bien o para el mal. Yo diría que es más fácil escribir un buen código sin goto, que con.

    • Las armas no matan a la gente. La magia de los misiles hacer.
    • En Canadá, tenemos menos armas y menos la violencia de las armas. Por tanto, recomiendo no tener goto.
    • por lo tanto, no utilizar goto en Canadá.
    • obviamente el goto son virtuosos. sólo tenemos licencia de personas que han sido a través de un goto curso de seguridad
    • a riesgo de mi ser prohibido a partir de ENTONCES, este comentario es como decir que la República de Congo tiene menos muertes causadas por los automóviles debido a que tienen menos automóviles. Automóviles, así como las instrucciones goto, han demostrado su utilidad en determinadas situaciones. Así que tal vez podemos exigir un «Goto Licencia»?
  7. 7

    Cualquier característica del lenguaje que puede hacer que el código sea más legible en una situación dada es Una Buena Cosa. GOTO es una de esas característica del lenguaje, incluso si esas situaciones son pocos y distantes entre sí. Si nos prohibió cualquier sintaxis que hizo posible que los pobres a los programadores escribir mal, tanto el código de nuestro trabajo sería mucho más difícil.

    • Los malos programadores pueden escribir malos programas no importa qué. Si nos prohibió cualquier sintaxis que permite a los malos programadores a escribir mal de los programas, no sería nada más que escribir nada.
  8. 5

    Como ingeniero de software, la mayoría trabaja en «mainframes» y «grandes servidores de la empresa»…
    Y nuestro lenguaje diario (me refiero a la una en el 95% de nuestra base de código) es Cobol, que se utiliza ampliamente GOTOs.

    Este uso no significa que el código es malo. Sólo significa que esta herramienta (GOTO) fue la de la derecha en el momento en que los programas fueron escritos.

    Para responder a Kaitsuli la pregunta, creo que puede ser útil herramienta a la hora de escribir scripts de PHP.
    Por otro lado, una gran cantidad de secuencias de comandos se lograron sin que por casi una década por ahora. Además, va en contra de PHP evolución con más características orientadas a objetos.

    Mi humilde opinión, es ni bueno ni malo para el código que se pueden producir buenos programas va a ser buena y «el terror de los programas» va a ser peor… La única pregunta es : «¿por Qué la adición de GOTOs 10 años después de demostrar que no era necesario ?».

    • que es adorable
  9. 4

    GOTO generalmente es malo porque permite construir no estructurada código. Con la costumbre de bucles puede construir bien estructurado código fácil de seguir, porque está estructurado.

    Cuando no dispone de un código estructurado saltando de aquí para allí, usted acaba de encontrar el mal que viene de la instrucción GOTO. Casi siempre es mejor evitarlo. Tal vez una vez cada 100.000 líneas hay un lugar donde una sentencia GOTO simplifica MUCHO el código por lo tanto no es malo, pero si usted no está seguro, entonces usted debe evitar el GOTO.

    Espero que esto ayude.

    EDIT: Bueno, sólo añadir mi propia opinión aquí, hay otras instrucciones que permiten crear no estructurada código y que no se consideran mal cuando pienso que deberían ser.

    Por ejemplo, volver en medio de una función es un GOTO al final de ella, así que evite y el uso de sólo una vuelta en cada función sólo en su final.

    Otros idiomas como el Vb.Net (tal vez demasiado) permiten hacer Salida, Salida, Mientras que, saltos y cosas como estas, que también unstructure el código y creo que se debe evitar.

    • Tengo miedo a usar goto, porque cualquiera que lea mi código podría perder la fe en mí
    • No he utilizado un goto (excepto en asamblea) durante casi 20 años. Ni siquiera cuando estaba escribiendo (DEC) Fortran.
    • Mi coche me permite conducir a los 90 por la calle. Que no lo hace mal. Si me hizo conducir a 90, entonces sería. La conducción en los 90 por la calle estaría mal, no contar con la capacidad para hacerlo.
    • Si su coche le permite conducir en la de los 90, cuando no es necesario ir a los 90 nunca su coche entonces es malo’ ish como se dan algunas capacidades que sólo pueden hacer daño.
    • Si el más alto límite de velocidad en mi zona es de 70, y todo el mundo está de conducción 70 y tengo que acelerar para evitar un accidente, espero sinceramente que mi coche no superior a cabo en el 70. Así, es todavía un tema de cómo se utiliza. Las armas, los coches rápidos y GOTOs…
    • Creo que la respuesta especifica claramente que no es una regla fija. Hasta que sé que nunca se necesita para acelerar más de la parte superior de la velocidad para evitar un accidente, tal vez algún día me tendrá que hacerlo una vez, pero seguro que es algo que no necesita, cada semana o cada mes

  10. 2

    a veces (me refiero en el 0.01% de los casos) es útil, como cuando tienes un largo, largo script y que desee probar algunos de los bloques. pero nunca en su guión final

  11. 1

    Yo solía IR cuando escribo un guión para trabajar bajo el modo cli. Salvar mi vida.

    • Yo uso goto en este micro framework que escribí. CLIP Marco para la cli. Es correcto que ir a no se puede utilizar a través de archivos, pero puede usar en 1 archivo y utilizar este como la clase o la función de control de flujo de la programación. Espero que esto pueda ayudar a la gente a pensar en alternativas. PHP es más que una web de programación.
    • Yo nunca he usado un GOTO o incluso continuar, a menos que en un Windows de mierda archivo Bat para llamar a las funciones. Explique por qué usted lo necesita, por favor.
    • A veces necesito escribir demonio de software para hacer algún trabajo en segundo plano. Se debe controlar la entrada de muchas fuentes y realizar las tareas que se me asigne. Para el proceso de demonio, mucha gente va a escribir con while(true) por lo que puede hacer para siempre hasta que la matan, pero esto es sólo sucio manera de hacerlo.
    • Alguien puede pensar GOTO va a romper flujo de inicio de sesión debido a que este comando sólo puede omitir la secuencia en el código, pero creo que este problema causa por el desarrollador no deja de lenguaje. Incluso si usted tiene una mejor idioma, usted puede hacer que choque con la simple while(). Si no hace uso de GOTO que no significa que se debe eliminar de la lengua.
  12. -12

    GOTO debe ser eliminado de la lengua. Si alguien tiene una necesidad de «incondicionalmente transferencia de control», luego deben volver a la escuela a estudiar Programación Estructurada 101

    • excepto por el hecho de que PHP goto está LEJOS de unconfitional
    • Esta respuesta es insultar y no proporciona ningún fundamento detrás de la afirmación de que el uso de GOTO, descalifica a un programador de credenciales.

Dejar respuesta

Please enter your comment!
Please enter your name here