Preguntas sobre Programación Funcional y Declarativa

# Pregunta Respuesta
1 ¿Qué es la programación funcional? La programación funcional es un paradigma de programación que trata el cálculo como la evaluación de funciones matemáticas y evita el cambio de estado y los datos mutables.
2 ¿Cuál es un ejemplo de función pura en Java?
import java.util.function.Function;

public class FunctionalExample {
    public static void main(String[] args) {
        Function square = x -> x * x;
        System.out.println(square.apply(5));  // Output: 25
    }
}
3 ¿Cómo se usa una función pura en Python?
def square(x):
    return x * x

print(square(5))  # Output: 25
4 ¿Qué es una función pura en C#?
using System;

class Program {
    static void Main() {
        Func square = x => x * x;
        Console.WriteLine(square(5));  // Output: 25
    }
}
5 ¿Cómo se define una función pura en TypeScript?
const square = (x: number): number => x * x;
console.log(square(5));  // Output: 25
6 ¿Qué es la programación declarativa? La programación declarativa es un paradigma en el que se describe qué hacer en lugar de cómo hacerlo, especificando las propiedades y relaciones de los datos.
7 ¿Cómo se usa programación declarativa en Java con Streams?
import java.util.Arrays;

public class DeclarativeExample {
    public static void main(String[] args) {
        Arrays.asList(1, 2, 3, 4, 5).stream()
            .filter(x -> x % 2 == 0)
            .forEach(System.out::println);  // Output: 2, 4
    }
}
8 ¿Cómo se aplica programación declarativa en Python con list comprehensions?
evens = [x for x in range(1, 6) if x % 2 == 0]
print(evens)  # Output: [2, 4]
9 ¿Qué es un operador de alto orden en C#?
using System;
using System.Linq;

class Program {
    static void Main() {
        var numbers = new[] { 1, 2, 3, 4, 5 };
        var evens = numbers.Where(x => x % 2 == 0);
        foreach (var even in evens) {
            Console.WriteLine(even);  // Output: 2, 4
        }
    }
}
10 ¿Cómo se implementa programación declarativa en TypeScript con array methods?
const numbers = [1, 2, 3, 4, 5];
const evens = numbers.filter(x => x % 2 === 0);
console.log(evens);  // Output: [2, 4]
11 ¿Qué es un side effect y cómo se evita en programación funcional? Un side effect es cualquier cambio en el estado externo o en la interacción con el mundo exterior que ocurre durante la ejecución de una función. En programación funcional, se evita usando funciones puras que no alteran el estado y no tienen efectos secundarios.
12 ¿Cómo se evita el side effect en Java?
import java.util.function.Function;

public class SideEffectExample {
    public static void main(String[] args) {
        Function addFive = x -> x + 5; // No side effect
        System.out.println(addFive.apply(10));  // Output: 15
    }
}
13 ¿Cómo se evita el side effect en Python?
def add_five(x):
    return x + 5  # No side effect

print(add_five(10))  # Output: 15
14 ¿Cómo se evita el side effect en C#?
using System;

class Program {
    static void Main() {
        Func addFive = x => x + 5; // No side effect
        Console.WriteLine(addFive(10));  // Output: 15
    }
}
15 ¿Cómo se evita el side effect en TypeScript?
const addFive = (x: number): number => x + 5; // No side effect
console.log(addFive(10));  // Output: 15
16 ¿Qué son las funciones de orden superior? Las funciones de orden superior son funciones que pueden recibir otras funciones como argumentos o devolverlas como resultado.
17 ¿Cómo se define una función de orden superior en Java?
import java.util.function.Function;

public class HigherOrderFunctionExample {
    public static void main(String[] args) {
        Function multiplyBy = factor -> x -> x * factor;
        Function doubleValue = multiplyBy.apply(2);
        System.out.println(doubleValue.apply(5));  // Output: 10
    }
}
18 ¿Cómo se define una función de orden superior en Python?
def multiplier(factor):
    return lambda x: x * factor

double_value = multiplier(2)
print(double_value(5))  # Output: 10
19 ¿Cómo se define una función de orden superior en C#?
using System;

class Program {
    static void Main() {
        Func> multiplier = factor => x => x * factor;
        var doubleValue = multiplier(2);
        Console.WriteLine(doubleValue(5));  // Output: 10
    }
}
20 ¿Cómo se define una función de orden superior en TypeScript?
const multiplier = (factor: number) => (x: number): number => x * factor;
const doubleValue = multiplier(2);
console.log(doubleValue(5));  // Output: 10
21 ¿Qué son los "closures" y cómo se usan en programación funcional? Un closure es una función que captura y recuerda el entorno en el que fue creada, incluyendo las variables locales y parámetros, lo que permite acceder a esos valores fuera de su ámbito original.
22 ¿Cómo se usa un closure en Java?
public class ClosureExample {
    public static void main(String[] args) {
        int factor = 2;
        Function multiplier = x -> x * factor;
        System.out.println(multiplier.apply(5));  // Output: 10
    }
}
23 ¿Cómo se usa un closure en Python?
def make_multiplier(factor):
    def multiplier(x):
        return x * factor
    return multiplier

