En el ámbito de la programación, los números son comunes. Se utilizan para representar aspectos como dimensiones de tamaños de pantalla, ubicaciones geográficas, dinero y puntos, el tiempo transcurrido de un video, posiciones de avatares, colores mediante la asignación de códigos numéricos, entre otros.
En el sector de la programación, desarrollar la capacidad de realizar operaciones matemáticas de forma eficaz es importante debido a la frecuencia con la que se trabaja con números. Si bien tener conocimientos matemáticos avanzados ciertamente puede servirle a programar mejor, no es un requisito previo. Si no tiene conocimientos matemáticos previos, trate concebir la matemática como una herramienta para lograr sus objetivos y como una forma de mejorar su pensamiento lógico.
Trabajaremos con dos de los tipos de datos numéricos más utilizados en Go: enteros y flotantes:
-1
, 0
, 1
,…).9.0
o -2.25
.En este tutorial, analizaremos los operadores que podemos usar con tipos de datos numéricos en Go.
Un operador es un símbolo o una función que indica una operación. Por ejemplo, en matemática, el signo más o +
es el operador que indica suma.
En Go, veremos algunos operadores conocidos que provienen de la matemática. Sin embargo, otros operadores que usaremos son específicos de la programación informática.
A continuación, se muestra una tabla de referencia rápida de los operadores relacionados con la matemática que se usan en Go. En este tutorial se abarcan todas las funciones que se indican a continuación.
Operación | Lo que muestra |
---|---|
x + y |
Suma de x e y |
x - y |
Diferencia entre x e y |
-x |
Cambio de signo de x |
+x |
Identidad de x |
x * y |
Producto de x e y |
x / y |
Cociente de x e y |
x % y |
Resto de x e y |
También veremos los operadores de asignación compuestos, como +=
y *=
, en los que se combinan un operador aritmético con el operador =
.
En Go, los operadores de resta funcionan con los mismos principios que la operación matemática. De hecho, puede usar el lenguaje de programación Go como una calculadora.
Veamos algunos ejemplos, comenzando por los enteros:
fmt.Println(1 + 5)
Output6
En lugar de pasar enteros directamente a la instrucción fmt.Println
, podemos inicializar variables que representen valores enteros usando sintaxis como la siguiente:
a := 88
b := 103
fmt.Println(a + b)
Output191
Debido a que los números enteros pueden ser tanto positivos como negativos (y también 0), podemos añadir un número negativo con uno positivo:
c := -36
d := 25
fmt.Println(c + d)
Output-11
La adición se comportará de manera similar con los flotantes:
e := 5.5
f := 2.5
fmt.Println(e + f)
Output8
Debido a que añadimos dos flotantes juntos, Go devolvió un valor flotante con un decimal. Sin embargo, como la posición decimal es cero en este caso, fmt.Println
no utilizó el formato decimal. Para darle al resultado el formato adecuado, podemos utilizar fmt.Printf
y el verbo %.2f
, que dará el formato de dos posiciones decimales, como se indica en este ejemplo:
fmt.Printf("%.2f", e + f)
Output8.00
La sintaxis para la resta es la misma que la de la suma, con la excepción de que cambiamos nuestro operador de signo más (+
) por el de signo menos (-
):
g := 75.67
h := 32.0
fmt.Println(g - h)
Output43.67
En Go, solo podemos usar operadores en los mismos tipos de datos. No podemos añadir un int
y un float64
:
i := 7
j := 7.0
fmt.Println(i + j)
Outputi + j (mismatched types int and float64)
Si se intenta usar operadores en tipos de datos que no son los mismos se producirá en error de compilación.
Las expresiones matemáticas unarias constan de un solo componente o elemento. En Go, podemos usar los signos más y menos como elementos únicos en combinación con un valor para mostrar la identidad del valor (+
) o cambiar el signo del valor (-
).
Aunque no se utiliza comúnmente, el signo más indica la identidad del valor. Podemos usar el signo más con valores positivos:
i := 3.3
fmt.Println(+i)
Output3.3
Cuando usamos el signo más con un valor negativo, también devuelve la identidad de ese valor, pero en este caso será negativo:
j := -19
fmt.Println(+j)
Output-19
Con un valor negativo, el signo más devuelve el mismo valor negativo.
Sin embargo, el signo menos cambia el signo de un valor. Por lo tanto, al pasar un valor positivo, notaremos que el signo menos antes del valor mostrará un valor negativo:
k := 3.3
fmt.Println(-k)
Output-3.3
De forma alternativa, al usar el operador unario de signo menos con un valor negativo, se muestra un valor positivo:
j := -19
fmt.Println(-j)
Output19
Las operaciones aritméticas unarias indicadas por el signo más y el signo menos devolverán la identidad del valor, como en el caso de +i
, o el signo opuesto del valor, como sucede con -i
.
Al igual que la suma y la resta, la multiplicación y la división tienen un funcionamiento muy similar al de las operaciones matemáticas. El signo que usaremos en Go para multiplicar es *
y el signo para dividir es /
.
Aquí tenemos un ejemplo de cómo hacer una multiplicación en Go con dos valores flotantes:
k := 100.2
l := 10.2
fmt.Println(k * l)
Output1022.04
En Go, la división tiene características diferentes según el tipo numérico que dividamos.
Si dividimos enteros, el operador /
de Go realiza una división de piso, en la que, para el cociente x, se muestra el número entero más grande menor o igual que x.
Si ejecuta el siguiente ejemplo de división 80 / 6
, obtendrá 13
como resultado y el tipo de datos será int
:
package main
import (
"fmt"
)
func main() {
m := 80
n := 6
fmt.Println(m / n)
}
Output13
Para obtener un flotante como resultado, debe convertir los valores de forma explícita antes de la división.
Puede hacerlo envolviendo sus valores con el tipo de flotante que desee, float32()
o float64()
:
package main
import (
"fmt"
)
func main() {
s := 80
t := 6
r := float64(s) / float64(t)
fmt.Println(r)
}
Output13.333333333333334
El operador %
es el módulo, que muestra el resto en lugar del cociente después de la división. Esto es útil para encontrar números que son múltiplos de un mismo número.
Veamos un ejemplo del módulo:
o := 85
p := 15
fmt.Println(o % p)
Output10
Para desglosarlo, de la división de 85
por 15
se obtiene el cociente 5
con un resto de 10
. Aquí, nuestro programa muestra el valor 10
porque el operador de módulo muestra el resto de una expresión de división.
Para hacer cálculos con módulos con tipos de datos float64
, usará la función Mod
del paquete math
:
package main
import (
"fmt"
"math"
)
func main() {
q := 36.0
r := 8.0
s := math.Mod(q, r)
fmt.Println(s)
}
Output4
En Go, al igual que en la matemática, debemos tener en cuenta que los operadores se evaluarán en orden de prioridad, no de izquierda a derecha o de derecha a izquierda.
Si observamos la siguiente expresión matemática:
u = 10 + 10 * 5
Podemos leerla de izquierda a derecha, pero la multiplicación se realizará primero. Por lo tanto, si imprimiéramos u
obtendríamos el siguiente valor:
Output60
Esto se debe a que 10 * 5
da como resultado 50
, y luego sumamos 10
para obtener 60
como resultado final.
Si, como alternativa, queremos sumar el valor 10
a 10
y luego multiplicar esa suma por 5,
en Go debemos usar paréntesis tal como lo haríamos en el campo de la matemática:
u := (10 + 10) * 5
fmt.Println(u)
Output100
Una opción para recordar el orden de las operaciones es el acrónimo PEMDAS:
Orden | Letra | Representa |
---|---|---|
1 | P | Paréntesis |
2 | E | Exponente |
3 | M | Multiplicación |
4 | D | División |
5 | A | Suma |
6 | S | Resta |
Es posible que esté familiarizado con otros acrónimos, como BEDMAS o BODMAS, para recordar el orden de las operaciones. Sea cual sea el acrónimo que le resulte más útil, intente tenerlo en cuenta al realizar operaciones matemáticas en Go para obtener los resultados esperados.
El operador de asignación más frecuente es uno que ya utilizó: el signo igual =.
El operador =
le asigna el valor de la derecha a una variable a la izquierda. Por ejemplo, v = 23
asigna el valor del número entero 23
a la variable v
.
Durante la programación, es común usar operadores de asignación compuestos que realizan una operación en el valor de una variable y luego asignan el valor nuevo resultante a esa variable. Estos operadores compuestos combinan un operador aritmético con el operador =
Por lo tanto, para la adición, combinaremos +
con =
para obtener el operador compuesto +=
. Observemos cómo se ve:
w := 5
w += 1
fmt.Println(w)
Output6
Primero, configuramos la variable w
equivalente al valor de 5
, luego usamos el operador de asignación +=
para sumar el número de la derecha al valor de la variable izquierda y, a continuación, asignamos el resultado a w
.
Los operadores de asignación compuestos se utilizan frecuentemente en los
bucles for, que emplearemos cuando queramos repetir un proceso varias veces:
package main
import "fmt"
func main() {
values := []int{0, 1, 2, 3, 4, 5, 6}
for _, x := range values {
w := x
w *= 2
fmt.Println(w)
}
}
Output0
2
4
6
8
10
12
Usando un bucle for
para iterar el elemento llamado values
, pudo automatizar el proceso del operador *=
, que multiplicó la variable w
por el número 2
, y luego volvió a asignar el resultado a la variable w
.
Go cuenta con un operador de asignación compuesto para cada uno de los operadores aritméticos que se analizan en este tutorial.
Para sumar y luego asignar el valor:
y += 1
Para restar y luego asignar el valor:
y -= 1
Para multiplicar y luego asignar el valor:
y *= 2
Para dividir y luego asignar el valor:
y /= 3
Para mostrar el resto y luego asignar el valor:
y %= 3
Los operadores de asignación compuestos pueden ser útiles cuando se debe realizar un aumento o una reducción incremental o cuando se deben automatizar determinados procesos de un programa.
En este tutorial, se analizaron muchos de los operadores que usará con los tipos de datos numéricos enteros y flotantes. Puede aprender más sobre los diferentes tipos de datos en Información sobre tipos de datos en Go y Cómo convertir tipos de datos.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!