SlideShare a Scribd company logo
1 of 22
Download to read offline
Módulo 1
Programación Java

                Clase 1

     • Repaso Java
     • Estándares de codificación Java
     • Buenas prácticas



      Alejandro González Orellana
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Estándares de codificación Java

                      Normas básicas
• Evitar archivos de más de 2000 líneas
• Estructura de un archivo:
    Comentario inicial
    Declaración de package
    Declaración de imports
    Doc-comment de la clase o interfaz
    Implementación
• Simple utilizar packages
• Utilizar imports explícitos
Estándares dede codificación Java
   Estándares codificación Java
/*
 * CustomerData.java
 *
 * Last Modification            Comentario inicial, puede incluir datos
 * Author:   Agonzalez         de la última modificación, empresa, etc.
 * Date: 08-jun-2005
 *
 * JaNoX Software Inc.
 */

package org.janox.customers.data;            Siempre utilizar packages

import java.util.Map;           Evitar imports del tipo java.util.*
import java.util.HashMap

/**
 * Represents the basic data of a customer
 *                            Doc-comment, aparecerá
 * @author Agonzalez          en el Javadoc de la clase
 *
 */
public class CustomerData {
Estándares de codificación Java

                       Indentación
• Evitar líneas de más de 80 caracteres de largo, son
  incompatibles con algunas herramientas. Si una línea es
  muy larga dividirla
• Se utilizan cuatro espacios como unidad de indentación
Estándares de codificación Java

              Nomenclatura de nombres
• Nombres de paquete: Completamente en minúsculas, el
  nombre debe seguir el estandar. Ej:
  com.janox.customers, com.janox.customers.data
• Nombres de clase e interfaces: La primera letra de cada
  palabra debe ser mayúscula. Ej: Item, CustomerData
• Nombres de métodos y variables: La primera palabra en
  minúsculas, y el resto comenzando en mayúsculas. Ej:
  addItem(), itemNumber, setName(), getName()
• Nombres de constantes: Deben estar completamente en
  mayúsuculas, las palabras se separan con _ (underscore).
  Ej: MAX_ITEM_NUMBER, DEFAULT_PREFIX
Estándares dede codificación Java
     Estándares codificación Java

                Declaración de variables
• Hacer una declaración por línea, permite poner
  comentarios
• Dar un valor inicial a la variable
• Siempre hacer declaraciones al inicio de un bloque
• Utilizar nombres significativos
Estándares de codificación Java

                         Sentencias
• Separar con un espacio la sentencia del paréntesis
  izquierdo
• Utilizar SIEMPRE llaves ({ y })
• Las sentencias vacías se escriben en una sola línea
• Si se desea ignorar una excepción indicarlo explícitamente
Estándares de codificación Java
                                               Utilizar llaves, aunque
for (int i = 0; i < MAX_VALUE; i++) {
                                                     se trate de
   doSomething();                           sentencias de una sola línea.
}

                             Si la sentencia es vacía usar una
while (checkCondition());                sola línea


try {
                                 El nombre de la excepción indica
   // do something...             que no es un error la sentencia
                                               vacía
} catch (Exception ignored) {}

if (condition) {
   // do something...
} else if (condition 2) {        Los else están en la misma línea
   // do something...                 que la llave de cierre
} else {
   // do something...
}
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Buenas prácticas

                  El nombre es importante
• Error clásico: Utilizar nombres que no indican nada sobre
  la variable o método
• Solución: Utilizar nombres descriptivos
   // WRONG!!!
   private String ln;

   private int calculate(int amount) {
   ...
   }

   // RIGHT
   private String lastName;