double_value = make_multiplier(2)
print(double_value(5))  # Output: 10
24 ¿Cómo se usa un closure en C#?
using System;

class Program {
    static void Main() {
        int factor = 2;
        Func multiplier = x => x * factor;
        Console.WriteLine(multiplier(5));  // Output: 10
    }
}
25 ¿Cómo se usa un closure en TypeScript?
const makeMultiplier = (factor: number) => (x: number): number => x * factor;
const doubleValue = makeMultiplier(2);
console.log(doubleValue(5));  // Output: 10
26 ¿Qué son las "monads" en programación funcional? Las monads son una abstracción que permite encadenar operaciones de manera que cada operación puede manejar su propio contexto, como errores o estados, de forma segura y sin efectos secundarios.
27 ¿Cómo se implementa una "monad" en Java?
import java.util.Optional;

public class MonadExample {
    public static void main(String[] args) {
        Optional result = Optional.of(5)
            .map(x -> x * 2)
            .map(x -> x + 3);
        System.out.println(result.orElse(0));  // Output: 13
    }
}
28 ¿Cómo se implementa una "monad" en Python?
from typing import Optional

result = Optional.of(5).map(lambda x: x * 2).map(lambda x: x + 3)
print(result.get_or_default(0))  # Output: 13
29 ¿Cómo se implementa una "monad" en C#?
using System;

class Program {
    static void Main() {
        var result = Optional.Of(5)
            .Map(x => x * 2)
            .Map(x => x + 3);
        Console.WriteLine(result.GetValueOrDefault(0));  // Output: 13
    }
}
30 ¿Cómo se implementa una "monad" en TypeScript?
class Maybe {
    constructor(private value: T | null) {}

    static of(value: U | null) {
        return new Maybe(value);
    }

    map(fn: (value: T) => U): Maybe {
        return this.value === null ? new Maybe(null) : new Maybe(fn(this.value));
    }

    getOrElse(defaultValue: T): T {
        return this.value === null ? defaultValue : this.value;
    }
}

const result = Maybe.of(5)
    .map(x => x * 2)
    .map(x => x + 3);

console.log(result.getOrElse(0));  // Output: 13
31 ¿Cómo se realiza el "currying" en Java?
import java.util.function.Function;

public class CurryingExample {
    public static void main(String[] args) {
        Function> multiply = x -> y -> x * y;
        System.out.println(multiply.apply(2).apply(3));  // Output: 6
    }
}
32 ¿Cómo se realiza el "currying" en Python?
def multiply(x):
    def inner(y):
        return x * y
    return inner

result = multiply(2)(3)
print(result)  # Output: 6
33 ¿Cómo se realiza el "currying" en C#?
using System;

class Program {
    static void Main() {
        Func> multiply = x => y => x * y;
        Console.WriteLine(multiply(2)(3));  // Output: 6
    }
}
34 ¿Cómo se realiza el "currying" en TypeScript?
const multiply = (x: number) => (y: number): number => x * y;
console.log(multiply(2)(3));  // Output: 6
35 ¿Qué es la "inmutabilidad" y cómo se aplica en programación funcional? La inmutabilidad es el concepto de que una vez creado un objeto o variable, su estado no puede cambiar. En programación funcional, se favorecen los datos inmutables para evitar efectos secundarios y mejorar la predictibilidad del código.
36 ¿Cómo se maneja la inmutabilidad en Java?
public final class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
37 ¿Cómo se maneja la inmutabilidad en Python?
from typing import NamedTuple

class ImmutablePerson(NamedTuple):
    name: str
    age: int

person = ImmutablePerson(name='John', age=30)
print(person.name)  # Output: John
38 ¿Cómo se maneja la inmutabilidad en C#?
public class ImmutablePerson {
    public string Name { get; }
    public int Age { get; }

    public ImmutablePerson(string name, int age) {
        Name = name;
        Age = age;
    }
}
39 ¿Cómo se maneja la inmutabilidad en TypeScript?
class ImmutablePerson {
    constructor(public readonly name: string, public readonly age: number) {}
}

const person = new ImmutablePerson('John', 30);
console.log(person.name);  // Output: John