Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Como podría Refactorizar para que sea mas legible

Estas en el tema de Como podría Refactorizar para que sea mas legible en el foro de Java en Foros del Web. Como podría refactorizar para que sea mas legible @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Java: Ver original package fecha ;   public class Fecha {       ...
  #1 (permalink)  
Antiguo 13/05/2017, 08:41
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 11 meses
Puntos: 4
Como podría Refactorizar para que sea mas legible

Como podría refactorizar para que sea mas legible

Código Java:
Ver original
  1. package fecha;
  2.  
  3. public class Fecha {
  4.  
  5.     private int dia;
  6.     private int mes;
  7.     private int anio;
  8.  
  9.     public Fecha(int dia, int mes, int anio) {
  10.  
  11.         this.dia = dia;
  12.         this.mes = mes;
  13.         this.anio = anio;
  14.  
  15.     }
  16.  
  17.     public boolean valida() {
  18.  
  19.         if (dia < 1 || dia > 31)
  20.  
  21.             return false;
  22.  
  23.         if (mes < 1 || mes > 12)
  24.  
  25.             return false;
  26.  
  27.         // determinamos la cantidad de días del mes:
  28.  
  29.         int diasMes = 0;
  30.  
  31.         switch (mes) {
  32.  
  33.         case 1:
  34.  
  35.         case 3:
  36.  
  37.         case 5:
  38.  
  39.         case 7:
  40.  
  41.         case 8:
  42.  
  43.         case 10:
  44.  
  45.         case 12:
  46.             diasMes = 31;
  47.             break;
  48.  
  49.         case 4:
  50.  
  51.         case 6:
  52.  
  53.         case 9:
  54.  
  55.         case 11:
  56.             diasMes = 30;
  57.             break;
  58.  
  59.         case 2: // verificación de año bisiesto
  60.  
  61.             if ((anio % 400 == 0) ||
  62.  
  63.                     ((anio % 4 == 0) && (anio % 100 != 0)))
  64.  
  65.                 diasMes = 29;
  66.  
  67.             else
  68.                 diasMes = 28;
  69.  
  70.             break;
  71.  
  72.         }
  73.  
  74.         if (dia > diasMes)
  75.  
  76.             return false;
  77.  
  78.         else
  79.             return true;
  80.  
  81.     }
  82.  
  83.    
  84.  
  85. }
  #2 (permalink)  
Antiguo 13/05/2017, 12:14
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Como podría Refactorizar para que sea mas legible

En vez de tener un gran switch con las distintas posibilidades, define un arreglo de enteros con esas posibilidades

int[] diasPorMes = { 31, 28 ,31, 30 ... };

luego usas el arreglo para obtener los dias de acuerdo al mes

// suponiendo que los meses van de 1 a 12, no de 0 a 11.
dias = diasPorMes[ mes - 1 ];

Eso es solo si quieres hacerlo a mano tu mismo, pues existen clases que permiten crear y usar fechas que podrian hacer el chequeo por ti.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 13/05/2017, 12:49
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 11 meses
Puntos: 4
Respuesta: Como podría Refactorizar para que sea mas legible

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
En vez de tener un gran switch con las distintas posibilidades, define un arreglo de enteros con esas posibilidades

int[] diasPorMes = { 31, 28 ,31, 30 ... };

luego usas el arreglo para obtener los dias de acuerdo al mes

// suponiendo que los meses van de 1 a 12, no de 0 a 11.
dias = diasPorMes[ mes - 1 ];

Eso es solo si quieres hacerlo a mano tu mismo, pues existen clases que permiten crear y usar fechas que podrian hacer el chequeo por ti.
Pero al definirlo de esa manera al ser un año bisiesto le estoy diciendo que febrero siempre sera tendrá 28 dias no=?
  #4 (permalink)  
Antiguo 13/05/2017, 12:58
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Como podría Refactorizar para que sea mas legible

Si, pero nada impide que corrijas despues.

Puedes poner la logica de los anos bisiestos justo despues.

Código:
dias = diasPorMes[ mes - 1 ];
if( esFebrero(mes) && esBisiesto(ano) ) {
   dias++;  // o dias = 29;
}
__________________
Visita mi perfil en LinkedIn

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:14.