jueves, 26 de mayo de 2016

Curso de Java Clase 2: Las entradas, los Strings e introducción a las sentencias de control


Sobre las Entradas

   Como acabamos de ver en el video las entradas en consola se logran usando una combinación de dos cosas System.in y Scanner, ahora vamos a hablar un poco de lo que sucede bajo el capó 

¿Qué es System.in?

 En la entrada pasada, vimos que System es la clase que contiene las operaciones básicas de entrada y salida, en este caso "in" representa un flujo de información, en el mundo de la programación vamos a usar la palabra inglesa "Stream", de hecho mas adelante en el curso se va a dedicar una clase completa a los Streams. Desde un punto de vista conceptual, un Stream es un canal de información, imagínenlo como una carretera donde circulan vehículos de todo tipo, donde cada vehículo lleva paquetes que deben ser entregados, en este ejemplo los paquetes representan la información que es transportada, que ahora no es mas nada que el texto que introducimos en la consola.
  La gran diferencia con "System.out" es como es obvio que "in" trabaja exclusivamente con flujos de entrada.

¿Qué es Scanner?

  Scanner es una clase, como vimos las clases sirven para crear objetos con ellas, esto, como dije en el video va a quedar mas claro cuando veamos orientación a objetos. Para poder entenderlo mejor sin abrumarlos de teoría imaginemos lo siguiente: Los objetos en programación son como los objetos del mundo real y como tales tienen sus propiedades y funciones, por ejemplo un vehículo, tiene una propiedad, el color y una función transportar cosas y personas; entonces si el objeto del mundo real es un vehículo ¿Cual sería la clase? podemos imaginarla como el manual de instrucciones para fabricar un  vehículo.
   Con Scanner creamos un objeto del tipo Scanner, y podemos usar una de sus funciones, en esta caso "nextLine", para transportar nuestra información a la consola, Scanner es nuestro vehículo en la autopista Java. 


System es una clase ¿Podemos crear un objeto con ella?

  
    Excelente pregunta, si te la estás haciendo te felicito, la respuesta a esta pregunta es negativa, existen muchas clases que no se pueden instanciar ya que son abstractas, de forma muy resumida puedo decir que solo están para aprovechar sus funciones sin que sea necesario crear objetos con ellas, es como un manual de aeróbicos, es un manual para hacer algo, pero el resultado no es un objeto físico.


¿Podemos atrapar una entrada en consola sin Scanner?

    
    Si, si se puede, pero te verás obligado a hacer manualmente un montón de cosas, el buffer y el manejo de excepciones son un ejemplo. Como prometí en el video a continuación un ejemplo de entrada en consola sin Scanner.

public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(
                new InputStreamReader(System.in));
        System.out.print("¿Su nombre? ");
        System.out.flush();
        String nombre = in.readLine();
        System.out.println("Felicidades" + nombre);
    }

  Aparte hay que importar varias cosas :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;


¿Importar?  ¿y la aduana nos va a cobrar impuestos?

  
   Con importar lo que hacemos es traer código desde otros proyectos o librerías, en este caso Java ya nos provee con una serie de librerías que podemos importar y utilizar, esta se conoce como la librería estándar de Java, es de hacer notar que el paquete "Java" de las librerías no es el único. La palabra reservada "import" y sus respectivas librerías a importar, van siempre después de la linea del paquete.

Los Srings son objetos ¿y new?


  String es una clase y por lo tanto las variables de tipo String son objetos, entonces ¿porque no usamos new para crear objetos? String es una excepción en este caso, realmente no conozco si hay mas clases con esta excepción. Es importante saber que crear un objeto String con "new" no es incorrecto, es solo innecesario, veamos el siguiente ejemplo:
  String texto = new String("hola mundo");
Este código no nos va a dar ningún error, pero como dije antes es innecesario ya que como vimos lo podemos hacer así:
String texto = "hola mundo";

Introducción a las Sentencias de Control

  Sin sentencias de control, la programación sería muy aburrida, todo nuestro código se ejecutaría linea por linea sin excepción. Con este ejemplo acabamos de definir lo que son, simplemente son porciones de código que nos permiten decidir que se va a ejecutar y que no. La forma mas básica de ellas en Java es la siguiente:
if( Condición ) {
 codigo a ejecutar si la condición es cierta ;
}

  La condición puede ser cualquier cosa que sea verdadera, por ejemplo
int numero = 2;
if(número == 2) {
System.out.println("El numero es 2!!");
}

Atención

Acabamos de ver dos operadores diferentes: "=" y "==" el primero es para  asignar valores a variables y el segundo es para comparar dos valores

  En el código de arriba si lo ejecutamos, la respuesta en consola sería : "El número es 2!!"

Las funciones "equals" e "equalsIgnoreCase"

    Estas funciones comparan dos textos y devuelven "verdadero" si son iguales y "falso" si no lo son, veamos el siguiente ejemplo:
Tomemos tres variables String, cada una con su respectivo valor:
String texto1 = "hola";
String texto2 = "chao";
String texto3 = "Hola";
  Ahora usemos una de nuestras funciones, como son funciones que devuelven verdadero y falso, tenemos que usarlas dentro de una sentencia de control, en este caso un "if"
if(texto1.equals(texto2)){
   System.out.println("Son iguales");
}
  Este código no se va a ejecutar porque las variables como podemos observar no tienen el mismo valor, ahora veamos lo siguiente:
if(texto1.equalsIgnoreCase(texto3)){
   System.out,println("Son iguales");
}

  En este caso, si se ejecuta el código, ya que la función "equalsIgnoreCase" las compara sin importar las mayúsculas y minúsculas, si por el contrario hubiéramos usado la función "equals", el código no se hubiera ejecutado, te invito a que lo intentes por tu cuenta a modo de ejercicio.

Las palabras raras de la clase: "Sobrecarga de métodos"

  En clases futuras vamos a ver funciones y esto quedará mucho mas claro, muy resumidamente puedo decir, que las funciones o métodos, son bloques de código que podemos llamar cuando queramos para ejecutar todo lo que tengan dentro. Podemos verlo de la siguiente manera, son como variables pero en lugar de almacenar valores, almacenan código. Pero las funciones no solo se identifican por el nombre, si no por los parámetros y la cantidad de los mismos que le podemos pasar, parámetros son eso que colocamos dentro de los paréntesis, por lo tanto podemos crear las funciones que queramos, con el mismo nombre, y no vamos a obtener ningún error siempre y cuando definamos parámetros diferentes para cada una.

5 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. creo que usaste la palabra stings mal indiferentes ocasiones...
    tu blog es de gran ayuda para cimentar los nuevos conocimientos adquiridos... GRACIAS.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Gracias por los cursos querido Dross.

    ResponderEliminar