compareTo en JavaScript

Estándar

Todos alguna vez hemos estudiado los métodos de ordenamiento, si hemos visto lenguajes de programación. Y, los que lo hemos visto, nos podremos dar cuenta que no son difíciles de entender y aprender, siempre y cuando no nos den datos del tipo String. Esos sí que son problemáticos en su totalidad. Pues, uno al comparar dos números, puede establecer una relación de orden fácilmente. Ahora, aplica eso en una cadena. Puedes obtener el código ASCII del primer carácter, pero si te muestro “ANALGÉSICO” y “ANALÓGICO”, ¿qué haces?

Pensando en esto, es que decidí ver el código fuente de la clase String de Java, viendo cómo trabaja el compareTo. La verdad en un momento pensé que sería algo grande, y lo fue. Creo que se declaran variables hasta por las puras. Menos mal que en JavaScript no es necesario convertir un String a char[], sino de una sola usando String.charAt().

Entonces, aquí presento el código del prototipo “compareTo” de String, codificado en JavaScript:


String.prototype.compareTo = function( cadena ) {
  cadena += "";
  var l1 = this.length,
  l2 = cadena.length,
  limite = Math.min( l1, l2 ),
  k = 0,
  c1,
  c2;
  while ( k < limite ) {
    c1 = this[ k ];
    c2 = cadena[ k ];
    if ( c1 !== c2 ) {
      return c1.charCodeAt( 0 ) - c2.charCodeAt( 0 );
    }
    k++;
  }
  return l1 - l2;
};

¿Por qué aprender a programar?

Estándar

Posiblemente hayas escuchado alguna vez hablar acerca de programación. Y también es probable que te hayas preguntado qué era eso, en qué consiste, o como otros usuarios, que te importa lo que sea, si al fin y al cabo no lo vas a usar.

Pues la intención de este artículo es explicar, como el título lo dice, el porqué aprender a programar. Y es que no podemos vivir en este siglo sin saber algo tan simple que implica programar.

Antes que nada, veamos a nuestro alrededor. Desde el momento en que estás leyendo este artículo, debes estar usando un dispositivo con conexión a Internet. ¿Y adivina qué? Tu dispositivo tiene un sistema operativo, sea de escritorio, móvil o propietario.

Y si te diste cuenta, ¡el sistema operativo viene programado! Sino, reflexiona unos segundos acerca de la pregunta: ¿cómo es que funciona mi dispositivo, respondiendo a las órdenes que le hago?. La respuesta es inmediata: programación.

Tal vez el sistema operativo nunca nos hable y diga: “soy un sistema operativo, y estoy programado en el lenguaje X”. Sé que no lo hará. Y es que los que los fabrican (si usas Windows, Microsoft; Android, Google; iOS, Apple; FirefoxOS, Mozilla, entre otros) saben que tú nunca lo querrás saber, y así les ahorras un gran trabajo de poner una opción más en su sistema que te informe en qué lenguaje de programación fue diseñado el sistema.

Algo que olvidé decir: un lenguaje de programación es un conjunto ordenado de instrucciones, que realizan tareas específicas de acuerdo a qué sea necesario hacer. En pocas palabras, usando un lenguaje de programación puedes crear programas, los que pueden ir desde muy simples, hasta la creación de grandes sistemas. Ejemplo de éstos tenemos: PHP (mi preferido), JavaScript (uno de los lenguajes más usados para web), HTML (no sé qué de lenguaje tenga esto además de un modelo de documento, pero según dicen, con el auge de HTML5, se ha convertido en un lenguaje de programación), CSS (muchos dirán que es similar a HTML, pero para mí despliega tu creatividad, y eso es algo esencial de un lenguaje de programación), Python (el mejor para los que desean iniciarse en programación, pero te acostumbra a malas prácticas), Ruby (uno de los más poderosos y potentes del mundo), C (el padre de todos los lenguajes), C++ y C# (variantes ligeras de C), Java (uno de los mejores en programación orientada a objetos, luego de SmallTalk), ASP (propiedad de Microsoft), entre otros.

