Los constructores en Julia son funciones que se utilizan para crear objetos. Se utilizan específicamente para crear instancias de objetos de tipos compuestos. Un tipo compuesto es una colección de campos con nombre, que también se pueden tratar como valores únicos. Julia permite crear objetos de tipo como constructores cuando se asignan a un conjunto de valores de argumento pasados en forma de función. Un constructor trabaja en la estructura de datos básica conocida como estructura o Tipos en Julia. Un tipo se crea con el uso de una palabra clave predefinida ‘ struct
‘ .
struct Structure_name Field1 Field2 end constructor1 = Structure_name(value1, value2) constructor1.Field1 constructor1.Field2
Ejemplo:
# Creating a structure struct Geeks # Defining Fields x y end # Creating a constructor Geek_constructor = Geeks(10, 20) # Creating constructor objects Geek_constructor.x Geek_constructor.y
En el código anterior, cuando el constructor se crea con una función pasando valores de argumento, esos valores se instancian automáticamente en los campos de la estructura individualmente en el momento de la creación del objeto.
Tipos de constructores
Julia permite crear dos tipos de constructores en función de su comportamiento. Estos son:
- constructor exterior
- constructor interno
Constructor externo:
los métodos de constructor externo se definen fuera del bloque de declaración de tipo. Un constructor externo es como cualquier otra función en Julia, su funcionalidad depende de todos los métodos que se definen dentro de él. Se puede agregar una nueva funcionalidad a un constructor simplemente definiendo un nuevo método.
Ejemplo:
# Creating a structure struct Geeks x y end # Creating a constructor with # same value for both fields Geek_constructor(x) = Geeks(x, x) # Passing single argument Geek_constructor(10)
As in the above code, the constructor is created with one value and that single value is assigned to both the fields.
Hence, the constructor methods created like normal methods are called outer constructors. An outer constructor method can only create new instances by calling other constructors.
Constructor interno:
a diferencia del método de constructor externo en el que el constructor se puede definir en cualquier parte del código fuente como cualquier función normal, los constructores internos solo se pueden definir dentro del bloque de la declaración de tipo. Es como el método constructor externo, excepto que también puede acceder a una función predefinida especial denominada ‘ new
‘ . La definición de un constructor dentro del bloque de tipo restringirá la creación del objeto para que se vincule según la condición definida durante la creación del constructor.
Ejemplo:
# Defining type struct Geeks # Field x::Real # Creating Inner Constructor Geeks(x) = typeof(x) != Int64 ? error("Integer value not found") : new(x) end # Object Creation Geeks(10) Geeks(10.5)
Constructor paramétrico
Un tipo de constructor paramétrico es aquel en el que el tipo de datos de la estructura está predefinido en el momento de la declaración del tipo. Los campos de esta estructura están implícitos con un tipo de datos en el momento de la declaración de Tipo. En un constructor paramétrico, las llamadas al constructor en las que el tipo de parámetro se define explícitamente se convierten en tipos de campo implícitos. Por lo tanto, el tipo implícito en los parámetros en el momento de la llamada a la función debe coincidir; de lo contrario, se generará un error, pero cualquier par de valores con tipos coincidentes se puede pasar al constructor.
Ejemplo:
# Defining type struct Geeks{T <: Real} # Fields x::T y::T end # Creating Outer constructor Geeks(x::T, y::T) where {T<:Real} = Geeks{T}(x, y); # Constructor calling Geeks(10, 20) Geeks(10, 20.5)