Tag : Java

El ciclo for en Java, Golang y Python

Haremos una pequeña comparación en la forma en la que puedes usar el ciclo for en cada uno de estos lenguajes de programación.

Esta comparación es con propósitos educativos, si vas comenzando en mundo de la programación es bueno que conozcas los detalles básicos de algunos de los lenguajes de programación más ampliamente usados.

Comenzaremos por Java, la estructura básica de la sentencia for es la siguiente:

//Estructura de la sentencia for básica
for (inicialización; terminación; incremento) {
    sentencias
}

Desde luego el bloque de código anterior no compilaría, es sólo una descripción general y en realidad es una estructura que siguen muchos lenguajes cuya sintaxis han heredado del lenguaje de programación C. Un ejemplo real es el siguiente:

public class CicloFor {
    public static void main(String args[]){
        for (int i = 0; i < 10; i++) {
            System.out.println("valor de i: " + i);
        }
    }
}

Como seguramente has notado, es necesario que dentro de la sentencia for, existan tres sentencias más que establecen lo siguiente:

  • Inicialización – Que en el ejemplo es la variable i con un valor inicial int i =0
  • Terminación – El ciclo for se ejecuta mientras i es menor que 10
  • Incremento – Donde el valor de i cambia mientras la sentencia de terminación no se cumpla con i++

El ciclo for en Golang es similar al de Java, pero en su sentencia se omiten algunos caracteres:

package main
import "fmt"

func main() {
	for i := 0; i < 10; i++ {
		fmt.Println("valor de i: ", i)
	}
}

En Go no ha sido necesario incluir los paréntesis, ya que sus creadores han decidido omitirlos y basta con saber que las sentencias de inicio, terminación e incremento se encuentran entre la palabra for y el corchete que abre el bloque del ciclo.

Veamos ahora el ciclo for con Python.

for i in range(10):
    print("valor de i: ", i)

Python es el campeón a la hora de minimizar la cantidad de código que se requiere escribir.

En Python, se especifica la sentencia for, una variable y el rango en el cual esa variable estará cambiando y automáticamente sabrá cuando detenerse. Como puedes ver no es necesario agregar las sentencias de terminación e incremento. El compilador sabe que el valor de i, irá de 0 a 9 con la ayuda de la función range.

Además de que en Python no es necesario crear un método o función main, tampoco es necesario usar corchetes que abren y cierran. El compilador sabe que el bloque del for que se ejecutará, es el que se encuentre desplazado por dos espacios o un tabulador adicional al que tiene la sentencia for.

El resultado al ejecutar el código en todos los casos es similar al siguiente:

valor de i:  0
valor de i:  1
valor de i:  2
valor de i:  3
valor de i:  4
valor de i:  5
valor de i:  6
valor de i:  7
valor de i:  8
valor de i:  9

En Java existen otras variantes de la sentencia for, en Python algunas otras, y en Go sólo es esa.

Estos ejemplos ilustran los estilos de construcción de cada lenguaje, pero no es lo único que debes considerar a la hora de crear aplicaciones.

Java es un lenguaje interpretado al igual que Python, lleva tiempo en el mercado y está un poco más optimizado que Python, existen para este lenguaje una cantidad inmensa de bibliotecas o librerías que te facilitarán muchos otros aspectos del desarrollo de software, en Python también existen muchas herramientas y sigue creciendo.

Python, por su sencillez, permite hacer prototipos de aplicaciones, algoritmos o ejemplos de código mucho más rápido que en los otros lenguajes.

Golang es el nuevo del grupo, aunque la cantidad de caracteres que requerirás para crear el mismo algoritmo está entre Java y Python, se destaca por ser un lenguaje que al ser compilado genera archivos ejecutables, (Java y Python son interpretados). Su desempeño puede ser mucho más rápido y se está volviendo el favorito en soluciones donde sea necesario optimizar el rendimiento.

Esperamos pronto hacer algunas otras comparativas.


Librerías de Java para Reportes

Estas son algunas de las librerías para Java que puedes usar para generar reportes en diversos formatos, agregar gráficas y otros recursos útiles para mostrar datos al usuario final. Algunos proyectos disponen de una versión opensource, edición community y versiones comerciales.

JFreeChart

