Funciones

Programación funcional y reactiva - Computación

Profesor: Ing. Santiago Quiñones

Docente Investigador

Departamento de Ingeniería Civil

Contenidos

Func. matemáticas hacia la programación funcional

Funciones matemáticas

Algo para recordar

Funciones matemáticas

Algo para recordar

Funciones matemáticas a código. Expresiones

Funciones matemáticas a código.

Funciones matemáticas a código.

Definir función que tome un entero n y calcule el factorial de n

Funciones matemáticas a código.

Definir función que tome un entero n y calcule el factorial de n

Otros casos

Otra forma de definir funciones

Un método puede tener varias listas de parámetros.

def add(x: Int, y: Int): Int = x + y

println(add(1, 2)) // 3

Otra forma de definir funciones

Los métodos también pueden tener expresiones de varias líneas.

def dividir(a: Int, b: Int): Int = {
  val dividendo = a
  val divisor = b
  dividendo / divisor
}

dividir(2, 3)

La ultima expresión en el cuerpo del método es el valor de retorno del mismo. (Scala tiene una palabra reservada return, pero se usa raramente y no se aconseja usarla)

Otra forma de definir funciones

Los métodos también pueden tener expresiones de varias líneas.

def isAdult(age: Int): Boolean = {
  if (age >= 18) {
    true // La persona es mayor de edad
  } else {
    false // La persona es menor de edad
  }
}

Otra forma de definir funciones

Las funciones se pueden simplificar en una expresión

def isAdult(age: Int): Boolean = if (age >= 18) true else false

Otra forma de definir funciones

Se puede realizar operaciones con cadenas

def countWithoutOpenVowels(word : String) : Int = { 
   word.toLowerCase.replaceAll("a", "").replaceAll("e", "").replaceAll("o", "").length
}

Otra casos de funciones matemáticas

Traducción matemática en código

Otra casos de funciones matemáticas

Traducción matemática en código

def g(n: Int) = (1 to n).map(k => k*k).sum

Funciones puras

Funciones puras

Antitesis

public class Counter {

    private int counter = 0;

    public int incrementCounter() {
        return ++counter;
    }

    public int multiplyCounter(int num) {
        counter *= num;
        return counter;
    }

    public int getCounter() {
        return counter;
    }
}

Funciones puras

Antitesis

Funciones puras

Principales características

Funciones puras

Implementación en Scala

object Counter {
  // Función pura que incrementa un contador
  def incrementCounter(counter: Int): Int = {
    counter + 1
  }

  // Función pura que multiplica el contador
  def multiplyCounter(counter: Int, num: Int): Int = {
    counter * num
  }

  // Función pura que devuelve el valor del contador (en este caso innecesario porque el valor del contador
  // no necesita una función, simplemente se usa directamente)
  def getCounter(counter: Int): Int = {
    counter
  }
}

// Uso de las funciones
val currentCounter = 5
val incremented = Counter.incrementCounter(currentCounter)
val multiplied = Counter.multiplyCounter(currentCounter, 2)

println(s"Incremented: $incremented")  // Imprimirá 6
println(s"Multiplied: $multiplied")    // Imprimirá 10

Funciones vs Métodos

Trabajo en grupo

Funciones matemáticas vs Métodos (Leng. Prog.)

Diferencias conceptuales

  • En matemáticas, una función no tiene "estado". Su única misión es transformar los valores de entrada en una salida. No existen efectos secundarios.
  • En los lenguajes de programación, un método podría modificar el estado interno de un objeto o tener efectos como imprimir en la consola o alterar el contenido de una variable externa.

Trabajo de consulta

Trabajo de consulta

¿Qué son las funciones anónimas?