2010-11-30 21 views
8

Estoy escribiendo una secuencia de comandos para hacer fragmentos de un texto y enviarlo por SMS. Hoy he estado revisando un código para dividir la cadena en partes y vi algo que nunca antes había visto. Estoy hablando del ";" justo después del "}" en el en del fragmento.Punto y coma después de cerrar la llave en PHP

¿Por qué este colon? Sé que funciona, pero no sé si agrega algo de semántica o alguna instrucción al intérprete. ¿Alguien sabe para qué sirve esto?

while(1) 
{ 
    $length = (strlen($output)+strlen($words[$i])); 
    if($length>$new_max) 
    { 
     if(count($words) > 0) 
     { 
      $out_array[] = $output; 
      $output = ''; 

     } 
     else 
     { 
      break;  
     } 
    } 
    else 
    { 
     $output = $output." ".$words[$i]; 
     ++$i; 
    }; 
}; 

EDIT: Parece claro que los puntos y comas, así como múltiples puntos y comas en conjunto no tiene ningún efecto sobre el resultado, pero, ¿sabe usted si tiene algún efecto al intérprete? ¿está haciendo alguna tarea (internamente) cuando la analiza?

+0

Esto plantea una buena pregunta que nadie ha tocado en otra cosa que una "mejor estimación". ¿Qué sucede en el nivel del compilador cuando tienes una declaración vacía como esa? –

Respuesta

12

Creo que esos 2 puntos y comas no hacen nada aquí. Probablemente se interprete como una expresión vacía inmediatamente después del if/while.

+0

Creo que es insípido, pero quiero asegurarme :) gracias. – SubniC

+0

Evan es correcto. El punto y coma extra no tiene sentido. – DampeS8N

+0

Correcto, absolutamente nada está sucediendo donde están los dos puntos y comas. – BoltClock

4

Estos son innecesarios. No lastiman el guion, solo innecesario. El programador probablemente tenía la costumbre de agregar puntos y comas al final de cada declaración. Tal vez obtuvo este hábito de otro lenguaje de programación, tal vez su IDE mostraba errores sin punto y coma o tal vez solo era un principiante. En cualquier caso, ni duele ni ayuda. También el hecho de que el programador usa mientras (1) me dice que es extremadamente perezoso, porque generalmente un programador escribiría mientras (verdadero), la única razón para escribir mientras 1 es porque es menos tipeado para hacer. Un programador con cualquier tipo de entrenamiento formal no escribirá mientras (1) en lugar de while (verdadero). Esta es solo mi opinión, pero está basada en más de 10 años de programación en 3 idiomas.

+1

+1 Estoy de acuerdo con la mayoría de su respuesta. Tengo menos experiencia pero veo normal el tiempo (1) no es más difícil de entender que mientras (verdadero). Lo que señalaré es el "++ $ i"; por qué no "$ output = $ output" ". $ words [++ $ i];" y usas una línea menos – SubniC

+1

una razón común por la que alguien escribiría 'while (1)' es si originalmente es un desarrollador c :-P. –

+0

Además, una razón por la que no se escribe '$ words [++ $ i]' es porque es más fácil equivocarse. Por ejemplo, lo que escribe es incorrecto, debería ser: '$ words [$ i ++]'. la diferencia es que el último usa el '$ i' original como índice y tu versión usa el nuevo' $ i'. –

0

Algunas personas usan // endwhile o // endif para indicar de dónde viene. Otros ponen punto y coma después de las llaves. Ambas técnicas son inofensivas y solo se reduce al desarrollador.

Me atrevo a adivinar que este programador no confía en su propia codificación, también está codificando en un libro de texto sin estilo: las posiciones de los soportes, el espaciado incoherente y el tiempo (1) es justo. .. recomiendo no hacer eso.

+0

Hola @Mark Mayo, entiendo el uso de // endwhile o // endif porque te dice dónde termina la oración, pero el; es como no poner nada, quiero decir que no hay semántica ahí. – SubniC

+0

en ese caso es posible que tengan la mentalidad de tener que terminar las instrucciones de programación con un punto y coma, por lo que terminan todo con uno. No hace nada, de hecho podrías tener ;;;;;;; al final de una de sus declaraciones, sin ningún efecto. Los puntos y comas simplemente separan los enunciados (como lo hacen los pares de llaves), por lo que lo único que tendrás es un conjunto de instrucciones vacías, que luego el compilador optimiza en el momento de la compilación. –

+0

Los corchetes no son como en C? ellos declaran alcances – SubniC

1

¡En algunos casos necesita tener un punto y coma después de un corchete de cierre!

Ejemplo:

if(1==1): 
    if(true){ echo "it's true"; } //no semicolon here => syntax error! 
else: 
    echo "no never ever"; 
endif; 

Por supuesto que would't utilizan sintaxis alternativa para las estructuras de control si sólo hay código php.

Pero si tiene una combinación de código HTML y PHP podría usar la sintaxis alternativa para las estructuras de control (la sintaxis alternativa hace que el código sea más claro y fácil de leer), pero el problema es que en algunos casos un plugin o por ejemplo, un analizador de etiquetas de un cms podría producir una instrucción if con llaves (sin un "punto y coma de cierre") justo antes del "else", y esto daría lugar a un error de sintaxis en el archivo php resultante.

El código anterior sería el siguiente:

if(1==1): 
    if(true){ echo "it's true"; }; 
else: 
    echo "no never ever"; 
endif; 
Cuestiones relacionadas