2 Tipos de datos y variables
2.1 Tipos de datos numéricos
- Enteros:
Int64
(64 bits por defecto). - Racionales:
Rational{Int64}
. Utilizando el operador//
. - Reales:
Float64
(64 bits por defecto). - Complejos:
Complex{Int64}
. Utilizandoim
después de la parte imaginaria.
Para averiguar el tipo de un dato se utiliza la función typeof()
.
2.2 Ejemplos de tipos de datos numéricos
> typeof(3)
juliaInt64
> typeof(3/2)
juliaFloat64
> typeof(3//2)
juliaRational{Int64}
> typeof(π)
juliaIrrational{:π}
> typeof(3+2im)
juliaComplex{Int64}
2.3 Jerarquía de tipos de datos numéricos
2.4 Constantes predefinidas
Símbolo | Descripción |
---|---|
pi o π |
Número irracional \(\pi\) |
ℯ (\euler + TAB) |
Número irracional \(e\) |
Inf |
Infinito |
NaN |
Valor no numérico |
Missing |
Valor desconocido |
2.5 Ejemplo de constantes predefinidas
> π
juliaπ = 3.1415926535897...
> 1 / 0
juliaInf
> 0 / 0
juliaNaN
> Inf + Inf
juliaInf
> Inf - Inf
juliaNaN
> 0 * Inf
juliaNaN
2.6 Tipos de datos alfanuméricos
- Caracteres:
Char
. Se representan entre comillas simples. - Cadenas:
String
. Se representan entre comillas dobles.
> typeof('a')
juliaChar
> typeof("julia")
juliaString
> typeof("a")
juliaString
2.7 Tipo de datos booleanos
- Booleanos:
bool
. Son un subtipo de los enterosInteger
.
Solo contienen dos posibles valores: true
(1) y false
(0).
> typeof(true)
juliaBool
> typeof(false)
juliaBool
> typeof(1 < 2)
juliaBool
> true + true
julia2
2.8 Variables
Como lenguaje de tipado dinámico, no es necesario declarar una variable antes de usarla. Su tipo se infiere directamente del valor asociado.
> x = 1
julia1
> typeof(x)
juliaInt64
> x = "julia"
julia"julia"
> typeof(x)
juliaString
No obstante, para variables de ámbito local, por ejemplo en funciones, es posible fijar el tipo de una variable indicándolo detrás de su nombre con el operador ::
.
::Int64 x
2.9 Nombres de variables
Julia reconoce la codificación Unicode (UTF-8), lo que permite utilizar caracteres con tildes, letras griegas, símbolos matemáticos y hasta emoticonos en los nombres de variables o funciones. Para ello se utilizan códigos especiales (en muchos casos son los mismos que en LaTeX), pulsando después la tecla de tabulación.
> α = 1
julia1
> β = 2
julia2
> α + β
julia3
> 😄 = "julia"
julia"julia"
Distingue entre mayúsculas y minúsculas.
2.9.1 Caracteres Unicode
La siguiente tabla contiene algunos caracteres Unicode habituales
Código | Símbolo | Uso notes |
---|---|---|
\euler |
ℯ |
Constante de Euler e |
\pi |
π |
Constante \(pi\) |
\alpha |
α |
|
\beta |
β |
|
\delta |
δ |
|
\Delta |
Δ |
Variación |
\gamma |
γ |
|
\phi |
ϕ |
|
\Phi |
Φ |
|
x\_1 |
x₁ |
Subíndices |
x\^2 |
x² |
Superíndices |
r\vec |
r⃗ |
Notación para vectores |
T\hat |
T̂ |
Notación para vectores unitarios |
\partial |
∂ |
Notación para derivadas parciales |
\nabla |
∇ |
Notación para el gradiente |
\circ |
∘ |
Operador de composición |
\cdot |
⋅ |
Operador de producto escalar |
\times |
× |
Operador de producto vectorial |
Los operadores pueden necesitar paréntesis, como por ejemplo (f ∘ g)(x)
para la composición de g
con f
.
2.10 Operadores aritméticos
Operador | Descripción |
---|---|
x + y |
Suma |
x - y |
Resta |
x * y |
Producto |
x / y |
División |
x ÷ y |
Cociente división entera |
x % y |
Resto división entera |
x ^ y |
Potencia |
2.11 Operadores de comparación
Operador | Descripción |
---|---|
== |
Igualdad |
!= , ≠ |
Desigualdad |
< |
Menor que |
<= , ≤ |
Menor o igual que |
> |
Mayor que |
>= , ≥ |
Mayor o igual que |
2.12 Operadores booleanos
Operador | Descripción |
---|---|
!x |
Negación |
x && y |
Conjunción (y) |
x || y |
Disyunción (o) |
2.13 Funciones numéricas predefinidas
2.13.1 Funciones de redondeo
Función | Descripción |
---|---|
round(x) |
Devuelve el entero más próximo a x |
round(x, digits = n) |
Devuelve al valor más próximo a x con n decimales |
floor(x) |
Redondea x al próximo entero menor |
ceil(x) |
Redondea x al próximo entero mayor |
trunc(x) |
Devuelve la parte entera de x |
2.13.2 Ejemplo de funciones de redondeo
> round(2.7)
julia3.0
> floor(2.7)
julia2.0
> floor(-2.7)
julia-3.0
> ceil(2.7)
julia3.0
> ceil(-2.7)
julia-2.0
> trunc(2.7)
julia2.0
> trunc(-2.7)
julia-2.0
> round(2.5)
julia2.0
> round(2.786, digits = 2)
julia2.79
2.13.3 Funciones de división
Función | Descripción |
---|---|
div(x,y) , x÷y |
Cociente de la división entera |
fld(x,y) |
Cociente de la división entera redondeado hacia abajo |
cld(x,y) |
Cociente de la división entera redondeado hacia arriba |
rem(x,y) , x%y |
Resto de la división entera. Se cumple x == div(x,y)*y + rem(x,y) |
mod(x,y) |
Módulo con respecto a y . Se cumple x == fld(x,y)*y + mod(x,y) |
gcd(x,y...) |
Máximo común divisor positivo de x , y ,… |
lcm(x,y...) |
Mínimo común múltiplo positivo de x , y ,… |
2.13.4 Ejemplo de funciones de división
> div(5,3)
julia1
> cld(5,3)
julia2
> 5%3
julia2
> -5%3
julia-2
> mod(5,3)
julia2
> mod(-5,3)
julia1
> gcd(12,18)
julia6
> lcm(12,18)
julia36
2.13.5 Funciones para el signo y el valor absoluto
Función | Descripción |
---|---|
abs(x) |
Valor absoluto de x |
sign(x) |
Devuelve 1 si x es positivo, -1 si es negativo y 0 si es 0. |
> abs(2.5)
julia2.5
> abs(-2.5)
julia2.5
> sign(-2.5)
julia-1.0
> sign(0)
julia0
> sign(2.5)
julia1.0
2.13.6 Raíces, exponenciales y logaritmos
Función | Descripción |
---|---|
sqrt(x) , √x |
Raíz cuadrada de x |
cbrt(x) , ∛x |
Raíz cúbica de x |
exp(x) |
Exponencial de x |
log(x) |
Logaritmo neperiano de x |
log(b,x) |
Logaritmo en base b de x |
log2(x) |
Logaritmo en base 2 de x |
log10(x) |
Logaritmo en base 10 de x |
2.13.7 Ejemplo de raíces, exponenciales y logaritmos
> sqrt(4)
julia2.0
> cbrt(27)
julia3.0
> exp(1)
julia2.718281828459045
> exp(-Inf)
julia0.0
> log(1)
julia0.0
> log(0)
julia-Inf
> log(-1)
julia: DomainError with -1.0:
ERRORreturn a complex result if called with a complex argument.
log will only ...
> log(-1+0im)
julia0.0 + 3.141592653589793im
> log2(2^3)
julia3.0
2.13.8 Funciones trigonométricas
Función | Descripción |
---|---|
hypot(x,y) |
Hipotenusa del triángulo rectángulo con catetos x e y |
sin(x) |
Seno del ángulo x en radianes |
sind(x) |
Seno del ángulo x en grados |
cos(x) |
Coseno del ángulo x en radianes |
cosd(x) |
Coseno del ángulo x en grados |
tan(x) |
Tangente del ángulo x en radianes |
tand(x) |
Tangente del ángulo x en grados |
sec(x) |
Secante del ángulo x en radianes |
csc(x) |
Cosecante del ángulo x en radianes |
cot(x) |
Cotangente del ángulo x en radianes |
2.13.9 Ejemplo de funciones trigonométricas
> sin(π/2)
julia1.0
> cos(π/2)
julia6.123233995736766e-17
> cosd(90)
julia0.0
> tan(π/4)
julia0.9999999999999999
> tand(45)
julia1.0
> tan(π/2)
julia1.633123935319537e16
> tand(90)
juliaInf
> sin(π/4)^2 + cos(π/4)^2
julia1.0
2.13.10 Funciones trigonométricas inversas
Función | Descripción |
---|---|
asin(x) |
Arcoseno (inversa del seno) de x en radianes |
asind(x) |
Arcoseno (inversa del seno) de x en grados |
acos(x) |
Arcocoseno (inversa del coseno) de x en radianes |
acosd(x) |
Arcocoseno (inversa del coseno) de x en grados |
atan(x) |
Arcotangente (inversa de la tangente) de x en radianes |
atand(x) |
Arcotangente (inversa de la tangente) de x en grados |
asec(x) |
Arcosecante (inversa de la secante) de x en radianes |
acsc(x) |
Arcocosecante (inversa de la cosecante) de x en radianes |
acot(x) |
Arcocotangente (inversa de la cotangente) de x en radianes |
2.13.11 Ejemplo de funciones trigonométricas inversas
> asin(1)
julia1.5707963267948966
> asind(1)
julia90.0
> acos(-1)
julia3.141592653589793
> atan(1)
julia0.7853981633974483
> atand(tan(π/4))
julia45.0
2.14 Precedencia de operadores
De mayor a menor prioridad.
Categoría | Operadores | Asociatividad |
---|---|---|
Exponenciación | ^ |
Derecha |
Unarios | + - √ |
Derecha |
Fracciones | // |
Izquierda |
Multiplicación | * / % & \ ÷ |
Izquierda |
Adición | + - | |
Izquierda |
Comparaciones | > < >= <= == != !== |
|
Asignaciones | = += -= *= /= //= ^= ÷= %= |= &= |
Derecha |
2.15 Operaciones con cadenas
Las cadenas son secuencias de caracteres alfanuméricos del tipo char
entre dobles comillas.
Cada carácter tiene asociado un índice entero. El primer carácter de la cadena tiene índice 1.
Índice | 1 | 2 | 3 | 4 | 5 |
Cadena | j | u | l | i | a |
Podemos acceder a cada carácter usando su índice entre corchetes a continuación de la cadena:
s[i]
: Devuelve el carácter con índicei
en la cadenas
.
> c = "julia"
julia"julia"
> c[2]
julia'u': ASCII/Unicode U+0075 (category Ll: Letter, lowercase)
2.15.1 Acceso a caracteres Unicode
Sin embargo, como Julia permite caracteres Unicode, el índice de un carácter en una cadena, no siempre se corresponde con su posición en la cadena. Ello es debido a que la codificación UTF-8 no utiliza el mismo número de bytes para representar los caracteres Unicode. Mientras que los caracteres habituales del código ASCII (letras romanas y números árabes) solo necesitan un byte, otros caracteres como los símbolos matemáticos requieren más.
Índice | 1 | 4 | 5 | 6 | 9 |
Cadena | ∀ | x | ∃ | y |
2.15.2 Ejemplo de acceso a caracteres Unicode
> c = "∀x ∃y"
julia"∀x ∃y"
> c[1]
julia'∀': Unicode U+2200 (category Sm: Symbol, math)
> c[2]
julia: StringIndexError: invalid index [2],
ERROR1]=>'∀', [4]=>'x'
valid nearby indices [:
Stacktrace1] string_index_err(s::String, i::Int64)
[Base ./strings/string.jl:12
@ 2] getindex_continued(s::String, i::Int64, u::UInt32)
[Base ./strings/string.jl:233
@ 3] getindex(s::String, i::Int64)
[Base ./strings/string.jl:226
@ 4] top-level scope
[REPL[128]:1 @
2.15.3 Acceso a índices en cadenas
Las siguientes funciones permiten acceder a los índices de una cadena:
firstindex(c)
: Devuelve el índice del primer carácter de la cadenac
.lastindex(c)
: Devuelve el índice del primer carácter de la cadenac
.nextind(c, i)
: Devuelve el índice del carácter de la cadenac
que sigue al carácter con índicei
.prevind(c, i)
: Devuelve el índice del carácter de la cadenac
que sigue al carácter con índicei
.
2.15.4 Ejemplo de acceso a índices en cadenas
> firstindex(c)
julia1
> lastindex(c)
julia9
> c[9]
julia'y': ASCII/Unicode U+0079 (category Ll: Letter, lowercase)
> nextind(c,1)
julia4
> prevind(c, lastindex(c))
julia6
2.15.5 Subcadenas
Para obtener subcadenas se usan también los corchetes indicando los índices de inicio y fin separados por :
.
s[i:j]
: Devuelve la subcadena que va desde el índicei
al índicej
, ambos incluidos.
También se pueden obtener subcadenas con la siguiente función:
SubString(s, i, j)
: Devuelve la subcadena que va desde el índicei
al índicej
, ambos incluidos.
> c = "julia"
julia"julia"
> c[2:4]
julia"uli"
> SubString(c, 2, 4)
julia"uli"
2.16 Concatenación de cadenas
a * b
: Devuelve la cadena que resulta de concatenar las cadenasa
yb
.a ^ i
: Devuelve la cadena que resulta de repetir la cadenaa
el número de vecesi
.repeat(a, i)
: Devuelve la cadena que resulta de repetir la cadenaa
el número de vecesi
.
> a = "Hola"
julia"Hola"
> b = "Julia"
julia"Julia"
> a * b
julia"HolaJulia"
> b ^ 3
julia"JuliaJuliaJulia"
2.16.1 Interpolación de cadenas
En una cadena se pueden introducir variables o expresiones precedidas del símbolo $
, de manera que al evaluarlas julia sustituye la variable o expresión por su valor. Esto es muy util para formatear salidas.
> "1 + 2 = $(1 + 2)"
julia"1 + 2 = 3"
> s = "Julia"
julia"Julia"
> "Hola $s"
julia"Hola Julia"
2.16.2 Otras operaciones comunes con cadenas
length(c)
: Devuelve el número de caracteres de la cadenac
.findfirst(a, c)
: Devuelve el índice de la primera ocurrencia de la cadenaa
en la cadenac
. Sia
no es una subcadena dec
devuelve nada (tipoNothing
).findlast(a, c)
: Devuelve el índice de la última ocurrencia de la cadenaa
en la cadenac
. Sia
no es una subcadena dec
devuelve nada (tipoNothing
).findnext(a, c, i)
: Devuelve el índice de la primera ocurrencia de la cadenaa
en la cadenac
posterior al índicei
.findprev(a, c, i)
: Devuelve el índice de la última ocurrencia de la cadenaa
en la cadenac
anterior al índicei
.
2.16.3 Otras operaciones comunes con cadenas
occursin(a, c)
: Devuelvetrue
si la cadenaa
es una subcadena dec
, yfalse
en caso contrario.contains(c, a)
: Devuelvetrue
si la cadenaa
es una subcadena dec
, yfalse
en caso contrario.replace(c, a => b)
: Devuelve la cadena que resulta de sustituir la cadenaa
por lab
en la cadenac
.lowercase(c)
: Devuelve la cadenac
en minúsculas.uppercase(c)
: Devuelve la cadenac
en mayúsculas.prefix(c, a)
: Devuelvetrue
si la cadenaa
es un prefijo de la cadenac
.suffix(c, a)
: Devuelvetrue
si la cadenaa
es un sufijo de la cadenac
.split(c, a)
: Devuelve una lista con las cadenas que resulpan de partir la cadenac
por el delimitadora
.
2.16.4 Ejemplo de otras operaciones con cadenas
> c = "Hola Julia"
julia"Hola Julia"
> length(c)
julia10
> findfirst("a", c)
julia4:4
> findlast("Ju", c)
julia6:7
> findlast("x", c)
julia
> occursin("Julia", c)
juliatrue
> occursin("julia", c)
juliafalse
> replace(c, "a" => "o")
julia"Holo Julio"
> uppercase(c)
julia"HOLA JULIA"
> split(c, " ")
julia2-element Vector{SubString{String}}:
"Hola"
"Julia"
2.17 Entrada y salida por terminal
Las siguientes funciones muestran una cadena en la terminal:
print(c)
: Muestra por la terminal la cadenac
sin cambiar de línea.println(c)
: Muestra por la terminal la cadenac
y cambia de línea.
La siguiente función permite leer una línea de texto desde la terminal:
readline()
: Devuelve en una cadena una línea de texto introducida por el usuario en la terminal (hasta el carácter de cambio de línea\n
)
> print("¿Cómo te llamas?")
julia
¿Cómo te llamas?> nombre = readline()
julia
Alf "Alf"
> println("Hola $nombre")
julia Hola Alf
2.17.1 Conversión de cadenas en números
La función readline()
siempre devuelve una cadena aún cuando se pregunte al usuario por un valor numérico. Para convertir una cadena en un dato numérico se utiliza la siguiente función:
parse(tipo, c)
: Covierte la cadenac
a un número del tipo numéricotipo
, siempre que puedad realizarse la conversión.
> print("Introduce tu edad")
julia
Introduce tu edad> edad = parse(Int, readline())
julia18
18
> println("Vas a cumplir $(edad + 1) años")
julia19 años
Vas a cumplir
> typeof(edad)
juliaInt64