Inicialmente el efecto "Parallax" solo se refería a gráficos en general, en donde el fondo y algunos elementos se movían a diferente velocidad para dar la ilusión de profundidad, con el tiempo ha evolucionado hasta incluir diferentes efectos que ocurren al hacer scroll.
Ambos se refieren al tamaño absoluto incluyendo el padding pero en el caso del primero se refiere al tamaño del "visor" osea lo que observamos actualmente al hacer scroll, mientras que el segundo es el tamaño total, incluyendo los elementos ocultos que está fuera del scroll
Descargar archivos del tutorial
NOTA:Para descargar los archivos, haces clic en el enlace y luego esperas unos segundos a que aparezca el botón del saltar publicidad, luego haces clic en ese botón y debería llevarte al archivo para que lo descargues, si no te lleva al destino solicitado comunícate conmigo inmediatamente a través de un comentario.
Parece una pregunta difícil de responder, ya que para poder programar hacer falta un computador, esto hace que la pregunta sea comparable al famoso: ¿Quien fue primero el huevo o la gallina? Los biólogos evolucionistas han respondido esta pregunta, y por si no lo sabes, primero fue el huevo. Te invito a ver el video de arriba para que descubras la historia de la primera persona que programó y así responder a la pregunta: ¿Quien fue primero la computadora o el programador?
Es un tipo de galería que muestra diferentes imágenes, en este caso a modo de feed de noticias, el nombre de carrusel viene por el proceso cíclico que siguen las imágenes, estas una vez que se llega a la última vuelve a mostrar la primera
Códigos ASCII
Anterior: ❮
Siguiente: ❯
Descargas
Nota: Los enlaces están patrocinados por "adfly", una vez hecho clic debes esperar unos segundos y luego te aparecerá un botón con el texto "Saltar publicidad" luego de hacer clic en él te debería llevar a la descarga, si no es así comunícate con migo inmediatamente a través de un comentario
En el video que acabas de ver yo te recomiendo considerar a Java y a C# como una buena opción para que sean tus primeros lenguajes de programación a aprender, ya que cumplen con los criterios descritos en el video:
Son orientados a objetos
Tienen una sintaxis común a varios otros lenguajes
No son ni muy fáciles ni muy difíciles
Son estrictamente orientados a objetos
Pseudocódigo
Esta es una recomendación aparte, sea cual sea el lenguaje que decidas aprender de primero, combina ese aprendizaje con pseudocódigo
Links del Video
Nota: Algunos enlaces están patrocinados por Adfly, luego de hacer clic, debes esperar unos segundos para luego hacer clic en el botón que dice "Saltar publicidad" luego de esto serás llevado directamente a la página solicitada, si no es así comunícate conmigo inmediatamente a través de un comentario
Este juego fue lanzado a mediados de lo años 70, a diferencia de lo que muchos creen no fue desarrollado por la Nokia, pero gracias a esta última adquirió una popularidad masiva debido a que venia pre-instalado en los teléfonos de esta marca.
Nota: Todos los enlaces están patrocinados por Adfly luego de hacer clic esperas unos segundos y haces clic en "Saltar publicidad", debería llevarte directamente al archivo para su descarga, si no es así comunícate inmediatamente conmigo a través de un comentario
Este último ejemplo es para que compares las diferencias con Windows Forms, no son muchas, estas solo son referentes a la interfaz gráfica, suscríbete a mi canal para ver más tutoriales como este, pronto publicaré el mismo tutorial pero en WPF
Código fuente completo (Windows Forms)
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace snake1
{
public partial class Form1 : Form
{
Graphics juego;
Cola cabeza;
Comida comida;
int espacio;
int xdir = 0,ydir = 0;
int puntaje = 0;
Boolean ejex = true, ejey = true;
public Form1()
{
espacio = 10;
InitializeComponent();
juego = canvas.CreateGraphics();
cabeza = new Cola(10, 10);
comida = new Comida();
}
public void findeJuego()
{
xdir = 0;
ydir = 0;
puntaje = 0;
puntos.Text = "0";
ejex = true;
ejey = true;
cabeza = new Cola(10, 10);
comida = new Comida();
MessageBox.Show("Perdiste");
}
public void choqueCuerpo()
{
Cola temp;
try
{
temp = cabeza.verSiguiente().verSiguiente();
} catch(Exception err)
{
temp = null;
}
while(temp != null)
{
if (cabeza.interseccion(temp))
{
findeJuego();
} else
{
temp = temp.verSiguiente();
}
}
}
public void choquePared()
{
if(cabeza.getX() < 0 || cabeza.getX() > 760 || cabeza.getY() < 0 || cabeza.getY() > 360)
{
findeJuego();
}
}
public void dibujar()
{
juego.Clear(Color.White);
cabeza.dibujar(juego);
comida.dibujar(juego);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (ejex)
{
if(e.KeyCode == Keys.Up)
{
ydir = -espacio;
xdir = 0;
ejex = false;
ejey = true;
}
if (e.KeyCode == Keys.Down)
{
ydir = espacio;
xdir = 0;
ejex = false;
ejey = true;
}
}
if (ejey)
{
if (e.KeyCode == Keys.Right)
{
ydir = 0;
xdir = espacio;
ejex = true;
ejey = false;
}
if (e.KeyCode == Keys.Left)
{
ydir = 0;
xdir = -espacio;
ejex = true;
ejey = false;
}
}
}
public void movimiento()
{
cabeza.setxy(cabeza.getX() + xdir, cabeza.getY() + ydir);
}
private void bucle_Tick(object sender, EventArgs e)
{
dibujar();
movimiento();
choqueCuerpo();
choquePared();
if (cabeza.interseccion(comida))
{
comida.colocar();
cabeza.meter();
puntos.Text = (puntaje++).ToString();
}
}
}
}
Cola.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace snake1
{
class Cola : objeto
{
Cola siguiente;
public Cola(int x, int y)
{
this.x = x;
this.y = y;
siguiente = null;
}
public void dibujar(Graphics g)
{
if(siguiente != null)
{
siguiente.dibujar(g);
}
g.FillRectangle(new SolidBrush(Color.Blue), this.x, this.y, this.espacio, this.espacio);
}
public void setxy(int x, int y)
{
if(siguiente != null)
{
siguiente.setxy(this.x, this.y);
}
this.x = x;
this.y = y;
}
public void meter()
{
if(siguiente == null)
{
siguiente = new Cola(this.x, this.y);
} else
{
siguiente.meter();
}
}
public int getX()
{
return this.x;
}
public int getY()
{
return this.y;
}
public Cola verSiguiente()
{
return siguiente;
}
}
}
objeto.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace snake1
{
class objeto
{
protected int x, y, espacio;
public objeto()
{
espacio = 10;
}
public Boolean interseccion(objeto o)
{
int difx = Math.Abs(this.x - o.x);
int dify = Math.Abs(this.y - o.y);
if(difx >= 0 && difx < espacio && dify >= 0 && dify < espacio)
{
return true;
} else
{
return false;
}
}
}
}
Comida.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace snake1
{
class Comida : objeto
{
public Comida()
{
this.x = generar(77);
this.y = generar(37);
}
public void dibujar(Graphics g)
{
g.FillRectangle(new SolidBrush(Color.Red), this.x, this.y, this.espacio, this.espacio);
}
public void colocar()
{
this.x = generar(77);
this.y = generar(37);
}
public int generar(int n)
{
Random random = new Random();
int num = random.Next(0, n) * 10;
return num;
}
}
}
La propiedad filter no está implementada completamente en los navegadores, por lo que se deben utilizar prefijos para que sea compatible con todos los navegadores
-webkit-filter para Chrome Safari y Opera
filter (Forma standard) Internet explorer y Firefox
Código fuente y archivos
Si quieres visualizar el código fuente, puedes visualizarlo o descargarlo.
Instrucciones: Luego de hacer clic espera unos segundos y luego haz clic en el botón que dice "Saltar publicidad" si esto te presenta algún problema comunícate conmigo inmediatamente a través de un comentario
Puedes empezar el tutorial con el mismo html que yo utilicé aunque da igual si utilizas un formulario creado por tí
http://adf.ly/1dAUFG (Lee la aclaratoria sobre los enlaces al final de la entrada)
Si solo quieres las imágenes que yo utilicé las puedes descargar en el siguiente enlace:
http://adf.ly/1dAUJB (Lee la aclaratoria sobre los enlaces al final de la entrada)
La importancia de la validación
La validación no es más que la verificación de los datos antes de que estos puedan ser procesados por nuestro servidor.
Existe un tipo de ataque conocido como Inyección SQL que consiste en enviar código malicioso a través de los formularios, más información sobre este tipo de ataque puedes ver el siguiente enlace:
La verificación más importante que debemos hacer consiste en evitar que un atacante pueda ingresar Javascript o SQL a través de nuestros formularios, también en evitar que se envíen espacios en blanco para que nuestra base de datos no se llene de datos basura
La diferencia entre el servidor y el cliente
En el cliente, la validación ocurre en el navegador mismo, por lo tanto se lleva a cabo usando herramientas disponibles en el navegador, como por ejemplo HTML5 CSS3 y JavaScript.
En el servidor, la validación ocurre una vez que la información ha sido enviada a este a través de un formulario, esta se lleva a cabo con tecnologías disponibles en el servidor como PHP JSP Node.JS ASP etc
Como escribir patrones para el atributo "pattern"
Las llaves [ ]
Indican que caracteres debemos colocar, a continuación unos ejemplos :
[abc] Solo se puede escribir "a","b" o "c" puede ser por ejemplo: "ccc", "bbb", "aaa" o cualquier combinación que solo tenga una de las tres letras
[^abc] Al colocar el "acento circunflejo" (Es el nombre de ese signo) estamos pidiendo que se permita cualquier carácter excepto "a", "b" o "c", esto significa que se van a admitir, números, caracteres especiales y letras, siempre y cuando estas últimas no sean una de esas tres
[a-z], [0-9] o [A-Z] Con el guión podemos especificar un rango de caracteres, en el primer caso cualquier letra que vaya de la "a" hasta la "z" en minúscula, estos se pueden combinar sin necesidad de espacios de la siguiente forma: [a-zA-Z0-9]
[\s] o [\n] De igual forma que hicimos en el primer ejemplo podemos especificar estos caracteres para pedir que se solicite un espacio en blanco o una nueva linea respectivamente
\ El "slash invertido" lo usamos para poder identificar caracteres especiales por ejmplo si queremos solicitar que se coloquen guiones [\-] si se colocara el guión solamente pudiera causar conflicto ya que como vimos arriba este se usa para denotar rangos
\d Cualquier número, en este caso no es necesario colocar las llaves ([])
\D Cualquier letra o carácter especial, la igual que arriba no es necesario colocar as llaves
Los corchetes { }
Indican la cantidad de caracteres que debemos colocar:
{7} Aquí exigimos 7 caracteres obligatoriamente, ni mas ni menos
{2,9} Siempre tiene que haber como mínimo 2 y no más de 9
En resumen, con la coma (,) creamos rangos para cantidad y con el guión (-) creamos rangos para el tipo de carácter
Ejemplos de patrones
Código postal Venezolano : Deben ser 4 números entre 0 y 9
[0-9]{4}
Código postal Mexicano : Contiene 5 dígitos 4 números agrupados de dos en dos y separados por un guión
[0-9]{2}[\-]{1}[0-9]{2} o también \d{2}[\-]\d{2}
Número de teléfono formato USA internacional : debe ser algo así +99(99)9999-9999
[\+]\d{2}[\(]{1}\d{2}[\)]\d{4}[\-]{1}\d{4}
También cuando queramos un solo carácter no hace falta que especifiquemos el {1} por lo que lo de arriba puede quedar de forma más corta de la siguiente manera:
[\+]\d{2}[\(]\d{2}[\)]\d{4}[\-]\d{4}
Fecha formato dd/mm/aa:
\d{2}[/]\d{2}[/]\d{2}
Más información sobre los patrones
A continuación comparto contigo una enlace a un sitio web que contiene una lista grande de patrones ya creados que puedes usar, adicionalmente te permite crear tus propios patrones de forma muy sencilla, el único problema es que este sitio está en inglés:
http://adf.ly/1dASXo (Lee la aclaratoria sobre los enlaces al final de la entrada)
Códigos fuente
En el enlace a continuación puedes descargar el formulario ya terminado, para que leas y compares el código fuente que yo escribí:
http://adf.ly/1dAUNf (Lee la aclaratoria sobre los enlaces al final de la entrada)
Aclaratoria sobre los enlaces
Los enlaces en este blog tienen un pequeño anuncio publicitario patrocinado por Adfly, luego de hacer clic esperas unos segundos y aparecerá un botón con el texto "Saltar publicidad" debes hacer clic ahí para llegar a la página de destino. Este patrocinio me permite producir más material como este, si te parece que los anuncios son incómodos o no llevan la página de destino escríbeme inmediatamente, puedes hacer un comentario aquí o en mi canal de Youtube
En el video que acabas de ver se explican la diferencia entre los que podemos considerar los lenguages de programación más importantes en el desarrollo web. Acontinuación podrás descargar los códigos fuente de los ejemplos y podrás descargar los diferentes servidores web disponibles.
Aclaratora sobre los enlaces: Todos los enlaces que aparezcan a partir de este punto, tienen un pequeño anuncio publicitario, patrocinado por adfly, luego de hacer clic, puedes undir en donde dice "Saltar publicidad" para ir a la página de destino. Estos anuncios me permiten poder hacer más material como este, pero si te resultan molestos por favor escríbeme para buscar una mejor forma de trabajar
Servidores Web y sus diferencias
Todos los programas que te voy a recomendar a continuación, son 100% gratis, ya que son software libre
WampServer: El que yo uso, este servidor contiene: El interprete PHP, el servidor Web propiamente dicho y un servidor de bases de datos MYSQL. Todo ya configurado y enlazado para que puedas hacer scripts PHP que se comuniquen con tu base de datos. Adicional-mente viene con utilidades web como phpMyAdmin que permite administrar tus bases de datos desde el navegador web, en el ejemplo de PHP uso esta utilidad para verificar la base de datos. Para descargar wamp clic aquí
XamppServer: Este es como Wamp pero con esteroides, tiene todo lo que tiene Wamp pero muchas otras cosas más, como por ejemplo un servidor de correo, una entidad emisora de certificados SSL para cifrar las páginas web que creemos, servidor FTP, interprete PERL, y un interprete JSP. Para descargar XAMPP has clic aquí
EasyPHP: Tampoco nunca lo he usado, es similar a WAMP pero con algunos agregados como lo son Nginx, phyton, ruby etc. Para descargar EasyPHP haz clic aquí
NMP-Server: Es un servidor portátil, lo que significa que no tienes que instalar nada, solo ejecutarlo, contiene: PHP, Nginx y MYSQL. Clic aquí para descargar
Códigos fuente para descargar
Recuerda leer la aclaratoria sobre los enlaces al inicio de la entrada.
Recuerda comentar en el video cualquier cosa que creas que no haya sido cubierta por el video, igualmente comenta las cosas que creas que se puedan hacer con uno o con otro.
Casi siempre cuando estamos escribiendo un programa nos vemos en la necesidad de guardar de forma permanente la información, eso es una gran diferencia a el uso de variables en las que podemos guardar información pero esta se desvanece al cerrar nuestro programa.
Las excepciones
Se refiere a la indicación de que ha ocurrido algún problema durante la ejecución de nuestro programa, usamos la palabra excepción por que se espera que esto ocurra con poca frecuencia, generalmente es un instrucción que no se apega al funcionamiento "regular" del programa.
En nuestro ejemplo debemos indicarle que hacer en caso de no encontrar el archivo
Manejo de Excepciones
Es la técnica que consiste en escribir una porción de código que resuelve la situación generada por la excepción. Es un código alternativo que se ejecuta en el caso de que el primero no funcione a causa de la excepción.
Como dije en el video la clase "file" solo sirve como enlace para un archivo que podría o no podría existir, con ella tenemos varios métodos útiles para extraer información de nuestro archivo, a continuación voy a listar los que me parecen más útiles para los que se están iniciando con este apartado:
canRead(): Realiza una prueba para comprobar si es posible leer el archivo
exists(): Devuelve false si el archivo no existe y "true" en caso contrario
getAbsolutePath(): Obtiene la ruta completa donde está ubicado el archivo
getName(): Obtiene el nombre completo del archivo
Si quieres saber más sobre la clase file, puedes seguir el siguiente enlace a la referencia oficial de java (está en inglés) clic aquí
Códigos fuente del tutorial
Corrección:
En el tutorial dije que solo manejaríamos una sola excepción, pero esto fue un error, ya que al leer el archivo necesitamos controlar la excepción "FileNotFoundException" y "IOException", pero en este caso podemos solo especificar "IOException" porque la primera es subclase de la segunda.
Aclaratoria sobre los enlaces: Como habrás podido notar los enlaces contienen un pequeño anuncio publicitario, mi interés con esto no es causar molestia si no mas bien tener un impulso para poder seguir produciendo material como este, si por alguna razón los anuncios te parecen muy incómodos o piensas que son demasiado molestos, escríbeme y yo tomaré tu comentario en cuenta buscando una mejor forma de trabajar.
Este es uno de los valores que podemos definir en nuestra propiedad "animation", si queremos definir este parámetro de forma independiente debemos usar la propiedad "animation-timing-function" y podemos darle los siguientes valores :
linear : La animación tiene la misma velocidad desde el inicio hasta el final
ease : Empieza lento, luego acelera la velocidad y antes del final, lento nuevamente
ease-in : Comienza lentamente
ease-out : Termina lentamente
ease-in-out: Comienza y termina lentamente
steps(int, start|end) : Permite personalizar, hasta cierto punto la velocidad, el primer parametro es la cantidad de intervalos y el segundo es donde ocurrirá el cambio de velocidad, al inicio (start) o al final (end)
step-start : Equivalente a colocar steps(1, start)
step-end : Equivalente a colocar steps(1, end);
cubic-bezier(n,n,n,n) : Permite personalizar completamenta la función de tiempo, a continuación te enseño a establecer los valores
Función cubic-bezier
Se le deben pasar 4 parámetros numéricos que describen una "curva de bezier" sigue este enlace para saber lo que es :
Acerca de los enlaces: Tienen un pequeño anuncio publicitario, esto lo hago para poder tener un mejor apoyo y así poder seguir produciendo más material como este, si te parecen muy molestos, escríbeme en los comentarios y yo buscaré una mejor forma de trabajar. Luego de hacer clic en ellos debes hacer clic en donde dice: "Saltar publicidad"
En el siguiente enlace podrás descargar las imágenes de la superficie lunar y el mapa mundi de la tierra, ambas están en un archivo de winrar así que solo tienes que descargar un archivo, dentro de él están las dos imágenes:
Array o arreglo en español : Se refiere a una variable que es capaz de almacenar, no uno, sino varios valores diferentes, estos se ordenan según unos indices que comienzan desde el 0 y terminan de acuerdo al tamaño de nuestro array. El tamaño, en java lo tenemos que definir al momento de crear nuestro array.
El objeto ArrayList : Es un objeto que nos permite más versatilidad al momento de usar arreglos, un objeto "ArrayList" es en esencia un array, en donde no tenemos que especificar ni el tipo de dato que va a guardar, ni la cantidad. Con respecto a lo último, podremos almacenar todos los objetos que queramos dentro de nuestor "ArrayList" y este en teoría nunca se va a llenar. Si queremos podemos especificar el tipo de objeto que va a guardar usando paréntesis angulares, mas abajo en los ejemplos de código fuente, veras esto más en detalle.
Diccionarios de Java: Estos los podemos llamar de una forma muy informal como "Array asociativo en Java" esto en referencia a PHP. Con los diccionarios, que se crean usando el objeto "HashMap", nos permite crear una especie de array, en donde los objetos no se acceden usando indices si no claves creadas por nosotros.
Códigos fuente
Creación simple de array, poblamiento usando un bucle "for" y lectura usando un bucle "for each"
En este caso el tamaño o la cantidad de elementos que admite el array es el número con el cual se crean osea 4, siendo el indice 0 igual a "uno" y el indice 3 igual a "cuatro"
Ejemplo de ArrayList, poblamiento y lectura usando bucle "for" y "for each"
ArrayList miarray = new ArrayList();
for(int i=0; i<=100; i++){
miarray.add(i);
}
for(Object o : miarray){
System.out.println(o);
}
Ejemplo de ArrayList, especificando el tipo de datos que va a guardar
ArrayList<String> miarray = new ArrayList();
En este caso no sería necesario usar "Object" en el bucle for, en su lugar usamos "String"
Ejemplo de diccionario, usando HashMap
HashMap<String, String> arreglo = new HashMap();
arreglo.put("clave", "valor");
Las claves y los valores pueden ser tipo de datos que queramos
Juego de Palíndromos en Java
Por último el ejemplo del detector de Palíndromos en java, a continuación el código completo
Los controles que coloco a continuación estan disponibles para la librería base, hay otros controles que estan disponibles bajo el uso de plugins, estos los veremos más adelante.
Barra de Herramientas
newdocument: Crea un nuevo documento
bold: Aplica el estilo de "negrita" al texto en cuestión
italic: Aplica el estilo de "cursiva" al texto en cuestión
underline: Aplica el estilo de "subrayado" al texto en cuestión
strikethrough: Crea una linea que pasa por la mitad del texto, estilo de texto tachado
alignleft: Alinea el texto a la izquierda
aligncenter: Centra el texto
alignright: Alinea el texto a la derecha
alignjustify: Justifica el texto
styleselect: Crea una lista tipo "dropdown" con los estilos disponibles para aplicar
formatselect: Crea una lista tipo "dropdown" con los formatos disponibles para aplicar
fontselect: Crea una lista tipo "dropdown" con las fuentes disponibles para aplicar
fontsizeselect: Dropdown para seleccionar el tamaño del texto
cut: Corta el texto al portapapeles
copy: Copia el texto al portapapeles
paste: Pega el texto del portapapeles
bullist: Crea una lista con estilo similar a esta que estas viendo
numlist: Lista numérica
outdent: Cambia nivel de la lista hacia afuera
indent: Cambia nivel de la lista hacia adentro
blockquote: Convierte la selección en una cita
undo: Deshace la última operación
redo: Rehace la última operación deshecha
removeformat: Elimina todo el formato del texto
Controles de Menú
Aparte de los menús que podemos mostrar, como lo son : "file", "edit", "view", "format", tenemos los siguientes controles:
newdocument: Crea un nuevo documento
undo: Deshace la última operación
redo: Rehace la última operación deshecha
visualaid: Activa o desactiva las ayudas visuales
cut: Corta al portapapeles
copy: Copia al portapapeles
paste: Pega desde el portapapeles
selectall: Selecciona todo el texto
bold: Aplica el estilo de "negrita"
italic: Aplica el estilo de "cursiva"
underline: Subraya el texto
strikethrough: Crea una linea que pasa por la mitad del texto, estilo de texto tachado
removeformat : Elimina todos los formatos
formats: Muestra una lista de los formatos disponibles
Los tooltip son usados para mostrar información extra acerca de un elemento, justo cuando el usuario pasa el mouse por encima. Los podemos ver como una forma mas moderna del antiguo atributo "alt", para los que no lo saben, anteriormente este atributo nos permitía mostrar un texto cuando el usuario posaba el mouse encima, actualmente este atributo tiene otra funcionalidad totalmente diferente.
Tooltip de texto
En el primer video (El segundo estará disponible mas tarde o mañana) les muestro como hacer un tooltip animado de texto, a continuación el código fuente :
La parte CSS :
<style type="text/css">
.tooltip {
background-color: black;
color: white;
padding : 5px;
position: absolute;
border-radius: 5px;
top: 15px;
visibility: hidden;
transition: opacity 1s, visibility 1s, top 1s;
opacity: 0;
}
.tooltip::after {
content: " ";
position: absolute;
top: 100%;
left: 50%;
border-style: solid;
border-width: 5px;
border-color: black transparent transparent transparent;
}
.txt:hover + .tooltip {
visibility: visible;
opacity: 1;
top: 10px;
}
</style>
El HTML:
<br>
<br>
<span class="txt">mi texto</span>
<div class="tooltip">
Información
</div>
Las etiquetas <br> las coloco para que "mi texto" no quede muy arriba y poder colocar el tooltip arriba de este
Tooltip con imagenes
En el segundo video, les enseño también a crear un toolttip, pero ahora este no esta compuesto de texto sino de imágenes.
En el video que acabas de ver mas arriba, modificamos el juego del ejercicio 1, y le agregamos el bucle while, con esto podemos exigir una respuesta correcta y restar puntos cada vez que se responda mal
El secreto para poder hacer el ejercicio es algo tan simple que solo ocupa el espacio de un caracter : "!" este signo de exclamación, en Java es un operador lógico de negación, lo que hace es invertir el valor de una condición, veamos el siguiente ejemplo
int num = 5;
if(num == 5){
.....
}
La condición dada arriba se va a ejecutar como verdadera, ya que obviamente lo es, veamos que ocurre si agregamos el operador de negación
int num = 5;
if(!num==5){
.....
}
En este caso no se va a ejecutar, ya que el operador de negación invierte su valor, ahora solo se va a ejecutar si la variable "num" tiene algún otro valor que no sea 5
En nuestro juego de preguntas lo que necesitamos es colocar como condición "que la respuesta sea falsa" y eso lo hacemos con el operador de negación.
El código fuente
Si quieres descargar el código fuente de este ejercicio haz click aquí
En el video que acabas de ver te invito a que intentes crear un programa que detecte si un número es primo o no, para hacerlo necesitas conocer sobre los bucles "while", las sentencias de control "if" y los operadores de incremento y decremento, a continuación los enlaces a cada tema :
En la clase anterior a este ejercicio, en la entrada correspondiente (el primer enlace en la lista de arriba), aprendimos acerca del operador de módulo, el cual se escribe con el símbolo de porcentaje (%) este operador permite calcular el resto de una división, por ejemplo las siguientes operaciones con el operador de módulo darían los siguientes resultados
10%3 = 1 ; 5%2 = 1 15%4=3
Este operador es la clave para resolver este ejercicio, ya que una operación con un número, usando este operador, solo va a dar 0, cuando es primo, si el otro operando es el mismo número o uno (1). Por lo que el ejercicio consiste en hacer un bucle que "pruebe" todos los números menores hasta llegar a uno y buscar bajo que números es divisible.
Código Fuente
Para descargar el código fuente del ejercicio has click aquí
Break y Default necesarias pero no imprescindibles
Como acabamos de ver, un "switch", nos permite ejecutar diferentes acciones que dependen del valor de la variable que evaluemos, las palabras reservadas "switch" y "case" son imprescindibles para la construcción de la sentencia. Pero nos encontramos con dos palabras que son opcionales : "break" y "default" ¿que pasa si no las usamos? La primera hace que nuestro código se ejecute de forma mas eficiente, al parar la ejecución una vez que la condición se cumple, si quitamos el "break" se van a evaluar todas las condiciones independientemente si ya se encontró la condición "verdadera" o no, con lo que se pierde tiempo y memoria, en una aplicación tan pequeña como la que construimos en esta clase eso podría no importar mucho, pero en aplicaciones complejas tenemos que tener esto en cuenta.
La otra palabra reservada opcional es "default", en el ejemplo que vimos en el video pareciera imposible no usarla, ya que si nuestro IDE detecta algún error no nos va a dejar compilar, pero no es así, el uso del "default" evita ejecuciones inesperadas del código.
Calculadora de consola
En el ejercicio 2 del curso hicimos una calculadora de consola usando la sentencia "if", en el enlace a continuación puedes ver el código fuente de ese ejercicio
Ahora hacemos exactamente el mismo programa, pero usando la sentencia "switch", probablemente te estarás preguntando ¿Hay alguna diferencia entre hacerlo de una u otra forma? Ciertamente en el mundo de la programación hay no una sino mil formas de escribir un algoritmo, y no siempre es válido decir que una forma es mejor que la otra; sin embargo es importante mencionar que el programa hecho con "switch" es un poco mas eficiente gracias al "break". A continuación el enlace al código fuente del programa hecho en la clase :