Siguiendo con el tema de los sistemas operativos, ¿ahora crees que sea útil decir en qué lenguaje de programación fue programado algo? Si tu respuesta aún es no, no te preocupes, acaba de leer el artículo y de inmediato cambiarás de opinión :)

Todo en los ordenadores, en lo que nos rodea, se basa en lenguajes de programación. Incluso las aplicaciones que usamos casi a diario: Microsoft Word, Excel, Internet Explorer (mi más sentido pésame si aún lo usas), Mozilla Firefox (digno de admirar, en otro artículo explicaré el por qué), tu juego de Buscaminas (si lo jugaste alguna vez, sino ¡qué esperas!), y otras aplicaciones de uso diario. Ahora ¿ya crees que es útil saber en qué lenguaje están programados?

Bueno, si aún dices “no, pues: ¿qué pasaría si algún día quieres mejorar tus aplicaciones, dotarlas de funcionalidades propias que te hagan la vida más fácil de lo que ya es con los ordenadores, si quisieras crear algún virus para obtener las contraseñas de tu amigo (no tomes en cuenta esto, fue a modo de ejemplo)? Si no sabes programar, pues paga a un “especialista” que lo haga. Cuando lo hagas, comenta sólo cuánto te cobró, y si te desmayaste o no. ¡Merecemos aprender por nuestros propios medios! ¡Necesitamos hacer trabajar a los ordenadores para nosotros, no nosotros para ellos!

Ahora, piensa en esto: ¿no crees que sería un buen complemento para ti saber a programar? Sino piensa en las ventajas: dile  a tu amiga(o) que sabes programar y mañana tienes una boda. Sé que puedes estar más adelante de los que te rodean. Dichas personas “normales” que se pasan la vida usando programas ya hechos, y que cuando quieren una nueva característica, tienen que pedir soporte técnico para lograrlo.

Programar es algo muy bonito, te lo aseguro. Llevo 4 años de mi vida programando (desde mis 13), y la verdad es que me he quitado muchos problemas de encima fácilmente. ¿Cómo? Usando la lógica y la programación.

Mencioné “lógica” porque no puedes programar algo sin lógica. Sino ¿qué sería Word sin que sepa que cuando tú presiones la gran “N” es que quieres un texto en negrilla (o negrita, como le quieras llamar)? La lógica y la programación van completamente de la mano. Aprender a programar es fácil. Aprender a pensar lógicamente no. Esto implica un proceso más largo, el cual debes haberlo venido desarrollando desde que naciste, sin darte cuenta de ello.

¿Ya estás asustándote con lo tanto que parlo? Pues no te preocupes, aún te falta leer el triple de lo que llevas leído, aumentado en 2 palabras. Okay, no más lógica por hoy :) No hay de qué temer, un ordenador nunca se levantará y te llevará de la nada a otro lugar. A menos que trabajes en inteligencia artificial.

Continuando con el tema de la programación, puedes ver mis experiencias como programador en esta página. Pregunto por tercera vez: ¿aún sigues creyendo que aprender a programar no te servirá de nada? ¡Pues pongamos un ejemplo! Estás en tu hogar, sin nadie de compañía. La luz se apaga. ¿Qué es lo primero que piensas? Si pensaste “se quemó la bombilla”, al igual que yo, pues estás a un paso de poder programar. Si pensaste algo más avanzado, no te preocupes, siempre hay personas raras, y son ellas las que más rápido pueden aprender a programar. ¿Otro ejemplo? Creo que ya eso fue suficiente.

Bien. Después de toda la introducción, pasemos a ver qué maravillas podrías hacer al programar. Si trabajas con programas de oficina, ¿no sería más fácil agregar un formato predefinido para cada tipo de documento que redactes? Si vas jugando todo el día, ¿y si crearas tu propio juego, el que tenga lo que tú deseas, en lugar de adaptarte a lo que te brinda determinado juego? Si estudias matemáticas, ¿influiría en algo que tuvieras un programa listo que graficara todas las funciones que desees, y así copiar o imprimir las gráficas hechas a tu manera? Si vendes productos, ¿sería mejor crear un programa que administrara eficientemente tus ventas? Si eres adicto a las redes sociales, ¿estoy en lo cierto que tener tu propia aplicación con las redes sociales que usas a diario sería lo mejor que podrías tener? Y así, puedo seguir dando muchos ejemplos.

