Drupal y la programación defensiva (spanish version)
Evitemos bugs!!
ejemplos claros de como evitar posibles bugs
ejemplos de mitigación
Problemas clásicos(Variable no defenida, indice no encontrado, comparación cadenas, Argumento faltante)
Además un listado de anexos
3. Eduardo Telaya
Trabajo con Drupal por 5+ años.
Inice con Java(jsf, sprint, hibernate, etc)
C#, C++
Profesor en la Universidad Autónoma
del Perú.
Contribuidor de Drupal(Mentor de
drupal Sprints y expostor)
Hackatonero(más de 30 hackathons a
nivel nacional y mundial) usando
Drupal y otras tecnologías.
Peruano de nacimiento
6. Programación defensiva
La programación defensiva, simplemente, es la
programación con la intención de anticipar los puntos
de falla probable. El objetivo es eludir esos probables
problemas antes de que ocurran. Usted ve el
problema, ¿verdad? Hay algo intrínsecamente difícil
con el consejo "esperar lo inesperado" y se hace
muchas veces peor cuando uno lo altera para "esperar
lo inesperado y tratar de prevenirlo".
7.
8. El clásico error! Variable no asignada
Notice: Undefined variable…
Esto pasa ya que la variable no ha sido definido y es usado
en el código
9. La variable no fue asignada!(Incorrecto)
function _get_current_event() {
if ($type === ‘events`) {
// Your logic goes here.
}
}
Notice: Undefined variable in example_node_view()
10. La variable nunca fue asignada(correcto)
function _get_current_event() {
$type = ‘events’;
if ($type === ‘events`) {
// Your logic goes here.
}
}
Notice: Undefined variable in example_node_view()
11. El clásico error! Indice no definido
Notice: Undefined index: und in example_node_view()
Esto pasa ya que el Indice a acceder no existe!. Pasa
normalmente cuando accedemos a un campo con X atributo
pero este X atributo nunca fue agregado! Y se asume que
siempre estara con este valor! Pero NO!
12. No asumas que el campo siempre estara!
$url =
$node->field_link[LANGUAGE_NONE][0]['url'];
Notice: Undefined index: und in example_node_view()
13. En vez de eso valida si estara!
if (!empty( $node->field_link[LANGUAGE_NONE][0]['url'])) {
$url = $node->field_link[LANGUAGE_NONE][0]['url'];
}
http://www.google.com
17. Faltan argumentos en el parámetro
Warning: Missing argument 2 for _example_foo(), called in
Esto pasa ya que el método/función necesita un parámetro a
ser completado! Una manera de evitar esto es asignarle un
valor por defecto al párametro.
19. Argumentos en parámetro (correcto)
_example_foo('key_1');
function _example_foo($key, $value = 100) {
if ($value <= 100) {
// DO some logic.
}
}
Warning: Missing argument 2 for _example_foo()
21. AnexosConcepto de programación defensiva
https://es.wikipedia.org/wiki/Programaci%C3%B3n_defensiva
Errores comunes en php
http://kumar.swatantra.info/common-php-error-messages/
Más tips de programación defensiva
https://www.sitepoint.com/more-tips-for-defensive-programmin
g-in-php/