   private int calculateTax(int amount) {
   ...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: NullPointerException comparando
  objetos con literales
• Solución: Usar el literal primero

   // UNSAFE!!!
   if (myString.equals(“”)) {
      // do something...
   }

   // SAFE
   if (“”.equals(myString)) {
      // do something...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: NullPointerException comparando
  objetos
• Solución: Utilizar comparaciones nullsafe

   if (a != null && a.equals(b)) {
      // do something...
   }

   // Also true if both are null
   if ( a != null ? a.equals(b) : b == null ) {
      // do something...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: Se envían parámetros nulos a los métodos
• Solución: Realizar métodos nullsafe o simplemente lanzar
  excepciones
   // Nullsafe
   public boolean myMethod(String p_str) {
      boolean result = false;
      if (p_str != null) {
          // do something...
      }
      return result;
   }

   // With exceptions
   public boolean myMethod(String p_str) {
      if (p_str == null) {
          throw new NullPointerException(“p_str can not be null!”);
      }
      // ...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: Se envían colecciones o arreglos nulos a
  métodos
• Solución: Utilizar las facilidades de Java
   // Empty collections

   Collections.EMPTY_LIST
   Collections.EMPTY_MAP
   Collections.EMPTY_SET

   // Zero size arrays
   int[] myArray = new int[0];
   final String[] EMPTY_STRING_ARRAY = new String[0];
Buenas prácticas

                                 Ciclos
• Error clásico: Se evalua una condición en cada iteración
  de un ciclo
• Solución: Evaluar antes del ciclo
   // WRONG!!!
   for (int i = 0; i < myString.length(); i++) {
      // do something...
   }

   // RIGHT
   int length = myString.length();

   for (int i = 0; i < length; i++) {
      // do something...
   }
Buenas prácticas

                                 Ciclos
• Error clásico: Se concatenan String en un ciclo
• Solución: Usar StringBuffer
   // WRONG!!!
   String str = “”;

   for (int i = 0; i < MSG_NUMBER; i++) {
       str = str + messages[i];
   }

   // RIGHT
   StringBuffer sb = new StringBuffer();

   for (int i = 0; i < MSG_NUMBER; i++) {
       sb.append(messages[i]);
   }

   String str = sb.toString();
Buenas prácticas

                            Colecciones
• Error clásico: Amarrar una colección a una
  implementación específica
• Solución: Usar las interfaces de la API collections
   // WRONG!!!
   ArrayList list = new ArrayList();

   // RIGHT
   List list = new ArrayList();

   // Sometimes better...
   Collection itemCollection = new LinkedList();
Buenas prácticas

                            Colecciones
• Error clásico: Usar Vector o HashTable cuando no se
  necesita sincronización
• Solución: Usar las clases de la API collections
   // Lists
   List myList1 = new ArrayList();
   List myList2 = new LinkedList();

   // Maps
   Map myMap1 = new HashMap();
   Map myMap2 = new TreeMap();

   // With synchronization
   List synchronyzedList = Collections.synchronizedList(myList1);

   // Unmodifiable
   Map unmodifiableMap = Collections.unmodifiableMap(myMap1);
Buenas prácticas

                               “Magia”
• Error clásico: Utilizar números o strings “mágicos”
• Solución: Usar constantes con nombre
   // WRONG!!!
   for (int i = 0; i < 10; i++) {
       str = str + messages[i];
   }

   // RIGHT
   for (int i = 0; i < MSG_NUMBER; i++) {
       str = str + messages[i];
   }

   public static final DEFAULT_PREFIX = “_”;
Buenas prácticas

                               Números
• Error clásico: Utilizar números de punto flotante para
  sumas monetarias
• Solución: Usar la clase BigDecimal
   // WRONG!!!

   public static final double TAX = 0.19;
   double monto = 123.23;
   ...
   result = monto * TAX;

   // RIGHT
   public static final BigDecimal TAX = new BigDecimal(“0.19”);
   BigDecimal monto = new BigDecimal(“123.23”);
   ...
   result = monto.multiply(TAX);

More Related Content

What's hot

This keyword and final keyword
This keyword and final  keywordThis keyword and final  keyword
This keyword and final keywordkinjalbirare
 
C++: Constructor, Copy Constructor and Assignment operator
C++: Constructor, Copy Constructor and Assignment operatorC++: Constructor, Copy Constructor and Assignment operator
C++: Constructor, Copy Constructor and Assignment operatorJussi Pohjolainen
 
Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in JavaVadym Lotar
 
Basic i/o & file handling in java
Basic i/o & file handling in javaBasic i/o & file handling in java
Basic i/o & file handling in javaJayasankarPR2
 
primitive data types
 primitive data types primitive data types
primitive data typesJadavsejal
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptionsAmir Souissi
 
Java 8 Default Methods
Java 8 Default MethodsJava 8 Default Methods
Java 8 Default MethodsHaim Michael
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8Knoldus Inc.
 
Exception Handling In Java
Exception Handling In JavaException Handling In Java
Exception Handling In Javaparag
 
String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)Anwar Hasan Shuvo
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - JavaDrishti Bhalla
 
Exception handling c++
Exception handling c++Exception handling c++
Exception handling c++Jayant Dalvi
 

What's hot (20)

This keyword and final keyword
This keyword and final  keywordThis keyword and final  keyword
This keyword and final keyword
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
C++: Constructor, Copy Constructor and Assignment operator
C++: Constructor, Copy Constructor and Assignment operatorC++: Constructor, Copy Constructor and Assignment operator
C++: Constructor, Copy Constructor and Assignment operator
 
Java inheritance
Java inheritanceJava inheritance
Java inheritance
 
Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in Java
 
Basic i/o & file handling in java
Basic i/o & file handling in javaBasic i/o & file handling in java
Basic i/o & file handling in java
 
primitive data types
 primitive data types primitive data types
primitive data types
 
STORAGE CLASSES
STORAGE CLASSESSTORAGE CLASSES
STORAGE CLASSES
 
Java operators
Java operatorsJava operators
Java operators
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
Java 8 Default Methods
Java 8 Default MethodsJava 8 Default Methods
Java 8 Default Methods
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8
 
Exception Handling In Java
Exception Handling In JavaException Handling In Java
Exception Handling In Java
 
String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)String Builder & String Buffer (Java Programming)
String Builder & String Buffer (Java Programming)
 
Java interface
Java interfaceJava interface
Java interface
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Fetch API Talk
Fetch API TalkFetch API Talk
Fetch API Talk
 
Collections Api - Java
Collections Api - JavaCollections Api - Java
Collections Api - Java
 
Exception handling c++
Exception handling c++Exception handling c++
Exception handling c++
 

Similar to Programación Java (20)

Javascript continuación
Javascript   continuaciónJavascript   continuación
Javascript continuación
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Ruby
Ruby Ruby
Ruby
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Semana9b Vbr
Semana9b VbrSemana9b Vbr
Semana9b Vbr
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Programar java
Programar javaProgramar java
Programar java
 
Programar java
Programar javaProgramar java
Programar java
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Programación java 2
Programación java 2Programación java 2
Programación java 2
 
Act 2 y 3
Act 2 y 3Act 2 y 3
Act 2 y 3
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Generics C#
Generics C#Generics C#
Generics C#
 

More from Jano González

JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJano González
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVMJano González
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?Jano González
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Jano González
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Jano González
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: TransaccionesJano González
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2Jano González
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1Jano González
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: BeansJano González
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a SinatraJano González
 

More from Jano González (15)

Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Vim FTW!
Vim FTW!Vim FTW!
Vim FTW!
 
Ruby
RubyRuby
Ruby
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
A Little RSpec
A Little RSpecA Little RSpec
A Little RSpec
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: Transacciones
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: Beans
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 

Recently uploaded

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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 

Recently uploaded (10)

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
 
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
 
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
 
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
 
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)
 
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
 
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
 
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...
 
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
 
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
 

Programación Java

  • 1. Módulo 1 Programación Java Clase 1 • Repaso Java • Estándares de codificación Java • Buenas prácticas Alejandro González Orellana
  • 2. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 3. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 4. Estándares de codificación Java Normas básicas • Evitar archivos de más de 2000 líneas • Estructura de un archivo:  Comentario inicial  Declaración de package  Declaración de imports  Doc-comment de la clase o interfaz  Implementación • Simple utilizar packages • Utilizar imports explícitos
  • 5. Estándares dede codificación Java Estándares codificación Java /* * CustomerData.java * * Last Modification Comentario inicial, puede incluir datos * Author: Agonzalez de la última modificación, empresa, etc. * Date: 08-jun-2005 * * JaNoX Software Inc. */ package org.janox.customers.data; Siempre utilizar packages import java.util.Map; Evitar imports del tipo java.util.* import java.util.HashMap /** * Represents the basic data of a customer * Doc-comment, aparecerá * @author Agonzalez en el Javadoc de la clase * */ public class CustomerData {
  • 6. Estándares de codificación Java Indentación • Evitar líneas de más de 80 caracteres de largo, son incompatibles con algunas herramientas. Si una línea es muy larga dividirla • Se utilizan cuatro espacios como unidad de indentación
  • 7. Estándares de codificación Java Nomenclatura de nombres • Nombres de paquete: Completamente en minúsculas, el nombre debe seguir el estandar. Ej: com.janox.customers, com.janox.customers.data • Nombres de clase e interfaces: La primera letra de cada palabra debe ser mayúscula. Ej: Item, CustomerData • Nombres de métodos y variables: La primera palabra en minúsculas, y el resto comenzando en mayúsculas. Ej: addItem(), itemNumber, setName(), getName() • Nombres de constantes: Deben estar completamente en mayúsuculas, las palabras se separan con _ (underscore). Ej: MAX_ITEM_NUMBER, DEFAULT_PREFIX
  • 8. Estándares dede codificación Java Estándares codificación Java Declaración de variables • Hacer una declaración por línea, permite poner comentarios • Dar un valor inicial a la variable • Siempre hacer declaraciones al inicio de un bloque • Utilizar nombres significativos
  • 9. Estándares de codificación Java Sentencias • Separar con un espacio la sentencia del paréntesis izquierdo • Utilizar SIEMPRE llaves ({ y }) • Las sentencias vacías se escriben en una sola línea • Si se desea ignorar una excepción indicarlo explícitamente
  • 10. Estándares de codificación Java Utilizar llaves, aunque for (int i = 0; i < MAX_VALUE; i++) { se trate de doSomething(); sentencias de una sola línea. } Si la sentencia es vacía usar una while (checkCondition()); sola línea try { El nombre de la excepción indica // do something... que no es un error la sentencia vacía } catch (Exception ignored) {} if (condition) { // do something... } else if (condition 2) { Los else están en la misma línea // do something... que la llave de cierre } else { // do something... }
  • 11. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 12. Buenas prácticas El nombre es importante • Error clásico: Utilizar nombres que no indican nada sobre la variable o método • Solución: Utilizar nombres descriptivos // WRONG!!! private String ln; private int calculate(int amount) { ... } // RIGHT private String lastName; private int calculateTax(int amount) { ... }
  • 13. Buenas prácticas El null es tu enemigo • Error clásico: NullPointerException comparando objetos con literales • Solución: Usar el literal primero // UNSAFE!!! if (myString.equals(“”)) { // do something... } // SAFE if (“”.equals(myString)) { // do something... }
  • 14. Buenas prácticas El null es tu enemigo • Error clásico: NullPointerException comparando objetos • Solución: Utilizar comparaciones nullsafe if (a != null && a.equals(b)) { // do something... } // Also true if both are null if ( a != null ? a.equals(b) : b == null ) { // do something... }
  • 15. Buenas prácticas El null es tu enemigo • Error clásico: Se envían parámetros nulos a los métodos • Solución: Realizar métodos nullsafe o simplemente lanzar excepciones // Nullsafe public boolean myMethod(String p_str) { boolean result = false; if (p_str != null) { // do something... } return result; } // With exceptions public boolean myMethod(String p_str) { if (p_str == null) { throw new NullPointerException(“p_str can not be null!”); } // ... }
  • 16. Buenas prácticas El null es tu enemigo • Error clásico: Se envían colecciones o arreglos nulos a métodos • Solución: Utilizar las facilidades de Java // Empty collections Collections.EMPTY_LIST Collections.EMPTY_MAP Collections.EMPTY_SET // Zero size arrays int[] myArray = new int[0]; final String[] EMPTY_STRING_ARRAY = new String[0];
  • 17. Buenas prácticas Ciclos • Error clásico: Se evalua una condición en cada iteración de un ciclo • Solución: Evaluar antes del ciclo // WRONG!!! for (int i = 0; i < myString.length(); i++) { // do something... } // RIGHT int length = myString.length(); for (int i = 0; i < length; i++) { // do something... }
  • 18. Buenas prácticas Ciclos • Error clásico: Se concatenan String en un ciclo • Solución: Usar StringBuffer // WRONG!!! String str = “”; for (int i = 0; i < MSG_NUMBER; i++) { str = str + messages[i]; } // RIGHT StringBuffer sb = new StringBuffer(); for (int i = 0; i < MSG_NUMBER; i++) { sb.append(messages[i]); } String str = sb.toString();
  • 19. Buenas prácticas Colecciones • Error clásico: Amarrar una colección a una implementación específica • Solución: Usar las interfaces de la API collections // WRONG!!! ArrayList list = new ArrayList(); // RIGHT List list = new ArrayList(); // Sometimes better... Collection itemCollection = new LinkedList();
  • 20. Buenas prácticas Colecciones • Error clásico: Usar Vector o HashTable cuando no se necesita sincronización • Solución: Usar las clases de la API collections // Lists List myList1 = new ArrayList(); List myList2 = new LinkedList(); // Maps Map myMap1 = new HashMap(); Map myMap2 = new TreeMap(); // With synchronization List synchronyzedList = Collections.synchronizedList(myList1); // Unmodifiable Map unmodifiableMap = Collections.unmodifiableMap(myMap1);
  • 21. Buenas prácticas “Magia” • Error clásico: Utilizar números o strings “mágicos” • Solución: Usar constantes con nombre // WRONG!!! for (int i = 0; i < 10; i++) { str = str + messages[i]; } // RIGHT for (int i = 0; i < MSG_NUMBER; i++) { str = str + messages[i]; } public static final DEFAULT_PREFIX = “_”;
  • 22. Buenas prácticas Números • Error clásico: Utilizar números de punto flotante para sumas monetarias • Solución: Usar la clase BigDecimal // WRONG!!! public static final double TAX = 0.19; double monto = 123.23; ... result = monto * TAX; // RIGHT public static final BigDecimal TAX = new BigDecimal(“0.19”); BigDecimal monto = new BigDecimal(“123.23”); ... result = monto.multiply(TAX);