Tracks
/
Julia
Julia
/
Temario
/
Fundamentos
Fu

Fundamentos en Julia

2 ejercicios

Acerca de Fundamentos

Julia es un lenguaje de programación dinámico y de tipado fuerte. El estilo de programación es principalmente funcional, aunque con más flexibilidad que en lenguajes como Haskell.

Hay un sistema de tipos potente y versátil, que cobrará importancia en conceptos posteriores. En la práctica, Julia normalmente inferirá un valor predeterminado adecuado a partir del contexto.

A pesar de su énfasis en la legibilidad, que hace que parezca un lenguaje de scripting como Python y Ruby, el código de Julia se compila antes de ejecutarse. El compilador Just In Time (JIT) produce código altamente optimizado para cada función a medida que se encuentra con ella, lo que da lugar a una gran velocidad de ejecución.

Julia no es un lenguaje orientado a objetos y no tiene una jerarquía de clases como la que es central en muchos otros lenguajes.

En su lugar (y, por favor, ¡no entres en pánico al leer esto!), Julia se apoya en:

  • Una jerarquía de tipos.
  • Funciones componibles (diseñadas para combinarse con facilidad, de maneras versátiles y potentes).
  • Despacho múltiple, que significa que las funciones se pueden llamar con un número y tipos de argumentos variables.

Estos términos algo confusos deberían quedar más claros a medida que avancemos por el temario.

La documentación oficial contiene mucha información valiosa para la versión actual, aunque puede resultar un poco abrumadora para principiantes.

Los videos incluyen:

Comentarios

Incluir comentarios en tu código es sumamente importante para ayudar a que las personas lean tu código y entiendan tus intenciones: quizás otras personas, pero también tu yo del futuro. El compilador los ignora (en su mayoría).

En Julia hay dos opciones posibles:

  • Los comentarios de una sola línea empiezan con #
  • Los comentarios de varias líneas empiezan con #= y terminan con =#. Se permite anidarlos.
# This is a single-line comment

x = 3  # This is an inline comment

#=
	Multi-line comments can be used for longer explanations.

	They are especially useful to comment out blocks of code during debugging.
=#

Variables y asignación

Para crear una variable, solo asígnale un valor:

julia> myvar = 42  # an integer (in fact, Int64)
42

julia> bigint = 1_234_567_890  # optionally use underscore as digit separator, for readability
1234567890

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

La asignación "vincula" un valor a la variable.

Especificar un tipo es opcional y, en la mayoría de los casos, Julia inferirá un valor predeterminado adecuado a partir del contexto.

Los tipos son un tema importante en Julia. Los exploraremos más a fondo en conceptos posteriores. Por ahora, lo mejor es no preocuparte por ellos.

A diferencia de muchos lenguajes funcionales, las variables en Julia se pueden reasignar, y eres libre de cambiar tanto el valor como el tipo vinculado a la variable:

julia> myvar = 3
3

julia> myvar = "now a string"
"now a string"

Constantes

Las variables globales, creadas fuera de cualquier función, son:

  • Permitidas.
  • A veces necesarias.
  • Normalmente desaconsejadas (aunque solo dentro de archivos *.jl; el REPL funciona de otra manera).

Si un valor necesita estar disponible en todo el programa, pero no se espera que cambie, usa mejor una constante.

Anteponer la palabra clave const a la asignación permite que el compilador genere código más eficiente.

Intentar cambiar el valor de const por accidente dará una advertencia:

julia> const answer = 42
42

julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24

Operadores aritméticos

La aritmética funciona en gran medida de la manera convencional:

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division)
8 % 3  # 2 (remainder)
2 ^ 3  # 8 (exponentiation)

Ten en cuenta que la división con / siempre da un valor de punto flotante.

Volveremos a esto en conceptos posteriores, donde hablaremos de la división entera con div() o ÷ para truncar, y // para obtener un número racional.

Funciones

Para obtener el mejor rendimiento en tiempo de ejecución, lo mejor es colocar la mayor parte del código dentro de funciones. Tener muchas funciones pequeñas está bien, a diferencia de lo que ocurre en algunos otros lenguajes.

Hay dos maneras comunes de definir una función con nombre en Julia:

  1. Usando la palabra clave function

    function muladd(x, y, z)
        x * y + z
    end
    

    La indentación de 4 espacios es lo convencional por legibilidad, pero el compilador la ignora. La palabra clave end es esencial: más parecido a Ruby que a Python.

    Ten en cuenta que podríamos haber escrito return x * y + z. Sin embargo, las funciones de Julia siempre devuelven la última expresión evaluada, así que la palabra clave return es opcional. Muchos programadores prefieren incluirla para dejar más explícitas sus intenciones.

  2. Usando la «forma de asignación»

    muladd(x, y, z) = x * y + z
    

    Esto se usa más que nada para definiciones de funciones de una sola línea o funciones matemáticas, donde el cuerpo de la función es una sola expresión. En la forma de asignación nunca se usa la palabra clave return.

Las dos formas son equivalentes y se usan exactamente de la misma manera, así que elige la que te resulte más legible.

Llamar a una función se hace especificando su nombre y pasando argumentos para cada uno de los parámetros de la función:

# invoking a function
muladd(10, 5, 1)

# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)

Por el hecho de que nos refiramos a estas como funciones «con nombre», podrías deducir que también existen las funciones «anónimas». Estas se tratarán en un concepto posterior.

Convenciones de nombres

Como muchos lenguajes, Julia exige que los nombres (de variables, funciones y muchas otras cosas) empiecen con una letra, seguida de cualquier combinación de letras, dígitos y guiones bajos.

Por convención, los nombres de variables, constantes y funciones se escriben en minúsculas, y se evitan los guiones bajos salvo cuando son necesarios para evitar confusión.

Sin embargo, Julia usa Unicode en todas partes, así que «letra» se interpreta con bastante flexibilidad.

Se admiten lenguajes distintos del inglés y también emojis (aunque, por favor, usa el buen gusto y elige algo apropiado).

En particular, están disponibles todas las letras griegas que adoran los matemáticos (y varios valores útiles vienen predefinidos):

julia> π   # a built-in constant
π = 3.1415926535897...

Los editores compatibles con Julia, entre ellos el REPL, Pluto.jl y VS Code con el complemento de Julia, facilitan la escritura de estos caracteres.

Para π, escribe \pi y luego presiona <Tab>. Lo que escribiste se reemplazará por el carácter griego.

Verás muchos más ejemplos de esto en conceptos posteriores.

De hecho, las abreviaturas con barra invertida no son algo exclusivo de Julia. Provienen de LaTeX, un sistema de composición tipográfica que muchos científicos e ingenieros usan casi a diario para escribir informes.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva

Aprende Fundamentos