Java básico, introducción para Android
Muchas son las posibilidades que tenemos a la hora de desarrollar nuestras aplicaciones móviles. Más concretamente es en Android donde el abanico de opciones es mayor, siendo la “vía oficial” la más utilizada por los desarrolladores, el Android SDK o Android Studio .
Ya hablamos de que es una de las imprescindibles en una publicación anterior, siendo la primera a la que deberemos recurrir si queremos empezar a programar para este entorno, puesto que nos instalará además un sistema emulado sobre el que probar nuestra aplicación.
Pero no sólo necesitaremos esta aplicación. Ahora entra en juego el factor humano de la ecuación, ya que tendremos que dar forma al código de nuestro proyecto , requiriéndonos ciertos conocimientos sobre programación (más concretamente programación orientada a objetos) y qué mejor que saber algo de Java, el lenguaje usado para crear aplicaciones nativas para Android .
Los lenguajes de programación, como los lenguajes comunes, tienen diferentes formas de comunicarle al dispositivo cómo queremos interactuar con él y qué queremos que haga. Nos permitirán guiar a la aplicación paso a paso en cómo tratar la información que se le ha dado, recoger las diferentes entradas de otros dispositivos del equipo, mostrar ciertas cosas en pantalla, entre tantos otros aspectos.
Si estáis en esta página, sabréis que existen multitud de lenguajes de programación diferentes , pudiéndose dividir en lenguajes de bajo nivel (aquellos que se comunicarán directamente con el hardware, puesto que cada uno de estos dispositivos tendrá su propio cúmulo de instrucciones) como el lenguaje máquina o el ensamblador, como en lenguajes de alto nivel (siendo éstos los escritos de manera abstracta que mediante un intérprete o compilador traducirá a lenguaje máquina e interactuarán con el hardware) entre los que encontramos Java.
Un error muy común es confundir Java con JavaScript , no teniendo nada que ver el uno con el otro. Podríamos decir que Java se parece a JavaScript como una impresora a un disco duro; sin embargo, conociendo algo de JavaScript, podremos llegar a aplicar esos conocimientos en el entorno de programación de Java, ya que alguno de sus componentes básicos y algunas interacciones funcionan de forma similar. La lógica tras estos dos lenguajes de programación puede decirse que es la misma, por lo que si sabéis algo de JavaScript, ya lleváis adelantado bastante de cara al curso de Creación de una app como Tinder en Android .
Y si no tienes dichos conocimientos, vamos a ver los componentes básicos de este lenguaje empezando por los tipos de datos que podemos encontrar:
- Int: Define un número entero, es decir un número sin decimales incluyendo el cero y los números negativos.
- Float: Se usa para definir tipos de numeros con digitos decimales. Dado que el número de decimales puede variar de un valor a otro, podremos llegar a obtener valores imprecisos, por lo que cuando necesitemos un resultado más preciso, por ejemplo por estar trabajando con monedas, usaremos BigDecimal en lugar de float.
- Boolean: Las variables del tipo booleano disponen sólo de dos posibles valores: True o False.
- Char: Se utiliza para definir caracteres independientes como la letra H o el símbolo #. Destacar que H y h en este caso no serían lo mismo, así habrá que estar pendientes de las mayúsculas y minúsculas.
- String: Define conjunto de caracteres encadenados que formarán palabras o frases, siendo tenidas en cuenta como texto.
Y leyendo hasta aquí, ya hemos visto tipos de datos de los denominados primitivos y complejos. Dentro de los primitivos (int, float, boolean y char) también podemos encontrar otros como byte, short y long, que definen un número entero de 8, 16 y 64 bits respectivamente.
Especial mención a String , al tratarse de algo más complejo que un simple tipo de datos, en realidad se trata de un objeto . Como podemos ver, al contrario que el resto de tipos de datos, String lleva la primera letra mayúscula, perteneciendo a la convención de nomenclaturas usadas en Java que dice que los objetos serán llamados con la primera letra en mayúsculas. Y es más completa que los tipos de datos primitivos, ya que puede venir con varias propiedades añadidas, mientras que los otros únicamente tienen su valor. Por ejemplo, los objetos String tienen un método de llamada length() que determinará el número de caracteres que lo componen, mientras que int carece de dicha medida.
Las variables se pueden definir como contenedores que albergarán datos , y sus valores pueden ir cambiando a medida que se ejecuta el programa. Los datos pueden ser desde números como coordenadas GPS hasta una dirección web como la URL de un vídeo.
Aquí un ejemplo de la declaración de una variable:
- Lo primero será decirle al programa qué tipo de datos vamos a guardar en esta variable.
- Tenemos que asignar un nombre a la variable para poder llamarla más adelante. Por convención, las variables no deberán contener espacios o caracteres especiales, sólo pueden componer su nombre letras, números y guiones bajos. Tampoco puede empezar por un número.
- El símbolo igual (=) es un operador, lo que significa que realizará una acción con los datos a su izquierda y derecha. En este caso, está estableciendo que “Lannister” equivale a “Siempre paga sus deudas”, es decir, asignamos el valor “Siempre paga sus deudas” a la cadena “Lannister”.
- El texto tras el símbolo igual (=) es el valor de cadena (String) con el que estamos trabajando. En Java utilizaremos las “ ” (comillas dobles) para diferenciar el valor del texto de sintaxis usado en el código.
- Por último, el carácter punto y coma (;) es usado en Java para cerrar la declaración. Este símbolo se usa para determinar que hemos terminado de “decir algo”. Cada declaración o llamada deberá terminar con dicho carácter.
Otros ejemplos de declaración de variables pueden ser:
Donde tenemos que destacar que el número del valor flotante termina en ‘f’, otra forma más de definir que este número contiene decimales (caracteres en coma flotante); así como que el valor de char está contenido entre comillas simples ‘’, en lugar de entre dobles comillas “”.
Métodos
Un método es una parte de nuestro código que puede ser llamado desde cualquier otra parte , haciendo que dichas líneas de código sean reutilizables ofreciendo diferentes resultados en cada uso, ahorrando así esfuerzos y tiempo de programación.
Veamos, con el siguiente ejemplo el uso de un método length() para un dato de tipo String:
public int length() {
int letrasenlaFrase = 0;
/* aquí irá el bloque de líneas que
calcularán el número de caracteres en la frase */
return letrasenlaFrase;
}
En la primera línea declaramos el método denominado length(). Lo primero que nos encontramos es la declaración de la visibilidad del método, y aunque existen otras tantas, son las más habituales public y private.
Las diferencias entre estos métodos es muy simple , los métodos ‘public’ estarán disponibles para ser llamados desde cualquier parte del código, mientras que los métodos ‘private’ sólo están disponibles dentro de la clase en la que se definen.
La segunda palabra en el método en definición es el tipo de dato que será devuelto . En este caso, el método devolverá un número entero o int. Si el método se ejecuta pero no devuelve ningún tipo de dato, utilizaremos el valor ‘void’ (vacío) para el tipo de dato a devolver.
Lo tercero que podemos leer es el nombre del método. Se conforma de manera similar a los nombres de las variables, componiéndose con letras, números y guiones, sin poder comenzar por un número .
Inmediatamente después del nombre vemos dos paréntesis vacíos . Son obligatorios, pero cuando están vacíos significa que no pasaran los datos o variables incluidos en el método, únicamente las operaciones. Si entre estos paréntesis incluyésemos un tipo de dato, los valores que le pasaremos al método deberán coincidir con dicho tipo.
La línea uno termina con una llave de apertura cuyo cierre se encuentra en la línea cinco.
En Java los bloques de código , como el que conforma este método, se encuentran entre estas llaves de apertura y cierre . En el caso que nos ocupa indica que todas las líneas que se encuentran dentro de estas llaves se ejecutarán cada vez que llamemos al método length().
Lo último que cabe mencionar de este método, es lo que encontramos en la cuarta línea. Lo que nos indica return es el valor o variable que será devuelto a quien ha llamado a este método o función .
Siguiendo con este ejemplo, se ha calculado mediante un valor int el número de caracteres de una determinada frase con letrasenlaFrase, que será devuelto como valor de retorno del método length().
Llamada del Método
Ahora que ya sabemos qué es un método y cómo funciona, tenemos que ver cómo llamarlo. Aquí un ejemplo de llamada al método length() :
String fraseOpenwebinar = “Aprende con Openwebinars”;
int textLength = fraseOpenwebinar.length();
Lo primero que tenemos es un valor String de veinticuatro caracteres (ya que los espacios también computan).
Llamamos al método en la siguiente línea usando un punto (.) que tomará como referencia fraseOpenwebinar para aplicar el resultado del método al que llamamos. No podemos escribir length() como llamada, ya que el método de por sí no sabría sobre qué variable trabajar.
Por lo que podemos resumir que para fraseOpenwebinar llamamos con un punto al método length(), y éste tomará el valor de fraseOpenwebinar para realizar las operaciones descritas entre sus llaves de apertura y cierre, como vimos anteriormente.
Comentarios
Pasamos a hablar de los comentarios, que no son más que aclaraciones que podemos hacer en determinadas partes del código para referenciar qué estamos haciendo en cada momento , o hasta donde llega un proceso y empieza otro, por ejemplo.
Los comentarios no serán interpretados en la secuencia de ejecución , para ello deben comenzar con una doble barra (//). Todo lo que se encuentre en esa línea tras la doble barra será omitido.
También podemos hacer comentarios que abarquen varias líneas de código , comenzando el comentario con una barra seguida de un asterisco (/*) y finalizando con el inverso, un asterisco seguido de una barra (*/). Para formatear mejor el texto y poder ver a simple vista que existe un comentario, las líneas que pertenezcan a dicho comentario empezarían por un asterisco (*), cosa que se verá mejor con el siguiente ejemplo:
/* Esto es un comentario de varias líneas dentro del código
* donde sólo será necesario establecer el inicio y el final
* del comentario componiéndose de barra-asterisco y
asterisco-barra,
* respectivamente. Además de insertar un asterisco al inicio
de cada línea
* para ver aún mejor dónde está cada comentario.
*/
Clases
Pasamos a comentar las clases y objetos en Java, que son la principal forma de organización de los ficheros de código . Por norma general, un fichero con la extensión *.java contendrá la definición de una clase y será compilado a un fichero que pueda ser leído por el hardware con la extensión *.class.
Los objetos pueden ser representaciones de objetos físicos como un bolígrafo o algo más abstracto como un link a una página web determinada. La clase tiene el objetivo de definir lo mejor posible cómo es ese objeto , qué características lo componen, cómo funciona, etc… La definición de las características, valores y variables de un objeto, puede ser otra definición de clase, mientras que las habilidades o funciones que realiza un objeto hemos visto que es llamado método.
Aquí un ejemplo de un vínculo a una página web donde aprovechamos para ver también los comentarios nuevamente:
public class ConexionUrl {
// Definimos un miembro variable (o propiedad del objeto)
private String mUrl;
// A continuación tenemos el método (o habilidad del objeto)
public void
setUrl(String url) {
mUrl = url;
}
public void conexion()
{
// Código para realizar la conexión HTTP y que se produzca el direccionamiento
}
}
En este ejemplo tenemos un miembro mUrl variable quien representa la URL a la que pretendemos conectar. El prefijo “m” minúscula es otra convención para indicar que se trata de un miembro variable.
Vemos dos métodos o funciones que este objeto puede hacer. El primero se llama setURL() que establece la variable del miembro privado (private) y el segundo método que es llamado conexion(), donde se encontraría el código para establecer una conexión con la URL destino.
Modificadores de Acceso
Para las clases, variables y métodos, especificamos para qué va a estar accesibles. En algunos casos, queremos que éstos puedan ser llamados desde cualquier punto del código , mientras que en otras ocasiones no deseamos que salgan del bloque en el que están declarados (esto nos puede salvar en alguna que otra ocasión de que una variable acabe tomando un valor indebido).
Para esto tenemos los modificadores de acceso que podemos resumir con la siguiente tabla de usabilidad, que indican dónde pueden ser llamados estos objetos o acciones según su modificador de acceso:
Modificadores Acceso. |
En su mismo bloque |
En la misma clase |
En paquetes dentro de subclases |
Otros paquetes de código |
public |
Sí |
Sí |
Sí |
Sí |
private |
Sí |
No |
No |
No |
protected |
Sí |
Sí |
Sí |
No |
Sin modificador |
Sí |
Sí |
No |
No |
Paquetes
Un paquete no es más que un cúmulo de clases relacionadas por algún aspecto en común y normalmente se nombran en un formato que sigue el patrón de dominio inverso, por poner un ejemplo, en el caso de una URL como podría ser openwebinars.net, sería net.openwebinars.
Condicionales
Os presento uno de los bloques de código básico más usado en los diferentes lenguajes de programación; que no es más que evaluar una condición y según el resultado el programa ejecutará una u otra acción.
En Java podemos hacer esto con el condicional if, que evaluará una condición con valores booleanos (true o false).
if (curso.equals(“Bueno, bonito y barato”)) {
esOpenwebinars = true;
}
Esto anterior es una condición donde sólo valoramos si es cierta o no, pero podemos ir más allá y establecer ambas opciones:
if (curso.equals(“Bueno, bonito y barato”)) {
esOpenwebinars = true;
}
else {
esOpenwebinars = false;
}
En caso de tener más de dos opciones, podemos encadenar tantas condicionales como queramos con else if:
if (curso.equals(“Bueno, bonito y barato”)) {
esOpenwebinars = true;
}
else if (curso.equals(“Novedoso y Rentabilizable”)) {
tambienOpenwebinars = true;
}
else {
esOpenwebinars = false;
}
Arrays
Los arrays son estructuras utilizaras para la organización de múltiples datos, simplificándose como listas estructuradas donde a cada dato se le llama por la posición que ocupa en el array.
Cuando declaremos un array, deberemos hacerlo en concordancia con el tipo de dato que vayamos a almacenar en él, siendo por ejemplo el caso de una lista de nombres, en el que usaremos el tipo de dato String; para una lista de los números asignados a los corredores en una carrera (donde no habrá decimales) el tipo int, etc…
Ejemplos de arrays:
String[] nombres = {“Jesús”, “Ángel”, “Manuel”, “Esaú”};
int[] edades = { 28, 26, 34, 31};
Para llamar a cualquier valor contenido en el array, debemos recordar que comenzamos a contar siempre desde 0, incluido éste. Por lo que para llamar al valor “Jesús” usaremos:
String[] primerNombre = nombres[0]; // Donde primerNombre tomará el valor “Jesús”
Si queremos añadir más valores a un array ya creado, lo haremos de la siguiente forma:
String[] nombres = new String[4]; // porque las posiciones,0, 1, 2 y 3 ya las tenemos ocupadas.
nombres[0] = “Jesús”;
nombres[1] = “Ángel”;
nombres[2] = “Manuel”;
nombres[3] = “Esaú”;
Loops
Definiremos los loops como bucles que usaremos para repetir una misma acción, condición, etc… sobre multitud de objetos o valores.
Por ejemplo, almacenaremos en log.d los valores del array “edades” que definimos antes:
for (int i = 0; i < edades.length; i++) {
Log.d(TAG, edades[i]);
}
Veamos con detenimiento este ejemplo:
- edades.length: el atributo .length hace referencia a la longitud del array al que está vinculado. En este caso la longitud del array será de 4 posiciones (0, 1, 2, 3).
- for: utilizamos el bucle for, porque estaremos realizando esta acción PARA cada uno de los valores del array
- i++: es una convención que significa que el valor i (que comienza en 0 con i = 0), será incrementado en 1 cada vez que se ejecute el bucle.
- i < edades.length: establece hasta cuando tiene que repetirse el bucle, en este caso mientras que i tenga un valor menor que la longitud del array, se repetirá una y otra vez.
Resumo con la base para un bucle for:
for (estado inicial, estado final, paso a realizar sobre el estado) {
// código a ejecutar en cada repetición del bucle
}
While
Con lo que ya hemos visto, podremos ir más rápido en esta parte, pues la base es prácticamente la misma.
While es una alternativa muy válida para los bucles for, ya que repetirá el bucle MIENTRAS se de una condición o estado en particular. Para realizar lo mismo que en el ejemplo anterior con while, sería algo así:
int i = 0;
while (i < edades.length) {
Log.d(TAG, edades[i]);
i++;
}
Como vemos se vuelve a repetir el proceso anterior, pero estableciendo previamente una condición de referencia. Aquí la base de un bucle while:
Estado inicial;
while (condición) {
// código a ejecutar
}
Do-while
Otro bucle parecido a while es do-while, con la diferencia de que comprobará el resultado al final de la secuencia y será cuando valore si tiene que volver a ejecutar el bucle:
int i =100;
do {
Log.d(TAG, “Repasando edades”);
} while (i < edades.length);
Y con esto, ya tendremos una base mínima para comenzar a desarrollar aplicaciones , puesto que sólo tendremos que concatenar declaraciones, registrar variables, considerar condiciones y ejecutar acciones en bucles para que resulte la acción o dato que queríamos.
Una muy buena forma de comenzar a practicar de la mano de un profesional es realizando el curso de creación de una app similar a Tinder para Android, con clases donde el profesor os guiará durante todo el proceso, tanto el planteamiento, maquetación y desarrollo como en la publicación de la app en Play Store, el market oficial de aplicaciones de Google.
Espero que toda esta información os sea de ayuda. Recordad suscribiros y seguirnos en las redes sociales donde además de publicaciones como ésta, encontraréis noticias, novedades y promociones que seguro os interesan.