Errores al usar funciones y subprocesos

Al usar una función hay que llamarla con su nombre exacto y con el número de valores que espera. Y solo las funciones que devuelven un resultado pueden usarse dentro de una operación.

Qué significa

Error de escritura en la línea 6
'Doble' recibe 1 valor, pero se le dieron 2.

Una función es un pedazo de programa con nombre que recibe valores (los parámetros) y puede devolver un resultado. Pueden ser de Jaguar, como Raiz(x) o Longitud(texto), o tuyas, definidas con Funcion o SubProceso.

Antes de ejecutar, Jaguar revisa todas las llamadas del programa y avisa si algo no cuadra:

  • «… recibe 1 valor, pero se le dieron 2»: la llamada tiene más (o menos) valores que los parámetros de la función.
  • «No existe ninguna función llamada …»: el nombre no coincide con ninguna función de Jaguar ni tuya. Si hay una parecida, te sugiere cuál.
  • «… no devuelve ningún valor, así que no puede usarse dentro de una expresión»: usaste un subproceso (que solo hace cosas) como si diera un resultado.
  • «La función … ya fue definida en la línea …»: hay dos funciones con el mismo nombre.
  • «Después de 'Por' se esperaba 'Referencia' o 'Valor'»: en los parámetros, Por solo puede ir seguido de una de esas dos palabras.

Ejemplos y cómo arreglarlos

Más valores de los que recibe

Funcion resultado <- Doble(x)
    resultado <- x * 2
FinFuncion

Algoritmo usar_doble
    Escribir Doble(4, 5)
FinAlgoritmo

Error de escritura en la línea 6
'Doble' recibe 1 valor, pero se le dieron 2.

Doble tiene un solo parámetro, así que se llama con un solo valor:

Funcion resultado <- Doble(x)
    resultado <- x * 2
FinFuncion

Algoritmo usar_doble
    Escribir Doble(4)
FinAlgoritmo

Una función que no existe

Algoritmo raiz
    Escribir Raices(49)
FinAlgoritmo

Error de escritura en la línea 2
No existe ninguna función llamada 'Raices'.

La función de Jaguar para la raíz cuadrada es Raiz (también RC):

Algoritmo raiz
    Escribir Raiz(49)
FinAlgoritmo

Un subproceso usado como función

SubProceso Saludar(nombre)
    Escribir "Hola, ", nombre
FinSubProceso

Algoritmo saludo
    mensaje <- Saludar("Ana")
FinAlgoritmo

Error de escritura en la línea 6
'Saludar' no devuelve ningún valor, así que no puede usarse dentro de una expresión. Para que devuelva un valor defínela como 'Funcion resultado <- Saludar(...)'.

Un subproceso se llama solo, en su propia línea. Si necesitas un resultado para guardarlo, define una función con Funcion resultado <- Nombre(...):

SubProceso Saludar(nombre)
    Escribir "Hola, ", nombre
FinSubProceso

Algoritmo saludo
    Saludar("Ana")
FinAlgoritmo

Dos funciones con el mismo nombre

Funcion r <- Area(b, h)
    r <- b * h
FinFuncion

Funcion r <- Area(lado)
    r <- lado * lado
FinFuncion

Algoritmo areas
    Escribir Area(3, 4)
FinAlgoritmo

Error de escritura en la línea 5
La función 'Area' ya fue definida en la línea 1.

Cada función necesita un nombre distinto:

Funcion r <- AreaRectangulo(b, h)
    r <- b * h
FinFuncion

Funcion r <- AreaCuadrado(lado)
    r <- lado * lado
FinFuncion

Algoritmo areas
    Escribir AreaRectangulo(3, 4)
    Escribir AreaCuadrado(5)
FinAlgoritmo

Por qué aparece

  • Pasar más o menos valores de los que la función espera, a veces por una coma de más.
  • Escribir mal el nombre de la función, o usar el nombre que tiene en otro lenguaje (sqrt funciona, pero Raices no).
  • Confundir un SubProceso, que solo hace cosas, con una Funcion que devuelve un valor.
  • Copiar una función dos veces en el mismo archivo.

Preguntas frecuentes

¿Qué diferencia hay entre Funcion y SubProceso?

En Jaguar, como en PSeInt, una función que devuelve un valor se escribe Funcion resultado <- Nombre(parámetros), y se puede usar dentro de operaciones. Una sin resultado solo ejecuta pasos y se llama en su propia línea.

¿Qué funciones trae Jaguar?

Raiz, Abs, Redon, Trunc, Azar, Aleatorio, Longitud, Mayusculas, Minusculas, Subcadena, Concatenar, ConvertirANumero, ConvertirATexto, las trigonométricas (Sen, Cos, Tan…), Ln, Exp y la constante PI.

Sigue aprendiendo