SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Drupal y la
Programación
defensiva
(Evitemos bugs!)
Acerca de
edutrul
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
Empecemos!
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".
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
La variable no fue asignada!(Incorrecto)
function _get_current_event() {
if ($type === ‘events`) {
// Your logic goes here.
}
}
Notice: Undefined variable in example_node_view()
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()
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!
No asumas que el campo siempre estara!
$url =
$node->field_link[LANGUAGE_NONE][0]['url'];
Notice: Undefined index: und in example_node_view()
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
Comparación de cadenas!
NO USES ==
Sino usa ===
para comparar cadenas
Comparación de cadenas (incorrecto)
// returns TRUE
$type = 0;
print ($type == 'events') ? 'true' : 'false';
Incorrecto!!!
Comparación de cadenas! (correcto)
// returns FALSE
$type = 0;
print ($type === 'events') ? 'true' : 'false';
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.
Argumentos en parámetro(incorrecto)
_example_foo('key_1');
function _example_foo($key, $value) {
if ($value <= 100) {
// DO some logic.
}
}
Warning: Missing argument 2 for _example_foo()
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()
¿Preguntas o
comentarios?
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/
GRACIAS!!

Más contenido relacionado

Destacado

Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014
Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014
Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014Declan Waugh
 
La hosteleria 22 Marta Pedra Wines (2)
La hosteleria 22 Marta Pedra Wines (2)La hosteleria 22 Marta Pedra Wines (2)
La hosteleria 22 Marta Pedra Wines (2)Ocio Vital
 
Presentacio nova cultura de la salut Toni Barbarà
Presentacio nova cultura de la salut Toni BarbaràPresentacio nova cultura de la salut Toni Barbarà
Presentacio nova cultura de la salut Toni BarbaràDempeus Salut Pública
 
Relatório Caminhos para a produtividade - Indústria 4.0
Relatório Caminhos para a produtividade - Indústria 4.0Relatório Caminhos para a produtividade - Indústria 4.0
Relatório Caminhos para a produtividade - Indústria 4.0Fundação Dom Cabral - FDC
 
International Public Relations - Overview
International Public Relations - OverviewInternational Public Relations - Overview
International Public Relations - OverviewChip Lowe
 
Challenges in Extracting and Managing References
Challenges in Extracting and Managing ReferencesChallenges in Extracting and Managing References
Challenges in Extracting and Managing ReferencesGESIS
 
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズhinge dearsip
 
Treatment of tb with sirturo
Treatment of tb with sirturoTreatment of tb with sirturo
Treatment of tb with sirturoKishore Chinna
 
Toma de muestra para analisis microbiologico de la leche y productos lacteos.
Toma de muestra para analisis microbiologico de la leche y productos lacteos.Toma de muestra para analisis microbiologico de la leche y productos lacteos.
Toma de muestra para analisis microbiologico de la leche y productos lacteos.UO
 
Document Writing in CI Environment
Document Writing in CI EnvironmentDocument Writing in CI Environment
Document Writing in CI EnvironmentRecruit Technologies
 
Davignon én Simonet wilden baas van NAVO worden
Davignon én Simonet wilden baas van NAVO wordenDavignon én Simonet wilden baas van NAVO worden
Davignon én Simonet wilden baas van NAVO wordenThierry Debels
 

Destacado (13)

Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014
Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014
Nutritional Therapists of Ireland, Health Impacts of Water Fluoridation May 2014
 
La hosteleria 22 Marta Pedra Wines (2)
La hosteleria 22 Marta Pedra Wines (2)La hosteleria 22 Marta Pedra Wines (2)
La hosteleria 22 Marta Pedra Wines (2)
 
Presentacio nova cultura de la salut Toni Barbarà
Presentacio nova cultura de la salut Toni BarbaràPresentacio nova cultura de la salut Toni Barbarà
Presentacio nova cultura de la salut Toni Barbarà
 
Relatório Caminhos para a produtividade - Indústria 4.0
Relatório Caminhos para a produtividade - Indústria 4.0Relatório Caminhos para a produtividade - Indústria 4.0
Relatório Caminhos para a produtividade - Indústria 4.0
 
The Winning Brand Formula
The Winning Brand Formula  The Winning Brand Formula
The Winning Brand Formula
 
International Public Relations - Overview
International Public Relations - OverviewInternational Public Relations - Overview
International Public Relations - Overview
 
Challenges in Extracting and Managing References
Challenges in Extracting and Managing ReferencesChallenges in Extracting and Managing References
Challenges in Extracting and Managing References
 
結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ結晶と空間充填 #ロマ数ボーイズ
結晶と空間充填 #ロマ数ボーイズ
 
Treatment of tb with sirturo
Treatment of tb with sirturoTreatment of tb with sirturo
Treatment of tb with sirturo
 
Toma de muestra para analisis microbiologico de la leche y productos lacteos.
Toma de muestra para analisis microbiologico de la leche y productos lacteos.Toma de muestra para analisis microbiologico de la leche y productos lacteos.
Toma de muestra para analisis microbiologico de la leche y productos lacteos.
 
Document Writing in CI Environment
Document Writing in CI EnvironmentDocument Writing in CI Environment
Document Writing in CI Environment
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
 
Davignon én Simonet wilden baas van NAVO worden
Davignon én Simonet wilden baas van NAVO wordenDavignon én Simonet wilden baas van NAVO worden
Davignon én Simonet wilden baas van NAVO worden
 

Similar a Drupal y la programación defensiva (spanish version)

Similar a Drupal y la programación defensiva (spanish version) (20)

Módulo de PHP
Módulo de PHPMódulo de PHP
Módulo de PHP
 
Php y mysql
Php y mysqlPhp y mysql
Php y mysql
 
Php1
Php1Php1
Php1
 
Curso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en DrupalCurso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en Drupal
 
IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
 
¿Cómo usar Perl para automatizar planes de prueba?
¿Cómo usar Perl para automatizar planes de prueba?¿Cómo usar Perl para automatizar planes de prueba?
¿Cómo usar Perl para automatizar planes de prueba?
 
Ana maria morales 11 01
Ana maria morales 11 01Ana maria morales 11 01
Ana maria morales 11 01
 
Phpgaby
PhpgabyPhpgaby
Phpgaby
 
Javascript
JavascriptJavascript
Javascript
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Php1
Php1Php1
Php1
 
Php1
Php1Php1
Php1
 
Php1
Php1Php1
Php1
 
Php1
Php1Php1
Php1
 
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
 
Phpgaby
PhpgabyPhpgaby
Phpgaby
 
Java script
Java scriptJava script
Java script
 
Ana maria morales 11 01
Ana maria morales 11 01 Ana maria morales 11 01
Ana maria morales 11 01
 
Universida tecinca luis vargas torrez de mirand
Universida tecinca luis vargas torrez de mirandUniversida tecinca luis vargas torrez de mirand
Universida tecinca luis vargas torrez de mirand
 

Último

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Último (10)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

Drupal y la programación defensiva (spanish version)

  • 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
  • 5.
  • 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
  • 14. Comparación de cadenas! NO USES == Sino usa === para comparar cadenas
  • 15. Comparación de cadenas (incorrecto) // returns TRUE $type = 0; print ($type == 'events') ? 'true' : 'false'; Incorrecto!!!
  • 16. Comparación de cadenas! (correcto) // returns FALSE $type = 0; print ($type === 'events') ? 'true' : 'false';
  • 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.
  • 18. Argumentos en parámetro(incorrecto) _example_foo('key_1'); function _example_foo($key, $value) { if ($value <= 100) { // DO some logic. } } Warning: Missing argument 2 for _example_foo()
  • 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/