JFreeChart es una biblioteca de gráficos hecha 100% Java que facilita a los desarrolladores mostrar gráficos de calidad profesional en tus aplicaciones. El amplio conjunto de características de JFreeChart incluye:

  • Una API consistente y bien documentada, que admite una amplia gama de tipos de gráficos
  • Diseño flexible que es fácil de ampliar, dirigida tanto a aplicaciones de servidor como del cliente.
  • Compatibilidad con muchos tipos de salida, incluidos los componentes Swing y JavaFX, archivos de imagen (incluidos PNG y JPEG) y formatos de archivos de gráficos vectoriales (incluidos PDF, EPS y SVG)
  • JFreeChart es de código abierto o más específicamente, software libre. Se distribuye bajo los términos de la GNU Lesser General Public Licence (LGPL), que permite su uso en aplicaciones propietarias.

JasperReport

JasperReport es una de las herramientas para reportes de código abierto más populares y ampliamente utilizadas. Se usa en cientos de miles de entornos de producción y presenta versiones tanto community como comerciales.

  • Formateo y visualización de reportes interactivos
  • Repositorio central seguro
  • Informe de programación y distribución
  • Interfaz de usuario personalizable y personalizable

BIRT

BIRT consta de varios componentes. Los componentes principales incluyen un diseñador de reportes y en tiempo de ejecución de BIRT, pero BIRT también proporciona tres componentes adicionales: un motor de gráficos, un diseñador de gráficos y un visor. Con estos componentes, podrías desarrollar y publicar informes como una solución independiente.

  • Listas
  • Gráficas
  • Tablas cruzadas
  • Cartas y documentos
  • Informas compuestos

Pentaho

Pentaho es una suite empresarial completa, que abarca una amplia gama de casos de uso desde reportes hasta minería de datos. La suite de Pentaho BI abarca varios proyectos de código abierto, de los cuales Pentaho Reporting es uno de ellos. Al igual que las otras herramientas, Pentaho Reporting tiene un amplio conjunto de funciones, listas para su uso en organizaciones empresariales.

  • Permite crear reportes en PDF, Excel, HTML, texto, archivo de texto enriquecido, XML y CSV.

SpagoBI

SpagoBI es otra suite de inteligencia empresarial completa. Algunas herramientas que incluye son, por ejemplo: reportes, gráficos, cockpits, minería de datos, ETL y mucho más. La empresa que respalda este desarrollo ofrece servicios profesionales como asistencia al usuario, mantenimiento, consultoría y capacitación.

  • Reportes en formatos HTML, PDF, XLS, XML, TXT, CSV, RTF
  • Análisis multidimensional (OLAP)
  • Gráficas
  • KPIs
  • Coopits Interactivos
  • Reportes ad-hoc
  • Muchas otras características.

KNIME

KNIME es una plataforma de análisis de código abierto, con orígenes en la investigación farmacéutica. Su uso se ha expandido a industrias como bancos, editores, fabricantes de automóviles, compañías de telecomunicaciones y otros.

KNIME proporciona una gama de características, que incluyen extensiones de colaboración y un portal web. El aprendizaje automático también está integrado, incluido el soporte de Weka.

ReportServer

ReportServer es otra plataforma de inteligencia empresarial de código abierto, con una edición comercial disponible también. ReportServer permite crear reportes, análisis ad-hoc, informes de Excel y Word y análisis OLAP multidimensionales.


Curiosidades en operaciones de punto flotante

¿Qué pasa si restas?

9999999999999999.0 – 9999999999999998.0 = ?

El resultado depende un poco del lenguaje.   En la mayoría de los casos el resultado será 2.

Esta es la pregunta que se hizo Geo Carncross y hace el experimento con varios lenguajes de programación.


Seguramente lo habrás aprendido en la escuela, pero es un aspecto de la programación que suele olvidarse con frecuencia.



La razón tiene que ver más con la forma en la que se almacenan valores decimales en la memoria que con la operación misma.   En el caso de Java por ejemplo, un valor de punto flotante de doble precisión como el tipo double es un valor de 64 bits, donde:

1 bit denota el signo (positivo o negativo).
11 bits para el exponente.
52 bits para los dígitos significativos (la parte fraccionaria como un binario) .

Estas partes se combinan para producir un valor decimal double.

De este modo cuando realizas la resta, realmente estás haciendo la operación sobre valores diferentes de los que especificaste durante la edición del código.

