1.defi.1 - Variables, constantes, literales y comentarios

Objetivos

1. Contenidos

1.1 ¿Qué son las variables?

Los programas trabajan continuamente con datos. Algunos datos llegan desde fuera del programa, como la edad de una persona, el precio de un producto o la nota de un examen. A estos datos los llamamos datos de entrada.

Otros datos son el resultado final que el programa debe mostrar o guardar, como el importe total de una factura, el sueldo final de un trabajador o un mensaje indicando si una persona es mayor de edad. A estos datos los llamamos datos de salida.

Además, durante la ejecución pueden aparecer datos intermedios, que no son la entrada ni la salida final, pero que ayudan a realizar los cálculos. Por ejemplo, antes de calcular el total de una factura podemos calcular primero el subtotal sin IVA.

Todos esos datos se guardan en la memoria del ordenador mediante variables. Podemos ver una variable como un espacio en memoria para guardar un dato.

Idea clave: una variable es como una caja con una etiqueta. La etiqueta es el nombre de la variable y dentro de la caja se guarda un valor.

Nombre, tipo y valor

Una variable tiene tres elementos fundamentales:

  • Nombre: identifica la variable dentro del programa. Por ejemplo: edad, precio o nombreCliente.
  • Tipo: indica qué clase de dato puede guardar. Por ejemplo: número entero, número decimal, texto o valor lógico.
  • Valor: es el dato concreto que contiene en un momento determinado. Por ejemplo: 18, 24.95, "Ana" o true.

Las variables pueden cambiar de valor durante la ejecución del programa. Cuando una variable recibe un nuevo valor, el valor anterior se pierde porque queda sustituido por el nuevo.

// En pseudocódigo
Algoritmo Variables_1
	
	Definir edad Como Entero
	edad <- 16
	Escribir edad
	
	edad <- 17
	Escribir edad
	
FinAlgoritmo
				

// En Java
Integer edad = 16;
System.out.println("Edad inicial: " + edad);

edad = 17;
System.out.println("Edad actual: " + edad);
				

En este ejemplo, la variable edad empieza guardando el valor 16. Después se le asigna el valor 17. A partir de ese momento, el valor anterior ya no está guardado en esa variable.

1.2 Tipos de datos

El tipo de dato indica qué clase de información puede guardar una variable y qué operaciones podemos hacer con ella. No es lo mismo sumar dos números que unir dos textos o comprobar si una condición es verdadera o falsa.

Tipo general Utilidad Ejemplos Tipo en PSeInt Tipo habitual en Java
Entero Guardar números sin decimales. 0, 12, -5 Entero int
Real Guardar números con decimales. 9.5, 19.99, -3.25 Real Double
Texto Guardar palabras, frases o cadenas de caracteres. "DAW", "Cliente", "Aprobado" Cadena o Caracter String
Lógico Guardar un valor verdadero o falso. Verdadero, Falso, true, false Logico Boolean

Importante: en Java los números decimales se escriben con punto, no con coma. Por ejemplo, se escribe 12.50, no 12,50.

Ejemplos

// En pseudocódigo
Definir unidades Como Entero
unidades <- 5
Definir precio Como Real
precio <- 19.99
Definir producto Como Texto
producto <- "Teclado"
Definir hayStock Como Lógico
hayStock <- Verdadero
				

// En Java
Integer unidades = 5;
Double precio = 19.99;
String producto = "Teclado";
Boolean hayStock = true;
				

1.3 Declaración de variables

Declarar una variable consiste en decirle al programa que queremos reservar un espacio en memoria para guardar un dato. Al declararla, normalmente indicamos su tipo y su nombre.

Declaración de variables en PSeInt

En PSeInt se utiliza la palabra Definir, el nombre de la variable y el tipo de dato.


Algoritmo EjemploDeclaracion
	Definir edad Como Entero
	Definir precio Como Real
	Definir nombre Como Cadena
	Definir aprobado Como Logico
FinAlgoritmo
				

Declaración de variables en Java

En Java escribimos primero el tipo de dato y después el nombre de la variable. La instrucción termina con punto y coma.


public class EjemploDeclaracion {
    public static void main(String[] args) {
        Integer edad;
        Double precio;
        String nombre;
        Boolean aprobado;
    }
}
				

