Tu primer programa

Hoy vamos a ver el tema que considero más complejo y largo porque es el que más contenido mete de una sola vez. El resto es más sencillo, y si se te ha quedado algo de aqui a medias, como más adelante se sigue usando, espero que se aclare. Del mismo modo, si más adelante tienes problemas para entender algo, vuelve aqui.

Primeros pasos:

Antes de empezar a programar, abre tu editor de preferencia (repito, para mi el Netbeans, tu el que quieras) y crea un proyecto (suele haber un botón para ello. Esto te creará una carpeta donde se guardará el código que escribas para usarlo más tarde).

En Netbeans, elije en categorías “Java” y dentro “Java Application”. Dale al botón de siguiente y ponle al proyecto el nombre que quieras, como “Proba”, “Prueba”,”CursoProgramacion01″, o lo que prefieras.

Ya estas listo para programar.

Se te ha creado una pantilla automática mostrando la clase principal y la función principal. Te explico un poco el tema:

  • Java es un lenguaje de programación orientado a objetos. Lo que creas son clases (cada clase contiene la información sobre una cosa real) en donde se ponen funciones y variables, u objetos a partir de una clase (por ejemplo, tenemos la clase “Persona”, luego en otra clase como “Familia” puedes tener dos objetos de la clase Persona llamados por ejemplo Pepe y Pepa respectivamente). Si esto es lioso ahora no te preocupes, mas adelante lo vemos mas a fondo y con ejemplos lo entiendes bien.
  • La función Main es la función principal. Cuando empieza un programa, empieza aquí.

Eso es lo que estas leyendo ahora mismo. Voy a hacer una pausa para explicar un poco las palabras que hemos visto y no entiendes para aclararlas un poco antes de seguir:

  • Variable: Es una unidad de información. Puede ser por ejemplo un numero, una palabra, una frase, etc. Para cada unidad de información se usará una variable distinta. Por ejemplo, si volvemos a usar la clase persona, podemos darle tres variables: Año de nacimiento (de tipo numero), nombre (de tipo texto), y numero de telefono (de tipo numero)
  • Sentencia: cada una de las distintas ordenes que le das al ordenador en un programa. Crear una variable es una sentencia. Darle un valor es otra sentencia. etc. Mas adelante veremos mas tipos de sentencias. todas ellas acaban en “;” para indicar que se acaban, porque pueden tener varias lineas de longitud.
  • Funciones: Al programar hay varias sentencias iguales que se utilizan una vez, y otra y otra. Para no estar cogiendo todo el rato las mismas 5 sentencias, copiarlas y pegarlas, creamos funciones. Con esto haces el código más sencillo de leer. Piensa en una función como una máquina en la que metes unos valores/variables y a cambio te da una variable distina. Luego las vemos más a fondo.

Escribimos código

Comenzamos con el programa. Escribe (ESCRIBE, no copies y pegues. Si no, no aprendes) esto dentro de la función Main

De tal forma que quede así:

Si le das al simbolo del play te ejecuta el programa y te muestra:

Nombre: Pepe. Año nacimiento: 86. Telefono: 666666666
BUILD SUCCESSFUL (total time: 0 seconds)

Analizemos lo que hemos puesto

Como hemos dicho, al iniciar el programa se llama a la función “main”. Así que empieza por la primera sentencia:


Sentencia 1

String nombre = "Pepe";

Esta sentencia crea una variable de tipo texto (String) llamada nombre, a la que se le asigna el valor “Pepe” (cuando se mete texto, tiene que ir entre comillas “” )

Prueba a cambiar el texto entre las comillas (“). Prueba a poner “Federica Bernarda Lombarda” en lugar de “Pepe”, y vuelve a ejecutar el programa (darle al boton play) y te dará este resultado:

Nombre: Federica Bernarda Lombarda. Año nacimiento: 86. Telefono: 666666666


Sentencia 2

int anyoNacimiento = 86;

Esta sentencia crea una variable de tipo numérico (int de Integer que es un numero entero. Si quieres usar un numero decimal hay que usar otros tipos como “float” o “double”) llamada anyoNacimiento (fijate que esta junto y con ny en lugar de ñ. Esto es porque los nombres de las variables son convertidas a idioma del ordenador al compilar, y si hay espacio o carácteres raros como acentos, ñ, ß o similares, el ordenador no lo entiende bien y te da fallos). Fijate que va sin comillas, al contrario que los textos.

Prueba a poner por ejemplo 1976 en lugar de 86


Sentencia 3

int telefono = 666666666;

Igual que la anterior


Sentencia 4

System.out.println(“Nombre: ” + nombre + “. Año nacimiento: ” +
anyoNacimiento + “. Telefono: ” + telefono );

