005 Desarrollo
005.1 Desarrollo

Operaciones aritméticas

En esta sección, aprenderá sobre las diversas operaciones aritméticas que ofrece Dart, viendo cómo se aplican a los números. En capítulos posteriores, aprenderá sobre operaciones con tipos que van más allá de los números simples.

Operaciones simples

Cada operación en Dart utiliza un símbolo llamado operator para indicar el tipo de operación que realiza. Considera las cuatro operaciones aritméticas que aprendiste en la escuela: suma, resta, multiplicación y división. Para estas operaciones simples, Dart utiliza los siguientes operadores:

  • Add (Sumar): +

  • Subtract (Restar): -

  • Multiply (Multiplicar): *

  • Divide (Dividir): /

Estos operadores se utilizan de la siguiente manera:

2 + 6
10 - 2
2 * 4
24 / 3

Cada una de estas líneas es una expresión porque cada una puede calcularse hasta un valor. En estos casos, las cuatro expresiones tienen el mismo valor: 8. Observe cómo el código se parece a cómo escribiría las operaciones con lápiz y papel.

Compruebe las respuestas usted mismo en VS Code usando una declaración print:

print(2 + 6);
NoteNota:

Si imprime el resultado de la expresión 24 / 3 en VS Code, verá 8.0 en lugar de 8. Esto se debe a que la salida del operador de división es un double. Aprenderá más sobre double más adelante en este capítulo y en el Capítulo 3, “Tipos y Operaciones”.

Por otro lado, si imprimes 24/3 en https://dartpad.dev/, solo verás 8. Esto se debe a que en la web, Dart compila tu código en JavaScript, y JavaScript no diferencia entre 8 y 8.0.

Dart ignora los espacios en blanco, por lo que puedes eliminar los espacios que rodean al operador:

2+6

Sin embargo, suele ser más fácil leer expresiones cuando hay espacios en blanco a ambos lados. De hecho, la herramienta dart format del SDK de Dart formateará tu código según las reglas estándar de formato de espacios en blanco. En VS Code, puedes aplicar formato dart con el atajo de teclado Mayús+Opción+F en Mac o Mayús+Alt+F en PC. Dependiendo de la configuración de VS Code, al guardar el archivo también podría activarse un formato automático.

NoteNota:

Este libro no siempre le indicará explícitamente que print (X), donde X es alguna expresión de Dart que está aprendiendo, pero debe hacerlo usted mismo de manera proactiva para verificar el valor.

Números decimales

Todas las operaciones anteriores utilizan números enteros, más formalmente conocidos como integers (enteros). Sin embargo, como sabes, no todos los números son enteros.

Por ejemplo, considere lo siguiente:

22 / 7

Si estás acostumbrado a otro lenguaje que utiliza la división de números enteros de forma predeterminada, podrías esperar que el resultado sea 3. Sin embargo, Dart te da la respuesta decimal estándar:

3.142857142857143

Si realmente quisieras realizar una división de números enteros, podrías usar el operador ~/:

22 ~/ 7

Esto produce un resultado de 3.

El operador ~/ se denomina oficialmente operador de división truncada cuando se aplica a números. Si entrecierras los ojos, la tilde parece una trompa de elefante, así que eso podría ayudarte a recordar su función. O no.

La operación módulo euclidiano

Dart también ofrece operaciones más complejas. Todas son operaciones matemáticas estándar, aunque no tan comunes como las demás. Las veremos ahora.

La primera de ellas es la operación módulo euclidiana. Es un nombre complejo para una tarea sencilla. En la división, el denominador entra en el numerador un número entero de veces, más un residuo. Este residuo es lo que calcula la operación módulo euclidiana. Por ejemplo, 10 módulo 3 es igual a 1, porque 3 entra en 10 tres veces, con un residuo de 1.

En Dart, el operador de módulo euclidiano es el símbolo %. Se usa así:

28 % 10

En este caso, el resultado es 8, porque 10 cabe en 28 dos veces con un resto de 8.

Orden de operaciones

Por supuesto, es probable que al calcular un valor, quieras usar varios operadores. Aquí tienes un ejemplo de cómo hacerlo en Dart:

((8000 / (5 * 10)) - 32) ~/ (29 % 5)

Tenga en cuenta el uso de paréntesis, que en Dart cumplen dos propósitos: dejar claro a cualquier persona que lea el código (incluido usted mismo) lo que quiere decir y aclarar el orden de operaciones previsto.

Por ejemplo, considere lo siguiente:

350 / 5 + 2

¿Es esto igual a 72 (350 dividido entre 5, más 2) o a 50 (350 dividido entre 7)? Los que prestaron atención en la escuela gritan: “¡72!”. Y tienen razón.

Dart utiliza el mismo razonamiento y lo logra mediante la precedencia de operadores. El operador de división (/) tiene mayor precedencia que el operador de suma (+), por lo que, en este ejemplo, el código ejecuta primero la división.

Si quisiera que Dart realizara la suma primero (es decir, que la expresión devolviera 50 en lugar de 72), podría usar paréntesis, de la siguiente manera:

350 / (5+2)

Las reglas de precedencia son las mismas que aprendiste en la escuela. La multiplicación y la división tienen la misma precedencia. La suma y la resta tienen la misma precedencia, pero menor que la multiplicación y la división.

Los operadores ~/ y % tienen la misma precedencia que la multiplicación y la división. Si no está seguro de la precedencia de un operador, puede usar paréntesis para asegurarse de que la expresión se evalúe como desea.

Funciones matemáticas

Dart también cuenta con una amplia gama de funciones matemáticas. Nunca se sabe cuándo necesitarás ejercitar tus habilidades trigonométricas, especialmente si eres un experto en Dart y creas animaciones complejas.

Para utilizar estas funciones matemáticas, agregue la siguiente importación en la parte superior de su archivo:

import 'dart:math';

dart:math es una de las bibliotecas principales de Dart. Añadir la instrucción import indica al compilador que se desea usar algún elemento de esa biblioteca.

Ahora puedes escribir lo siguiente:

sin(45 * pi / 180)
// 0.7071067811865475

cos(135 * pi / 180)
// -0.7071067811865475

Estos convierten un ángulo de grados a radianes y luego calculan el seno y el coseno, respectivamente. Observa cómo ambos usan pi, una constante que Dart proporciona. ¡Genial!

NoteNota:

Recuerda que si quieres ver los valores de estas expresiones matemáticas, debes ponerlas dentro de una declaración print como esta:

print(sin(45 * pi / 180));

Luego está esto:

sqrt(2)
// 1.4142135623730951

Esto calcula la raíz cuadrada de 2.

Sería una pena no mencionarlos:

max(5, 10)
// 10

min(-5, -10)
// -10

Estos calculan el máximo y el mínimo de dos números respectivamente.

Si eres especialmente aventurero, incluso puedes combinar estas funciones de la siguiente manera:

max(sqrt(2), pi / 2)
// 1.5707963267948966

Ejercicio

Imprime el valor de 1 sobre la raíz cuadrada de 2. Confirma que es igual al seno de 45°.

Este es tu primer ejercicio. Puedes encontrar las respuestas en la carpeta desafío, dentro del material complementario que viene con este libro.