No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Scala básico

Curso de Scala básico

Carlos Daniel Sanchez

Carlos Daniel Sanchez

Funciones totales y parciales

16/36
Recursos

Aportes 6

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Consideran que primero debería hacer el curso de Java? Es que me estoy perdiendo un montón en la sintaxis y lo resumidos que resultan los programas con Scala.

Me surgió la pregunta de: Si existen las funciones totales que nunca fallan ¿Cual es la razón por la que existen funciones parciales que pueden generar errores?

Navegando por internet encontré que las funciones parciales suelen tener nombres más explícitos como en los casos del manejo de listas en este video, por ejemplo, es más fácil identificar el primer elemento de la lista como el head o la cabeza de la lista. Pero esto de los nombres no me parece suficiente razón.

Entonces seguí buscando y también encontré que las funciones parciales sirve para representar funciones matemáticas que no son inyectivas (entradas diferentes pueden generar una misma salida) o el ejemplo más claro es para las funciones matemáticas que no son continuas. Por ejemplo, si quisieramos definir o modelar la función de arcoseno deberiamos usar una funcion parcial porque el arcoseno no esta definido en valores fuera de [-1, 1] y no tendría sentido dar una respuesta fuera de ese dominio.

Imagino que si por ejemplo estuvieramos programando una calculadora y modelaramos el arcoseno como una funcion total, al hacer una cuenta con el arcoseno de 2 y retornar un valor cualquiera haría que al final de todas las operaciones retornaramos un valor erroneo, mi conclusión es que algunas veces es mejor que el programa no de respuesta en vez de dar respuestas incorrectas xd. Es más, como las funciones parciales retornan errores y excepciones podríamos capturarlas y ser más precisos controlando en que contextos, para que datos de entrada funciona nuestro programa y que debería hacer si recibe un dato de entrada no válido para por ejemplo retroalimentar al usuario.

En el codigo en un momento colocaste a. head ( con espacio) y las demás veces colocaste por ejm b.tail ó b.take(1), probé con el espacio y funciona, suena algo raro de scala no?

Función total

Es una función que puede dar respuesta a todos los elementos de su dominio. Es decir, que sin importar la entrada, la función será capaz de responder apropiadamente.

Función parcial

Una función que puede dar respuesta a sólo algunos elementos de su dominio y a otros no. Hay que tener cuidado con funciones que no están bien definidas, o que son inseguras de usar por no ser totales

  • .get()
  • .head()
  • .tail()
  • .last()
val a = List(1,2,3)
//a: List[Int] = List(1,2,3)

a.head
//res: Int = 1

a.tail
//res: List[Int] = List(2,3)

val b = Nil

b.head //error, es parcial porque no responde satisfactoriamente a todos los datos
b.tail //mismo error

b.take(1)
//res: List[Nothing] = List()

b.drop(1)
//res: List[Int] = List(2,3)

Para saber si una funcion es parcial, podemos llamar el .head y si nos da una exception y esto quiere decir que es una funcion parcial ya que nos da una respuesta no satisfactoria

Funcion total, da respuesta a todo los elementos de su dominio o alcance, es diferente a una funcion parcial