SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
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);

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Python exception handling
Python   exception handlingPython   exception handling
Python exception handling
 
Introduction to OOP(in java) BY Govind Singh
Introduction to OOP(in java)  BY Govind SinghIntroduction to OOP(in java)  BY Govind Singh
Introduction to OOP(in java) BY Govind Singh
 
Java program structure
Java program structureJava program structure
Java program structure
 
Structures in c++
Structures in c++Structures in c++
Structures in c++
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
 
Ch2 Liang
Ch2 LiangCh2 Liang
Ch2 Liang
 
Polymorphism in c++
Polymorphism in c++Polymorphism in c++
Polymorphism in c++
 
Operators in java
Operators in javaOperators in java
Operators in java
 
PYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYA
PYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYAPYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYA
PYTHON-Chapter 3-Classes and Object-oriented Programming: MAULIK BORSANIYA
 
Methods in Java
Methods in JavaMethods in Java
Methods in Java
 
classes and objects in C++
classes and objects in C++classes and objects in C++
classes and objects in C++
 
Inheritance in OOPS
Inheritance in OOPSInheritance in OOPS
Inheritance in OOPS
 
27 applet programming
27  applet programming27  applet programming
27 applet programming
 
Classes and objects
Classes and objectsClasses and objects
Classes and objects
 
Java features
Java  features Java  features
Java features
 
Polymorphism
PolymorphismPolymorphism
Polymorphism
 
Java Programming Paradigms Chapter 1
Java Programming Paradigms Chapter 1 Java Programming Paradigms Chapter 1
Java Programming Paradigms Chapter 1
 
Inheritance in java
Inheritance in javaInheritance in java
Inheritance in java
 
Java Presentation
Java PresentationJava Presentation
Java Presentation
 
Java 8 Default Methods
Java 8 Default MethodsJava 8 Default Methods
Java 8 Default Methods
 

Ähnlich wie EstándaresCodificaciónJava (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
 
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#
 
Introduccion java
Introduccion javaIntroduccion java
Introduccion java
 

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

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

Kürzlich hochgeladen

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 

Kürzlich hochgeladen (20)

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 

EstándaresCodificaciónJava

  • 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);