Esta sentencia es especial: Tiene 2 lineas de longitud (y podría tener más). Pero la sentencia acaba cuando se llega al punto y coma.

La parte de System.out es que llama a un objeto llamado out dentro de la colección de clases y objetos “System”. Esta clase out se encarga de mostrar cosas. Este objeto tiene varias funciones. Entre ellas print (imprime en el texto de abajo todo el texto que pongas entre paréntesis), o la que usamos aqui: Println. La diferencia es que cada vez que uses println vas a crear una linea de texto con su salto de linea al final, pero si usas print “a secas” se va a poner el texto nuevo seguido del anterior en vez de en una nueva linea.

Entre parentesis esta lo que se pasa a la función: Un texto (String). Los textos tienen de bueno que se pueden añadir unos a otros. Por eso se “suman”. Al poner <"Nombre" + nombre> le decimos al programa que escriba el texto Nombre y le añada el contenido de la variable “nombre”, que ahora mismo es “Pepe”

Mejoramos el programa: Añadimos funciones

Pongamos que queremos saber la edad que tiene la persona en un determinado año.

Para saberlo, vamos a crear una función. Recuerda: Piensa en una función como una máquina en la que metes unos valores/variables y a cambio te da una variable distina

Cuando se hace una función, hay que definir dos cosas:

  • Que variables recibe
  • Que variable da como resultado.

Luego en su interior se ponen las sentencias que se repiten a menudo o que queremos apartar de una función más grande para hacerla más fácil de leer.

Vamos a escribir esto:

 

Te comento la primera linea:

  • Al principio se tiene que poner si quieres que la función sea publica o privada (“public” o “private”). Esto significa si cuando se crea un objeto de esta clase se puede ejecutar este trozo de código o no. Algunas funciones es necesario dejarlas privadas si el código va a ser usado luego por mas personas o para asegurarte de que no cometes fallos.
  • Static se tiene que usar en esta clase. En la clase en la que está la función main todas las funciones que use esa función tienen que ser static, o no las podrás usar en main.
  • “int” indica que es lo que devuelve. En este caso es un entero (int). Pero si quisiera devolver un texto pondría String.
  • HallarEdad: Es el nombre de la función. Cuando quiera ejecutar este código llamare a esta función con su nombre y le pondré lo que viene a continuación:
  • (int nacimiento, int anyoActual) : Entre parentesis indico que valores le meto a la función. Estos se llaman parámetros. Le meto dos numeros: Uno que se llama nacimiento (que será la fecha de nacimiento de la persona) y anyoActual que es el año en el que estamos ahora. Recordemos que no se puede usar la ñ ni poner espacios en los nombres, por lo que ponemos ny y juntamos las palabras. Para leer facilmente la segunda ponemos la primera letra en mayusculas.

Luego en el contenido de la función (entre los corchetes) te lo explico rápido:

  • Creamos una variable de tipo numero, llamada edad, y la ponemos de valor 0.
  • Esto es nuevo: Le asignamos el resultado de restar a anyoActual el valor de nacimiento. Esto no modifica a anyoActual, ni a nacimiento. Solo a Edad, que recibe el valor calculado al otro lado. Puedes añadir al final de la linea un “*2” (sin comillas) para multiplicar el resultado por 2. Esto no modifica nada a las otras dos variables, solo a Edad.
  • Con la palabra “return” decimos que tiene que devolver la función. En este caso decimos que tiene que devolver el valor de Edad (recuerda, devuelve valor, no la variable)

Esto esta muy bien, pero… No esta optimizado. Es otra cosa importante. Simplificarlo hace que el programa vaya más rápido y ocupe menos memoria. Para programas tan pequeños no suele ser necesario pero en programas mas grandes la diferencia se nota. Al final del artículo te comento como optimizarlo.

Vamos a añadir la función. Escribe esto en la función main:

Lo que estamos haciendo al final es que escriba en la linea el valor que devuelve la función. A la función la pasamos el valor que contiene la variable año de nacimiento (1986) y le pasamos el año actual (2015). Recuerda, estamos pasando el valor de la variable, no la variable. Esto no modifica a la variable.

Al final, la función devuelve un numero (29) y la pone en el texto de la frase. del mismo modo que se comentó antes.

Prueba a ejecutar y verás como funciona. Ahora la frase te calcula también la edad.

Otra forma de usar la función sería crear una nueva variable y asignarle el resultado de la función. Por ejemplo

String Edad = hallarEdad(anyoNacimiento, 2020);

Optimizando la función

 

En la linea 1 se asigna un valor y en la 2 se asigna otro valor. ¿Por que no mejor hacer solo una asignación?

int Edad = anyoActual - nacimiento;

En la ultima linea se devuelve el valor de Edad, y en la anterior se le da un valor a Edad. ¿Y si directamente devuelve el valor que se asignaría a Edad?

 

