2010-08-02 12 views
8

Estoy escribiendo código PHP para crear archivos PDF utilizando la biblioteca FPDF. Y básicamente uso las mismas 4 líneas de código para imprimir cada línea del documento. Me preguntaba qué es más eficiente, repitiendo estas 4 líneas una y otra vez, o ¿sería mejor hacerlo en una función? Tengo curiosidad porque parece que una función tendría una sobrecarga mayor debido a que la función solo tendría 4 líneas.

El código que estoy cuestionando el siguiente aspecto:funciones vs código repetido

$pdf->checkIfPageBreakNeeded($lineheight * 2, true); 
$text = ' label'; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L', 1); 
$text = $valueFromForm; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L'); 
$pdf->Ln(); 
+0

¿No tienes una opción MACRO así en PHP? – Shaihi

+0

¿Cuántas veces repites estas 4 líneas? –

+1

@Shaihi: No.PHP es interpretado, no compilado. (No obstante, HiPHoP) – Piskvor

Respuesta

16

Esto debe responder a ella: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself y http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html

Ley de rizado, hacer una cosa, es reflejado en varios principios básicos de desarrollo de software moderno:

  • Don 'Repita usted mismo

    Si tiene más de una forma de expresar lo mismo, en algún punto las dos o tres representaciones diferentes de probablemente caigan fuera de paso entre ellas. Incluso si no lo hacen, usted está garantizando usted mismo el dolor de cabeza de mantener en paralelo cada vez que ocurra un cambio . Y el cambio ocurrirá No repetir usted mismo es importante si quiere software flexible y mantenible.

  • vez y sólo una vez

    Todos y cada declaración de comportamiento debe ocurrir una vez, y sólo una vez . Este es uno de los principales objetivos, si no es el objetivo principal, al refactorizar el código . El objetivo del diseño es eliminar declaraciones de comportamiento duplicadas, normalmente fusionándolas o reemplazando implementaciones similares múltiples con una abstracción unificadora.

  • un solo punto de la Verdad

    repetición conduce a la inconsistencia y el código que es sutilmente roto, porque ha cambiado sólo algunas repeticiones cuando se necesitaba para cambiar todos ellos. A menudo, también significa que no ha pensado correctamente a través de la organización de su código. Cualquier vez que vea código duplicado, es un signo de peligro . La complejidad es un costo; no lo pagues dos veces.

2

Una función es ciertamente preferible, especialmente si tiene que volver más tarde para hacer un cambio.

12

En lugar de preguntarse que es más eficiente en su lugar debe preguntarse que es más fácil de mantener.

Escribir una función es mucho más fácil de mantener.

11

tengo curiosidad porque se siente como una función tendría una cabeza más grande becuse la función sólo sería de 4 líneas de largo.

Aquí es de donde viene el espagueti.

defininely encapsular en una función y llamarla. La sobrecarga que temes es el peor tipo de optimización prematura.

en seco - No te repitas.

2

No te preocupes por los gastos generales; preocúpate por ti mismo, un año en el futuro, intentando depurar esto.

A la luz de lo anterior, no repita usted mismo y hacer una pequeña función.

4

Haz que funcione. La sobrecarga de llamada de función es bastante pequeña actualmente. En general, podrá ahorrar mucho más tiempo buscando mejores algoritmos de alto nivel que jugando con detalles de bajo nivel. Y hacer y mantenerlo correcto es más más fácil con tal función. Porque ¿de qué le servirá a un hombre si gana un poco de velocidad y pierde la corrección de su programa?

+0

+1 para la paráfrasis, v.apropiado :) – Piskvor

1

Además de todas las valiosas respuestas sobre el tema mucho más importante de la capacidad de mantenimiento; Me gustaría agregar algo sobre la cuestión de los gastos generales.

No entiendo por qué temer que una función de cuatro líneas tendría una mayor sobrecarga.

  1. En un lenguaje compilado, un buen compilador probablemente sería capaz de inline de todos modos, en su caso.

  2. En un lenguaje interpretado (como PHP) el intérprete tiene que analizar todos de este código repetido cada vez que se encuentra, en tiempo de ejecución. Para mí, eso sugiere que la repetición podría tener una sobrecarga aún mayor que una llamada a función.

  3. La preocupación de llamada a la función de arriba aquí es horrible optimización prematura. En asuntos como este, la única forma de saber realmente cuál es más rápido es perfilarlo.

Haz que funcione, hazlo bien, hazlo rápido. En ese orden.

0

La sobrecarga es realmente muy pequeño y suele ser la causa de una gran diferencia en su aplicación. ¿Preferiría estos pequeños gastos generales, pero tiene un programa más fácil de mantener, o desea ahorrar el mero milisegundo, pero lleva horas corregir pequeños cambios que se repiten.

Si me u otro desarrollador que hay preguntas, definitivamente queremos la primera opción. Así que continúa con la función. U no puede mantener el código de hoy, pero cuando u hacer, u odiará a sí mismo por tratar de salvar lo que meros milisegundos