Consejo: usa nombres claros. Es mejor escribir precioProducto que p, porque el código se entiende mejor.

1.4 Asignación de valores

Asignar un valor consiste en guardar un dato dentro de una variable. La asignación puede hacerse al mismo tiempo que se declara la variable o más adelante.

Cuando se asigna un nuevo valor a una variable, el valor anterior se sustituye.

Asignación en PSeInt

En PSeInt se suele utilizar el operador <- para asignar valores.


Algoritmo EjemploAsignacion
	Definir edad Como Entero
	Definir precio Como Real
	Definir nombre Como Cadena
	Definir aprobado Como Logico

	edad <- 18
	precio <- 24.95
	nombre <- "Laura"
	aprobado <- Verdadero

	edad <- 19
FinAlgoritmo
				

IMPORTANTE: En PSeInt se utiliza la "flecha hacia la izquierda" (<-) como operador de asignación para dejar claro que el valor a la derecha se asigna a la variable de la izquierda.

Asignación en Java

En Java se utiliza el operador = para asignar valores. Aunque se parece al símbolo matemático de igualdad, en programación significa: guarda el valor de la derecha dentro de la variable de la izquierda.


public class EjemploAsignacion {
    public static void main(String[] args) {
        Integer edad;
        Double precio;
        String nombre;
        Boolean aprobado;

        edad = 18;
        precio = 24.95;
        nombre = "Laura";
        aprobado = true;

        edad = 19;
    }
}
				

Declarar y asignar en una sola línea

En Java también podemos declarar una variable y asignarle un valor inicial en la misma instrucción.


Integer edad = 18;
Double precio = 24.95;
String nombre = "Laura";
Boolean aprobado = true;
				

1.5 Constantes y literales

Una constante es un valor con nombre que no debe cambiar durante la ejecución del programa. Se utiliza para representar datos fijos, como el IVA, el número máximo de intentos o la mayoría de edad.

En Java se crean constantes usando la palabra final. Por convención, los nombres de las constantes se escriben en mayúsculas y, si tienen varias palabras, se separan con guiones bajos.


final Double IVA = 0.21;
final Integer MAYORIA_EDAD = 18;
final String NOMBRE_CENTRO = "IES Castelar";
				

Si intentamos cambiar el valor de una constante, Java mostrará un error de compilación.


final Integer MAYORIA_EDAD = 18;

// Error: una constante no puede cambiar de valor
MAYORIA_EDAD = 21;
				

Literales

Un literal es un valor escrito directamente en el código. No tiene nombre propio, simplemente aparece tal cual en una instrucción.


Integer edad = 20;                     // 20 es un literal entero
Double precio = 15.75;             // 15.75 es un literal real
String nombre = "Carlos";          // "Carlos" es un literal de texto
Boolean activo = true;             // true es un literal lógico
char inicial = 'C';                 // 'C' es un literal de carácter
				

Diferencia: una constante tiene nombre y se puede reutilizar; un literal es el valor escrito directamente en el código.

1.6 Comentarios

Los comentarios son textos que escribimos dentro del código para explicar qué hace el programa. El ordenador los ignora al ejecutar el programa, pero ayudan a que una persona pueda entenderlo mejor.

Comentar el código es útil para explicar decisiones importantes, aclarar fórmulas, separar partes del programa o dejar anotaciones para futuras revisiones.

No abuses de los comentarios: un buen nombre de variable ya explica mucho. Es mejor escribir precioConIva que escribir x y añadir un comentario para explicar qué es.

Comentarios en PSeInt

En PSeInt se utiliza habitualmente // para escribir comentarios de una línea.


Algoritmo EjemploComentarios
	// Declaramos las variables necesarias
	Definir precio Como Real
	Definir iva Como Real
	Definir total Como Real

	// Asignamos valores de ejemplo
	precio <- 100
	iva <- 0.21

	// Calculamos el total con IVA
	total <- precio + precio * iva
FinAlgoritmo
				

Comentarios en Java

En Java existen tres formas habituales de comentar el código:

  • // para comentarios de una sola línea.
  • /* ... */ para comentarios de varias líneas.
  • /** ... */ para comentarios de documentación.

