Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Constantes con iota
Source Code

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18

Constantes con iota


Tiempo de lectura: 1 minutos

En el lenguaje de programación Go, iota es un identificador especial predeclarado incorporado que simplifica la definición de constantes incrementales.



Definir constantes

Es particularmente útil cuando necesitas definir una serie de constantes relacionadas que siguen un patrón predecible.

iota es una palabra clave en Golang que contiene un valor entero. Se utiliza normalmente en declaraciones de constantes para generar una serie de valores relacionados, que se incrementan en 1 para cada constante subsiguiente.

Dias de la semana

Podemos definir la secuencia de días de la semana, de manera que iota asigna los valores numéricos que representan cada constante:

const (
    Sunday    = iota // 0
    Monday    = iota // 1
    Tuesday   = iota // 2
    Wednesday = iota // 3
    Thursday  = iota // 4
    Friday    = iota // 5
    Saturday  = iota // 6
)

De hecho, no es necesario repetir iota:

const (
    Sunday = iota // 0
    Monday        // 1
    Tuesday       // 2
    Wednesday     // 3
    Thursday      // 4
    Friday        // 5
    Saturday      // 6
)

Obtenemos un mapeado entre las constantes y el valor que representan. El tipo de constante es un int pero podemos utilizar un tipo definido manualmente para aclarar un poco más.

type DayOfWeek int
const ( 
    Monday DayOfWeek = iota // 0 
    Tuesday                 // 1 
    Wednesday               // 2 
    Thursday                // 3 
    Friday                  // 4 
    Saturday                // 5 
    Sunday                  // 6 
)

Expresiones

Ahora, en vez de sumar 1 por defecto, se puede usar un expresión para tener una serie de valores más complicados.

const (
    _ = iota // Discard the first value (0)
    KB = 1 << (10 * iota) // 1 << (10 * 1)
    MB = 1 << (10 * iota) // 1 << (10 * 2)
    GB = 1 << (10 * iota) // 1 << (10 * 3)
    TB = 1 << (10 * iota) // 1 << (10 * 4)
    PB = 1 << (10 * iota) // 1 << (10 * 5)
)

La expresión 1 << (10 * iota) calcula esencialmente la potencia de 2 para el tamaño respectivo. las potencias de 2 simples sería esta:

const ( 
    FlagA = 1 << iota // 1  
    FlagB             // 2 
    FlagC             // 4 
)

Múltiples constantes

Se puede crear diferentes grupos de constantes en el mismo bloque de programa. iota se reinicia en cada bloque const()

const (
    UNCERO = iota // 0
    UNUNO         // 1
)

const (
    OTROCERO = iota // 0
    OTROUNO         // 1
)

Evitar el cero

Podemos evitar el valor inicial de cero de dos formas:

const (
	_ = iota
	primero    // 1
	segundo    // 2
	tercero    // 3
)

O bien

const (
	primero = iota + 1  // 1
	segundo             // 2
	tercero             // 3
)

Saltar valores

Se puede hacer que se salten algunos valores que no sean necesarios. Por ejemplo, podemos asignar valores 1, 2, 3 a las constantes de colores:

const (
	_ = iota
	rojo       // 1
	verde      // 2
	azul       // 3
)

Podemos asignar los valores 1, 3, 5

const (
	_ = iota
	rojo       // 1
	_
	verde      // 3
	_
	azul       // 5
)

En grupo

También asigna por pares, si le definimos la regla para ir asignando cada una de las constantes del par:

const (
	alto, bajo int = iota + 2, iota + 3
	cerca, lejos
	izquierda, derecha
)

Da como resultado

alto  = 2, bajo = 3
cerca = 3, lejos = 4
izquierda = 4, derecha = 5

Cuándo no usarlo

Las constantes generadas de esta forma dinámica no se deben utilizar en caso que sean exportadas para prevenir que se hagan cambios en las constantes


Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 10

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 21
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post


Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/footer.inc.php on line 24