Tabla comparativa de C# vs Clojure

Esta tabla solo destaca algunas diferencias claves entre los lenguajes de programación C# y Clojure

CaracterísticaC#Clojure
Año de lanzamiento 20002007
Desarrollador Anders Hejlsberg (microsoft)Richard Hickey
TipadoEstáticoDinámico
Paradigma multiparadigma, POO y funcional Funcional, multiparadigma
Sintaxis básicaOrientada a objetosBasada en paréntesis
crear variable
    //Declaracion de variables
    string Nombre  = "Miguel";
    var edad = 35;
    string direccion1, direccion2;
    bool TienePC = true;
(def nombre "Paulina")
 
(def edad 27)
 
(def TienePc true)
concatenación de strings    Console.WriteLine("Nombre: " + Nombre);
    Console.WriteLine($"Edad: {edad}");
(str "Hola" " " "mundo") ; Devuelve "Hola mundo"

(require '[clojure.string :as str])
(str/join " " ["Hola" "mundo"]) ; Devuelve "Hola mundo"
comentarios //Declaracion de variables
comentarios multilinea:
    /*
    Se declaran los metodos aqui
    estos metodos
    */
; Esto es un comentario en una línea
(defn calcular-promedio [numeros]
; Calcula el promedio de una lista de números
(let [suma (apply + numeros)
cantidad (count numeros)]
(/ suma cantidad))) ; Devuelve el promedio
Funciones anónimasPermite la creación de funciones anónimas utilizando la expresión lambda '=>' y el tipo 'Func'.Permite la creación de funciones anónimas utilizando la macro 'fn' o la función '#()'.
InmutabilidadMutabilidad predeterminada, se pueden usar palabras clave como 'readonly' para hacer que los miembros de clase sean inmutables.Inmutabilidad predeterminada
ColeccionesArrays, Listas, Diccionarios, etc.Listas, Vectores, Mapas, Conjuntos, etc.
IteraciónBucles tradicionales comofor', ‘while' yforeach' para la iteración de colecciones.Utiliza funciones de orden superior comomap', 'filter', 'reduce' para iterar y transformar colecciones.
NullabilidadNull y referencias nulasSin referencias nulas, utiliza el valor 'nil' para representar la ausencia de valor.
HilosProgramación multiproceso a través de hilos y proporciona bibliotecas como 'System.Threading' para manejar la concurrencia.Programación concurrente, utiliza macros como 'pmap' para aprovechar la concurrencia en operaciones de colecciones.
Sintaxis de funciónTipo NombreFunción(Parámetros)
public string GetName()
(defn NombreFunción [Parámetros])

defn getName()
Manejo de erroresUtiliza excepciones para el manejo de errores, permite capturar y lanzar excepciones utilizando bloques 'try-catch-finally'.Utiliza excepciones para el manejo de errores, pero también utiliza valores especiales como 'nil' o ':error' para representar resultados no exitosos.

Referencia: https://www.youtube.com/watch?v=2D8V50NWVnk&ab_channel=Mteherandev

Recuerda siempre seguir aprendiendo con mis cursos en mteheran.dev/cursos