package com.decodigo;

/**
 *
 * @author decodigo.com
 */
public class Prueba {
    
    public static void main(String args[]){
        double a = 9999999999999999.0;
        double b = 9999999999999998.0;        
        double resultado = a - b;
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        System.out.println("resultado: " + resultado);
    }
}

El resultado en consola será:

a: 1.0E16
b: 9.999999999999998E15
resultado: 2.0

Un número decimal no se representa exactamente en la memoria, aunque en apariencia tengan incluso el mismo número de dígitos mientras estás escribiendo el código.  Cuando el copilador convierte los valores de a y b a un número de coma flotante, sus valores se aproximan para ser representados internamente en formato binario y se complementan con el exponente si se excede la capacidad de los dígitos significativos.

Adicionalmente, cuantas más operaciones se realicen con un número de punto flotante, mayor será el número de errores de redondeo.


NetBeans – Accesos directos

En NetBeans existen algunos atajos que facilitan la escritura de codigo, aquí te mencionamos algunos.

Para dar formato o manipular código están las siguientes combinaciones:

Alt-Shift-F Da formato al código seleccionado o a todo el código si no hay selección.

Ctrl-Shift-Up/Down Copia lineas de código hacía arriba o hacia abajo.



Alt-Insert Genera código dependiendo de las posibilidades desplegando un menú de opciones.


Ctrl-Shift-I Agrega las sentencias de importación de clases que hagan falta.
Alt-Shift-I Arregla la importación de clases seleccionada.
Alt-Shift Left/Right/Up/Down Mueve la línea de código en la dirección de las teclas.
Ctrl-Shift-R Selecciona código de forma rectangular.

Ctrl-Shift-C Agrega dobles diagonales para comentarios de una sola línea.

Ctrl-E Borra la línea en la que está posicionada el cursor.

Prueba escribiendo de forma suscesiva los siguientes caracteres:

ifelse y a continuación la tecla Tab, NetBeans completará un bloque if con su else:

        if (true) {
            
        } else {
        }

trycatch y a continuación la tecla Tab, NetBeans completará un bloque try-catch:

        try {
            
        } catch (Exception e) {
        }

for y a continuación la tecla Tab obtienes un bloque de código para for listo para usarse:

        for (int i = 0; i < 10; i++) {
            
        }

Con el ciclo for hay más sopresas:

forst y a continuación Tab, crea el ciclo sobre un StringTokenizer:

        for (StringTokenizer stringTokenizer = new StringTokenizer(STRING); stringTokenizer.hasMoreTokens();) {
            String token = stringTokenizer.nextToken();
            
        }

forc y a continuación Tab, crea el ciclo sobre un Iterator:

        for (Iterator iterator = col.iterator(); iterator.hasNext();) {
            Object next = iterator.next();
            
        }

fore y a continuación Tab, crea el ciclo sobre un arreglo sin uso de índices:

        for (String arg : args) {
            
        }

fori y a continuación Tab, crea el ciclo sobre un arreglo con índice:

        for (int i = 0; i < arr.length; i++) {
            Object object = arr[i];
            
        }

forl y a continuación Tab, crea el ciclo sobre un objeto Array:

        for (int i = 0; i < lst.size(); i++) {
            Object get = lst.get(i);
            
        }

forv y a continuación Tab, crea el ciclo sobre un objeto Vector:

        for (int i = 0; i < vct.size(); i++) {
            Object elementAt = vct.elementAt(i);
            
        }

Para while, prueba con «whileit«, «whilen«, and «whilexp»

Si no conocías estos atajos esperamos que te sean de utilidad.


Un diagrama casi completo de las Redes Neuronales

Existe una amplia variedad de tipos de redes neuronales y a veces es necesario un mapa para navegar entre muchas arquitecturas y enfoques emergentes.  Fjodor Van Veen del instituto Asimov compiló una maravillosa variedad de topologías de redes neuronales.

Mas info:www.asimovinstitute.org



Ese detalle…

¿Que otra cosa puede ser más perfecta para regalar?

Java Básico, el ciclo for, continue y break


Pregunta Java


Pregunta Java

Tip: No se ofrece ninguna garantía en cuanto a la orden de iteración de la serie; en particular, no garantiza que la orden permanecerá constante en el tiempo. Esta clase permite el elemento nulo.


Pregunta Java