Así queda simplificado en una sola linea. Evitamos al ordenador que reserve memoria para una variable, y le ahorramos 3 calculos (asignación, resta, asignación)

Aquí estamos haciendolo una sola vez. Pongamos que en vez de tardar 0.1 segundos en hacerse todo con esto ahora tardaría 0.07. Entonces si estuviesemos trabajando con un programa que tuviese que hacer esto miles o millones de veces, en vez de tardar por ejemplo 10 minutos podría acabar en 7. Pillas la idea, ¿Verdad?

Conclusión:

Ahora ya sabes algunos datos comunes, como funcionan los programas, funciones, etc.

Realmente te separa ya muy poco para poder hacer otros programas sencillos: Saber el resto de tipos de datos que hay, otras clases de la API de Java que te puedan facilitar cosas como las clases de matemáticas, etc. Muchas de estas cosas las puedes encontrar en otras páginas de internet si tienes ganas y aun no he publicado la siguiente entrada.

Prueba a hacer más funciones: Haz una función que devuelva la edad que tendrá la persona en un numero de años (puede recibir en un parámetro el resultado de la anterior función automáticamente si llamas a la función de calcular la edad al llamar esto, en otro parámetro se puede meter en cuantos años y podría quedar algo así): “edadEnAnyos(hallarEdad(anyoNacimiento, 2015), 25) ” para conseguir la edad que tendrá en 15 años una persona que en el 2015 naciese en el año de nacimiento indicado.

Tomate esta entrada con tiempo. En la siguiente veremos las clases, herencia, polimorfismo, y el resto de tipos de datos.

Introducción a la programación

Palabras previas:

En este curso aprenderás lo básico de programación. Esta pensado para que de 0 comprendas los fundamentos y puedas realizar tus propios programas.

Este curso va a estar centrado sobre todo en Java. ¿Porque este y no otro?

A grandes rasgos:

  • C y C++ requieren de librerías externas para todo lo que no sea en consola de comandos y que se tenga en cuenta la memoria
  • C# funciona solo en windows. Si lo usas olvidate de mac o linux. C# es en un 99,9% java pero en .Net (tecnología de Microsoft). Si no tienes problema con eso adelante, pero a mi me gusta más usar tecnologías de empresas que no han sido denunciadas por monopolio.
  • Visual Basic tiene el mismo problema de .Net que C#
  • Xcode/objetive C: Solo sirve si quieres hacer algo para iOS (iPhone, iPad). O para Mac si no te sirven ni C, C++ o Java.
  • Pyton/ Ruby/ Lua/ Ada/ Perl/ etc. No son estandar generales de la industria. Estan bien para hacer ciertas aplicaciones, saber usarlos no está de más, son fáciles de aprender y tienen ventajas de Java en ellas. Pero normalmente en las empresas suelen pedir Java antes que estas.

 

  • Java: En java “puro” tu programa correrá igual en Linux, Windows o Mac. Aparte es el lenguaje para programar en Android. Si necesitas una librería (normalmente) no necesitas buscarla y descargarla de internet porque esta incluida en el pack.

Y dentro de java puedes usar el editor que quieras (en programación los llamamos IDE): Bloc de notas, Eclipse, o lo que sea. Yo uso Netbeans. Es el “Oficial” y su aspecto me parece más estable que Eclipse, que es el otro gran entorno de desarrollo. Idealmente deberías usar ambos al menos una vez y ver como hacer de todo en los dos. Pero luego usarás más el que más te guste.

Puedes bajarte Java y Netbeans aqui:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html

Si quieres otro buscalo en Google.

Dar ordenes a máquinas

Existen definiciones más formales sobre el tema, pero simplificando para todos los públicos:
-El objetivo de hacer un programa, es dar una serie de ordenes a la máquina/ordenador que se esté usando para que haga algo.

 

Ya está. Eso es todo. Si te fijas en el código fuente de un programa verás que todo es Instrucción tras instrucción:

  • Haz esto
  • Comprueba lo otro

Esa es la mayor simplificación posible. El ordenador hace estas ordenes tan rápido como le es posible, y gracias a eso funciona la informática.

Dejame ponerte un ejemplo: En un videojuego tu crees que estas viendo como un personaje hace algo, pero realmente la máquina lo que hace es comprobar que teclas estás pulsando, coloca al jugador en posición, actualiza el resto del entorno, y dibuja todo lo que ve la cámara (para los expertos: Si, lo se, estoy simplificando mucho la cosa pero de nuevo, a grandes rasgos,esto es lo que hay que hacer) y hace esto entre 30 y 60 veces por segundo.

 

Y con eso esta la introducción lista. En la siguiente entrada veremos como hacerte tu primer programa, como va el tema, las famosas variables y funciones, y todo eso.

hasta entonces