es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando funciones puras en una declaración constante

Si tengo esta función pura:

func PureFunction(x int) string {
    switch x {
    case 0:
        return "Cadena cero"
    case 4:
        return "Cadena cuatro"
    default:
        return "Cadena por defecto"
    }
}

y quiero usarla en una declaración constante como esta:

const str1 = PureFunction(0)
const str1 = PureFunction(4)
const str1 = PureFunction(5)

Obtengo los errores:

PureFunction(0) (valor de tipo string) no es constante
PureFunction(4) (valor de tipo string) no es constante
PureFunction(5) (valor de tipo string) no es constante

En teoría, el compilador debería ser capaz de ver que estos valores son constantes.

¿Existe alguna forma de hacer algo así? ¿Como definir la función como pura o algún otro truco para ayudar al compilador?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no hay forma de definir la función como “pura” o usar cualquier otro truco para ayudar al compilador con este escenario específico. La razón es que la declaración de constantes en Go requiere un valor que pueda determinarse en tiempo de compilación, y la llamada a la función PureFunction(x) no puede determinarse en tiempo de compilación porque depende del valor de x.

    Sin embargo, hay una solución alternativa que puedes utilizar. En lugar de usar la llamada a la función directamente en la declaración de la constante, puedes crear una constante separada para cada valor de x que deseas usar, de esta manera:

    const str1 = "Cadena cero"
    const str2 = "Cadena cuatro"
    const str3 = "Cadena predeterminada"
    

    Luego, puedes utilizar estas constantes en las partes relevantes de tu código, de esta manera:

    func MyFunction(x int) {
        var str string
        switch x {
        case 0:
            str = str1
        case 4:
            str = str2
        default:
            str = str3
        }
        // haz algo con str
    }
    

    De esta manera, evitas el problema con la declaración de la constante y aún obtienes el beneficio de utilizar un valor constante en lugar de una cadena literal codificada.

Comments are closed.