Ahora, tengo otra buena noticia: ¡yo no crearé estos programas por ti! Y si lo hago, pues te cobro, pero no porque sepa más que tú, sino porque tu pereza no te deja hacerlo, y la pereza se paga de alguna manera. La información es gratis. Y si tampoco me crees, ¿por qué no buscas en Google (o en tu buscador favorito, yo recomiendo DuckDuckGo) información acerca de “Java”“iniciación a la programación”? Verás muchos resultados :)

Y para no hacer más larga la situación, te invito a que al menos intentes buscar información acerca de todo lo hablado aquí. Sería gratificante para mí que me comentaras qué lenguaje de programación hizo posible que estés leyendo este artículo. Que supieras que puedes crear juegos para móviles usando Java.

Espero haberte convencido de la importancia que tiene el aprender a programar. Y si no lo hice, pues pido disculpas por haberte hecho perder el tiempo leyendo esto. Aunque al menos agradece que se te fue la pereza.

Por cierto, si esto quedó muy corto, puedes contactarme directamente. Si deseas, en una próxima edición hago una iniciación a determinado lenguaje, o quizás ya me hayas ganado en la carrera del aprendizaje y quieras contribuir con esta página. ¡Buen día!

Separar palabras de una frase en Java

Estándar

Muchas veces nos vemos en la necesidad de separar una frase en palabras, para así poder comprobar con algún diccionario su correcta escritura, si son o no malas palabras, entre otros.

Java, por su parte, provee de muchas funciones para el tratamiento de esto. Dentro de ellas, podemos encontrar el método split de la clase String. También podemos hacerlo con expresiones regulares. Pero la verdad es que para los que somos principiantes en Java, nos es muy difícil conocer todo esto.

Es por ello, que aquí presento una forma simple de separar una frase en palabras, teniendo en cuenta las peculiaridades de una frase, y además pensando que la frase no contiene espacios por delante y por detrás. Si alguien logra mejorar esto, por favor publicarlo en los comentarios :)

package vectores;

import java.util.Scanner;

/**
 * Clase para separar palabras de una frase.
 * @author Bryan Horna <bryanjhv@gmail.com>
 *
 */
public class Separar {
	
	static Scanner sc = new Scanner(System.in); // El Scanner
	
	/**
	 * Separa la frase en palabras.
	 * @param s La cadena a separar.
	 * @return Cadena en partes.
	 */
	public static String[] separarFrase(String s) {
		int cp = 0; // Cantidad de palabras
		
		// Recorremos en busca de espacios
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == ' ') { // Si es un espacio
				cp++; // Aumentamos en uno la cantidad de palabras
			}
		}
		
		// "Este blog es genial" tiene 3 espacios y 3 + 1 palabras
		String[] partes = new String[cp + 1];
		for (int i = 0; i < partes.length; i++) {
			partes[i] = ""; // Se inicializa en "" en lugar de null (defecto)
		}
		
		int ind = 0; // Creamos un índice para las palabras
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) == ' ') { // Si hay un espacio
				ind++; // Pasamos a la siguiente palabra
				continue; // Próximo i
			}
			partes[ind] += s.charAt(i); // Sino, agregamos el carácter a la palabra actual
		}
		return partes; // Devolvemos las partes
	}
	
	public static void main(String[] args) {
		
		System.out.print("Ingrese una frase: ");
		String frase = sc.nextLine(); // Guardamos la frase o texto
		
		String[] p = separarFrase(frase); // Separamos palabras
		
		for (int i = 0; i < p.length; i++) {
			System.out.println("Parte " + (i + 1) + ": " + p[i]); // Mostramos
		}
		
	}
	
}

Como siempre, puedes descargar este código completo desde aquí.