public class EjemploComentarios {
    public static void main(String[] args) {
        // Comentario de una línea
        Double precio = 100;
        Double iva = 0.21;

        /*
         * Calculamos el total sumando al precio
         * el importe correspondiente al IVA.
         */
        Double total = precio + precio * iva;

        System.out.println("Total: " + total);
    }
}
				

1.7 Ámbito de las variables

Llamamos ámbito de una variable a la parte del programa en la que esa variable puede utilizarse. En Java, el ámbito de una variable es el bloque (y los sub-bloques contenidos en él) en el que la variable ha sido definida.

Si una variable se declara dentro de un bloque, solo puede utilizarse dentro de ese bloque y en los bloques que estén contenidos dentro de él.


public class EjemploAmbito {
    public static void main(String[] args) {
        Integer a = 1;  // a está definida en el bloque principal
        System.out.println("a = " + a);

        {  // Sub-bloque
            Integer b = 2;
            System.out.println("b = " + b);
            System.out.println("a = " + ++a);  // a es accesible aquí
        }

        System.out.println("b = " + b);  // ERROR: b no está definida en este bloque
    }
}
				

Observa: la variable a está definida en el bloque principal, por eso puede usarse tanto dentro como fuera del sub-bloque. En cambio, la variable b está definida dentro del sub-bloque, por lo que solo puede usarse allí. Intentarla usar fuera produce un error de compilación.

1.8 Tipos primitivos

En Java existen dos formas de trabajar con tipos de datos numéricos y lógicos: los tipos primitivos y los wrappers (envoltorios).

Los tipos primitivos son los tipos básicos que vienen heredados de C. Los wrappers son clases que encapsulan esos valores primitivos, proporcionando métodos adicionales.

Tipo primitivo Wrapper (clase) Ejemplo
int Integer int edad = 25;
float Float float precio = 19.99f;
double Double double altura = 1.75;
boolean Boolean boolean activo = true;
char Character char inicial = 'A';

En este curso usaremos principalmente los wrappers (Integer, Double, etc.) porque ofrecen más funcionalidades y son más fáciles de usar. Sin embargo, es importante conocer los tipos primitivos porque aparecen frecuentemente en código de otros programadores.

2. Ejercicios

2.1 Presupuesto de reparación de un taller informático

Una empresa de mantenimiento informático necesita calcular el importe final de una reparación. El técnico cobra una cantidad fija por desplazamiento y otra cantidad por cada hora de trabajo. Además, al resultado se le aplica IVA.

Datos de prueba:

  • Nombre del cliente: "Academia Norte"
  • Horas de trabajo: 3
  • Precio por hora: 32.50 euros
  • Desplazamiento: 15.00 euros
  • IVA: 0.21

Se pide:

  1. Identifica las variables de entrada, las variables intermedias y las variables de salida.
  2. Indica el tipo de dato más adecuado para cada variable.
  3. Declara las variables en PSeInt y en Java.
  4. Asigna los valores de prueba usando literales.
  5. Calcula el subtotal, el importe de IVA y el total final.
  6. Muestra un resumen con el nombre del cliente, el subtotal y el total final.

Pista: puedes usar una constante para el IVA: final Double IVA = 0.21;

2.2 Cálculo de stock en una tienda online

Una tienda online quiere calcular cuántas unidades de un producto quedarán disponibles después de preparar varios pedidos. También necesita saber si, después de preparar los pedidos, el producto seguirá teniendo stock.

Datos de prueba:

  • Producto: "Ratón inalámbrico"
  • Stock inicial: 120 unidades
  • Unidades vendidas por la mañana: 35
  • Unidades vendidas por la tarde: 48
  • Stock mínimo recomendado: 20 unidades

Se pide:

  1. Identifica las variables de entrada, las variables intermedias y las variables de salida.
  2. Indica si cada variable debe ser de tipo entero, real, texto o lógico.
  3. Declara y asigna las variables en PSeInt.
  4. Declara y asigna las variables en Java.
  5. Calcula las unidades vendidas en total.
  6. Calcula el stock final.
  7. Calcula una variable lógica llamada hayStockSuficiente, que valga verdadero si el stock final es mayor o igual que el stock mínimo recomendado.
  8. Muestra el nombre del producto, el stock final y si hay stock suficiente.

Pista: en Java puedes calcular la variable lógica así: Boolean hayStockSuficiente = stockFinal >= STOCK_MINIMO;

3. Bibliografía