Ir al contenido principal

Una introducción a Clojure

Clojure es un lenguaje de programación funcional que corre bajo la JVM, se considera un dialecto de Lisp.

Este lenguaje sigue el paradigma de la programación funcional, el cual que trata la computación como la evaluación de funciones matemáticas y evita cambiar el estado y los datos mutables. La programación funcional se enfoca en la inmutabilidad, las funciones puras y la composición de funciones para crear software robusto y mantenible.


¿Cómo ejecuto un programa en Clojure (desde la terminal de comandos)?
java -jar clojure_version.jar Programa.cjl

La extensión del archivo es *.clj

¿Cómo quedaría el "hola mundo" en Clojure?
Creamos un archivo llamado holamundo.clj escribimos lo siguiente:

;; esto es un comentario
(println "hola mundo!")

Lo ejecutamos:
java -jar clojure_version.jar holamundo.clj

Tenemos nuestro primer script en este lenguaje.

REPL (Read Eval Print Loop) en Clojure

Para entrar al REPL debes teclear:
java -jar clojure_version.jar

Saldrá algo como esto:

Clojure 1.5.1
user => 

Ya puedes comenzar haciendo pruebas.

user => (println "hola mundo") 
hola mundo
nil
user => (+ 3 4 5)
12
user => (* 4 (+ 5 6) )
44
user => (def cadena "Una introduccion a Clojure")
#' user/ cadena
user => (println cad)
Una introduccion a Clojure 
nil

Para salir teclea Ctrl + C en Windows, y Ctrl + D en Linux.

A mi parecer Clojure es un lenguaje algo complejo, como lo puede ser el uso de paréntesis, los operadores,definir variables y funciones. Pero no es imposible de aprender. Tan solo hay que practicar bastante.

Actualización:

Clojure

Programando en Clojure

Clojure is a robust, practical, and fast programming language with a set of useful features that together form a simple, coherent, and powerful tool.

holamundo.clj

(println "Hola, mundo en Clojure!!")

Ejecutar programa en Clojure

$ java -jar clojure.jar programa.clj

Instalando Cluojure

# 1. Dependencias
sudo apt-get install -y bash curl rlwrap
# 2. Descargar script
curl -O https://download.clojure.org/install/linux-install-1.10.2.774.sh
# 3. Permisos de jecución
chmod +x linux-install-1.10.2.774.sh
# 4. Ejecutar instalador
sudo ./linux-install-1.10.2.774.sh
# 5. Verificar instalación
clj
clj programa.clj

Actualmente hay editores de código que permiten crear aplicaciones con este lenguaje como:

  1. https://cider.mx/
  2. https://github.com/ccw-ide
  3. https://code.visualstudio.com/

Sitios:

view raw README.md hosted with ❤ by GitHub
(ns bisiesto)
(comment
@author Fer Carraro
)
;;defino una función para calcular el año bisiesto
(defn esbisisesto? [a]
(cond (= (mod a 4) 0) (and (= (mod a 100) 0) (= (mod a 400) 0)) :else false);;fin cond1
);;fin funcion
;;bloque principal del programa
(try
(println "Introduce año:")
(def anyo (Integer/parseInt (read-line)))
(if (= (esbisisesto? anyo) true) (println anyo" es año bisiesto") (println anyo" no es año bisiesto"));;fin if
(catch Exception e (prn "Error en "e))
)
view raw bisiesto.clj hosted with ❤ by GitHub
(ns cadenas)
(def cadena "Esta es una variable String" "ABC")
(println "Texto: "cadena)
(println "Length: "(.length cadena))
(println "Uppercase: "(.toUpperCase "abc"))
(println "Lowercase: "(.toLowerCase cadena ))
(println "CharAt[1]: "(.charAt cadena 1))
(def myvector ["A" "B" "C" "D"])
(println "Vector: "myvector)
(println "IndexOf[A]: " (.indexOf myvector "A"))
(println "IndexOf[B]: " (.indexOf myvector "B"))
(println "IndexOf[C]: " (.indexOf myvector "C"))
(defn esMayor? "Mi Funcion Booleana" [entrada]
(if (> (.length entrada) 10) "Si" "No")
)
(def nombre "Mi variable nombre" "Fernando")
(def ferrocarrilero "Mi variable ferrocarrilero" "ferrocarrilero")
(println "La cadena '"cadena "' tiene una longitud mayor a 10?: "(esMayor? cadena))
(println "La cadena '"nombre "' tiene una longitud mayor a 10?: "(esMayor? nombre))
(println "La cadena '"ferrocarrilero"' tiene una longitud mayor a 10?: "(esMayor? ferrocarrilero))
view raw cadenas.clj hosted with ❤ by GitHub
(ns cuadrado)
(import '(javax.swing JOptionPane));'
(defn introduceDato [s]
(JOptionPane/showInputDialog
(str s)
)
)
(def numero(introduceDato "Introduce numero:"))
;;convertir String a número
(defn String->Number [str]
(let [n (read-string str)]
(if (number? n) n nil)))
;;función cuadrado
(defn cuadrado [n]
(* n n)
)
;;'main' del programa
(try
(JOptionPane/showMessageDialog nil,
(str "El numero introducido es: "numero)
)
(JOptionPane/showMessageDialog nil,
(str "Al cuadrado es: "(cuadrado (String->Number numero)))
)
(catch Exception e
(JOptionPane/showMessageDialog nil,
(str "Ha ocurrido una excepcion: " (.getMessage e))
)
)
)
view raw cuadrado.clj hosted with ❤ by GitHub
(ns disparejo)
(def moneda ["AGUILA" "SOL"])
(println "Elemento indice 0:"(moneda 0))
(println "Elemento indice 1:"(moneda 1))
(println "Obtenemos aleatoriamente:"(moneda (rand-int 2)))
(def aleatorio (moneda (rand-int 2)))
(println "Obtenemos aleatoriamente:"aleatorio)
;;
(def hugo (moneda (rand-int 2)))
(def paco (moneda (rand-int 2)))
(def luis (moneda (rand-int 2)))
(def ganador "")
(println "Hugo: "hugo)
(println "Paco: "paco)
(println "Luis: "luis)
(if (and (not (= hugo paco)) (not (= hugo luis)))
(def ganador "El ganador es Hugo")
)
(if (and (not (= paco luis)) (not (= paco hugo)))
(def ganador "El ganador es Paco")
)
(if (and (= hugo luis)(= paco luis))
(def ganador "No hay ganador")
)
(if (and (not (= luis paco)) (not (= luis hugo)))
(def ganador "El ganador es Luis")
)
(println ganador)
view raw disparejo.clj hosted with ❤ by GitHub
(ns funcional)
(comment
Funciones en Clojure
Sintaxis
(defn nombre-func "Comentario" [arg1 arg2 argN]
(cuerpo)
)
)
;; Definimos las funciones
(defn my-func-hola "Este solo es un clásico Hola, Mundo!!" []
(println "Este solo es un clásico Hola, Mundo!!")
)
(defn my-func-hola-two "Devuelve un saludo. Verifica si el nombre esta en blanco o es null" [nombre]
(if (clojure.string/blank? nombre)
(println "Hola, Extraño")
(println "Hola,"nombre)
)
)
(defn es-xml? "Verifica si una cadena termina en xml" [documento]
(if (clojure.string/ends-with? documento "xml")
(println "Se consume el archivo "documento".")
(println "El archivo ["documento"] no puede ser procesado.")
)
)
(defn inicia-con-a? "Verifica si una cadena empieza con la letra a" [documento]
(if (clojure.string/starts-with? documento "a")
(println "Inicia con a: "documento".")
(println " ["documento"] no puede ser procesado.")
)
)
(defn my-abs "Esta funcion devuelve un valor absoluto de otro numero" [x]
(if (> x 0)
x
(- x)
)
)
(defn mayor-a-100? "Si es mayor a 100 devolvera un true" [num]
(if (> num 100)
true
)
)
;; Invocamos funciones
(my-func-hola)
(println "Absoluto de -3: "(my-abs -3))
(my-func-hola-two "")
(my-func-hola-two nil)
(my-func-hola-two "Fernando")
(es-xml? "informes.xml")
(es-xml? "informes.pdf")
(es-xml? "")
(try
(es-xml? nil);; Este frgamento puede provocar un NullPointerException
(catch Exception e
(println (str "Ha ocurrido una excepcion: \n\t" (.getMessage e)))
)
)
(inicia-con-a? "ana")
(inicia-con-a? "alma")
(inicia-con-a? "karolina")
(try
(inicia-con-a? nil);; Este frgamento puede provocar un NullPointerException
(catch Exception e
(println (str "Ha ocurrido una excepcion: \n\t" (.getMessage e)))
)
)
(println (str "¿100 es mayor a 100?: " (if (mayor-a-100? 100) "Si, es mayor." "No, no lo es.")))
(println (str "¿110 es mayor a 100?: " (if (mayor-a-100? 110) "Si, es mayor." "No, no lo es.")))
(println (str "¿1000 es mayor a 100?: " (if (mayor-a-100? 1000) "Si, es mayor." "No, no lo es.")))
view raw funcional.clj hosted with ❤ by GitHub
(ns fundamentos)
(comment
@author Fer Carraro
)
;;Comentario
(def msg "*** Fundamentos de programacion en Clojure ***")
(println msg)
(def verdadero true)
(if (= verdadero true)
(println "Esto es verdadero y se mostrara en pantalla.")
)
(def falso (< 33 11))
(if (= falso verdadero)
(println "Esto no es verdadero y no se mostrara en pantalla.")
)
;;funcion
(defn sumar [x y]
(+ x y)
)
(defn dividir [x y]
(/ x y)
)
(println "Suma: " (sumar 2 3));;deberia ser 5 la suma total
(println "Sumar numeros: "(+ 1 2 3 4 5) );deberia ser 15
;;definimos una clase
(defrecord Animal [especie color])
(def perro (Animal. "Canina" "Blanco con negro"));; objeto perro, de tipo Animal
(println "Mi perro es de especie"(:especie perro)" y es de color"(:color perro)".")
(defn es-pequenyo? [numero]
(if (< numero 100) "si" "no"))
(println "Resultado:"(es-pequenyo? 12))
(println "Resultado:"(es-pequenyo? 120))
(defn boleto?[edad]
(if (<= edad 15) 4.5 (if (>= edad 67) 8.2 19.0))
)
(println "Boleto: "(boleto? 12));;4.5
(println "Boleto: "(boleto? 68));;8.2
(println "Boleto: "(boleto? 17));;19.0
;;bucles
(println "Bucles")
(loop [x 10]
(when (> x 1)
(println x)
(recur (- x 2)))
)
(println "")
(loop [cont 0]
(when (< cont 10)
(println cont)
(recur(+ cont 1))
)
)
(println "")
(def sueldo_neto 6500.0)
(def edo_civil "casado")
(println "Sueldo neto:" sueldo_neto)
(defn es-casado? [civil sueldo]
(if (= "casado" edo_civil)(+ sueldo 500.0) (+ sueldo 0.0))
)
(def nuevo_sueldo (es-casado? edo_civil sueldo_neto))
(println "Nuevo sueldo: "nuevo_sueldo)
;;try-catch
(def a 3.0)
(def b 0.0)
(println "Dividiendo "a "/"b)
(try
(def division (dividir a b))
(println "Resultado: " division)
(catch Exception e (str "Excepcion al dividir: " (.getMessage e)))
)
;;mayor de un numero
(def a 4)
(def b -13)
(def c 21)
(def mayor a)
(println "Numeros\na:"a", b:"b", c:"c)
(if (< mayor b)
(def mayor b)
)
(if (< mayor c)
(def mayor c)
)
(println "Mayor:"mayor)
;;;;
(println (or true true));;true
(println (and true false));;false
(println (not true));;false
view raw fundamentos.clj hosted with ❤ by GitHub
(ns fundamentos)
;; Fundamentos de programación en Clojure
(comment
Este es
un repaso al lenguaje de
programación Clojure.
Clojure es similar a LISP. De proposito general y funcional.
Puede interactuar con código Java al ser dependiente de la JVM.
)
(import '(javax.swing JOptionPane));'
;; Funciones
(defn suma "Suma de dos numeros" [x y]
(+ x y)
)
(defn resta "Resta de dos numeros" [x y]
(- x y)
)
(defn multiplica "Multiplicacion de dos numeros" [x y]
(* x y)
)
(defn division "Division de dos numeros" [x y]
(/ x y)
)
;; Esta funcion no devuelve valores
(defn Ejemplo "Esta funcion no devuelve nada" [] (
if ( = 2 2)
(println "Los valores son iguales")
(println "Los valores no son iguales")))
(defn hola "Uso de case" [pais]
(case pais
:mexico "Hola, México!"
:alemania "Hallo, Germany!"
:israel "Shalom, Israel!"
:francia "Bonjour, France!"
"Hello, USA!"
)
)
(defn es-par? [numero]
(if (= (mod numero 2) 0) "par" "impar"))
(defn esMayor10? "Funcion que devuelve un valor booleano" [x]
(if (> x 10)
(boolean true))
)
(defn parse-int "Regex para converit String a Integer" [s]
(Integer. (re-find #"[0-9]*" s)))
(defn string-int "Convertir String a Integer" [numStr]
(Integer/parseInt numStr)
)
;; Uso de JOptionPane
(defn introduceDato [s]
(JOptionPane/showInputDialog
(str s)
)
)
;; Definimos una clase Persona
(defrecord Persona [nombre edad])
;; Variables, Long, Double, String, Character, Boolean
(def strCadena "Definimos una variable String" "Clojure")
(def numeroInt "Definimos una variable Integer" 45)
(def numeroFloat "Definimos una variable Float" 2.4)
(def numeroDouble "Definimos una variable Double" 300.21)
(def carChar "Definimos una variable Character" \u0032)
(def booleano "Definimos una variable Boolean" true)
(println "\t================================")
(println "\t [Programando en"strCadena"]")
(println "Entero: "numeroInt)
(println "Flotante: "numeroFloat)
(println "Real: "numeroDouble)
(println "Caracter: "carChar)
(println "Booleano: "booleano)
(println "Tipo [numeroInt]:"(type numeroInt))
(println "Tipo [numeroFloat]:"(type numeroFloat))
(println "Tipo [numeroDouble]:"(type numeroDouble))
(println "Tipo [carChar]:"(type carChar))
(println "Tipo [booleano]:"(type booleano))
(println "Tipo [strCadena]:"(type strCadena))
(println "\t================================")
;; Uso de funciones
(def x 4)
(def y 1)
(println "x ="x", y="y)
(println "Suma:"(suma x y));; 5
(println "Resta:"(resta x y));; 3
(println "Producto:"(multiplica x y));; 4
(println "Division:"(division x y));; 4
(Ejemplo)
(println "\t================================")
;; Operaciones y funciones matemáticas
(println "4+5-(3*2)="(- (+ 4 5) (* 3 2)));; 3
(println "5/6/3+(5*2)-4="(- (+ (/ (/ 5 6) 3) (* 5 2)) 4));; 113/18
(println "(3*3)-(5+6)="(- (* 3 3) (+ 5 6)));; -2
(println "(8-9)*(6+3)="(* (- 8 9) (+ 6 3)));; -9
(println "220%200="(mod 220 200));; 20
(println "100%10="(mod 100 10));; 0
(println "340%300="(mod 340 300));; 40
(println "Maximo de (1 2 3 4 5)="(max 1 2 3 4 5));; 5
(println "Maximo de (5 1 66 0 4 8 21)="(max 5 1 66 0 4 8 21));; 66
(println "Minimo de (1 2 3 4 5)="(min 1 2 3 4 5));; 1
(println "Minimo de (5 1 66 0 4 8 21)="(min 5 1 66 0 4 8 21));; 0
(println "PI = "(Math/PI))
(println "PI * 2 = "(* Math/PI 2))
(println "No. aleatorio [rand 2] = "(rand 2))
(println "No. aleatorio [rand 10] = "(rand 2))
(println "No aleatorio [rand-int 100]= "(rand-int 100))
(println "Euler ="(Math/E))
(println "Pow(2, 10) ="(Math/pow 2 10))
(println "Pow(56, 2) ="(Math/pow 56 2))
(def cont 1)
(println "Cont:"cont);; 1
(println "Cont:"(inc cont));; 2
(println "\t================================")
;; Funciones de cadena
(println "FERROCARRILERO tiene una longitud de:"(.length "FERROCARRILERO"))
(println "MURCIELAGO tiene una longitud de:"(.length "MURCIELAGO"))
(println "fernando en mayusculas:"(.toUpperCase "fernando"))
(println "BENANCIO en minusculas:"(.toLowerCase "BENANCIO"))
(println "El primer caracter de ABCDEF="(.charAt "ABCDEF" 0));; A
(println "El tercer caracter de ABCDEF="(.charAt "ABCDEF" 2));; C
(println "El ultimo caracter de ABCDEF="(.charAt "ABCDEF" 5));; F
(println "'FER' contiene 'E'?"(.contains "FER" "E"));; true
(println "'FER' contiene 'Y'?"(.contains "FER" "Y"));; false
;; Funciones de cadena propias de Clojure
(println "Quitar espacios:"(clojure.string/trim " Cadena con espacios "))
(def strCadenaMayus "Esta es una cadena en mayusculas" "ALFABETO")
(def strCadenaMinus "Esta es una cadena en minusculas" "ana maria")
(println strCadenaMayus)
(println "En minusculas:"(clojure.string/lower-case strCadenaMayus))
(println strCadenaMinus)
(println "En mayusculas:"(clojure.string/upper-case strCadenaMinus))
(println (str "Bienvenidos" " a Clojure City"));; concatenar
(println (format "Guten , %s" "Tag amigos!!"))
(println (format "Numero: %d" 1234))
(println "Y la cadena mide:"(count "Y la cadena mide")" de longitud")
(println "\t================================")
;; Condicionales
(if (= (compare "A" "A") 0)
(println "Son iguales")
)
;; Esto no se vera
(if (= (compare "B" "A") 0)
(println "No son iguales")
)
(if (= (compare "X" "X") 0)
(println "No son identicas")
(println "Son identicas")
)
(println (hola :mexico))
(println (hola :francia))
(def opcion 3)
(println "\t Menu\n\t1. Caviar\n\t2. Huevo con arroz\n\t3. Solo una uva.")
(def eleccion "Asignamos el resultado en esta variable" (case opcion 1 "Esta muy caro, ¿Realmente quiere desayunar eso?" 2 "Aceptable para este dia" 3 "Muy poco, ¿no crees?, te sale gratis" "Eso no esta disponible" ))
(println eleccion)
(def monto "Definimos una variable tipo Integer" 500)
(def resultado (cond (> monto 700) "Es un monto mayor a $700" (> monto 600) "Es un monto mayor a $600" (> monto 500) "Es un monto mayor a $600" (> monto 400) "Es un monto mayor a $400" true "Es un monto que no cumple el criterio" ))
(println "Monto:"(str "$" monto))
(println resultado)
(println "12 es :"(es-par? 12))
(println "20 es :"(es-par? 20))
(println "37 es :"(es-par? 37))
(println "45 es :"(es-par? 45))
(println "\t================================")
;; Excepciones
(try
(println "Introduce un numero:")
(def entradaInt (read-line))
(if (esMayor10? (parse-int entradaInt))
(println (str entradaInt " es mayor a 10"))
)
(catch Exception e
(println (str "Ha ocurrido una excepcion: \n\t" (.getMessage e)))
)
)
(def entradaStr "32")
(def entradaStrToInt (string-int entradaStr))
(try
(if (esMayor10? entradaStrToInt)
(println (str entradaStrToInt " es mayor a 10"))
)
(catch Exception e
(println (str "Ha ocurrido una excepcion: \n\t" (.getMessage e)))
)
)
(println "\t================================")
(try
(def nombre(introduceDato "Introduce tu nombre:"))
(JOptionPane/showMessageDialog nil,
(str "Hola, "(clojure.string/upper-case nombre)". \nBienvenido a City Clojure!!")
)
(catch Exception e
(println (str "Ha ocurrido una excepcion: \n\t" (.getMessage e)))
)
)
(println "\t================================")
;; Clases
(def fernando "Definimos un objeto de tipo persona" (Persona. "Fernando Carraro Aguirre" 40))
(println "Persona:"fernando)
(println "\t[Persona]\n\tNombre:"(:nombre fernando))
(println "\tEdad:"(:edad fernando)"años")
(println "Tipo:"(type fernando))
(ns holmundo)
(comment
Hola, mundo en Clojure
)
(println "Hola, mundo enClojure!!")
view raw holamundo.clj hosted with ❤ by GitHub
(ns interop)
(import java.util.Date)
(import java.lang.String)
(import '(javax.swing JOptionPane));'
(import java.net.URL)
(println "Fecha: "(Date.))
(println "Booleano: "(Boolean/valueOf "true"))
(println "Cadena: "(String/valueOf 33))
(println "Entero: "(Integer/parseInt "11"))
(println "Flotante: "(Float/parseFloat "12.5f"))
(println "Sistema operativo: "(. (. System (getProperties)) (get "os.name")))
(println "Verdion del JDK: "(System/getProperty "java.vm.version"))
(def myURL "Una URL de algun sitio web" "https://www.udemy.com")
(println "URL: "(URL. myURL))
;; Uso de JOptionPane
(defn introduceDato [s]
(JOptionPane/showInputDialog
(str s)
)
)
(def numero(introduceDato "Introduce numero:"))
;;convertir String a número
(defn String->Number [str]
(let [n (read-string str)]
(if (number? n) n nil)))
;;función cubo
(defn cubo [n]
(* n n n)
)
;;'main' del programa
(try
(JOptionPane/showMessageDialog nil,
(str "El numero introducido es: "numero)
)
(JOptionPane/showMessageDialog nil,
(str "Al cubo es: "(cubo (String->Number numero)))
)
(catch Exception e
(JOptionPane/showMessageDialog nil,
(str "Ha ocurrido una excepcion: " (.getMessage e))
)
)
)
view raw interop.clj hosted with ❤ by GitHub
(ns mayor)
(def x 6)
(def y 3)
(println "x= "x)
(println "y= "y)
(if (> x y)
(println x">"y)
)
(if (= 3 3)
(println "Es verdadero")
)
(if (> 9 4)
(println "Esto es verdadero")
)
(if (< 11 10)
(println "X")
(println "Y");;Y
)
(if (not= 10 11)
(println "A");;A
(println "B")
)
(if (not= 11 11)
(println "O")
(println "P");;P
)
;;;
(def x 1)
(def a 2)
(def b 0)
(cond
(= x a) (println "Alef")
(= x b) (println "Bet")
:else (println "Salida"))
view raw mayor.clj hosted with ❤ by GitHub
(ns variables)
(comment
Variables en Clojure
)
;; Tipos de datos
(def entero 32)
(def nombre "Clojure")
(def booleano true)
(def real 34.22)
(println "Entero: "entero)
(println "Nombre: "nombre)
(println "Real: "real)
(println "Booleano: "booleano)
view raw variables.clj hosted with ❤ by GitHub
Links:
Descarga: http://clojure.org/
Twitter del creador del lenguaje:https://twitter.com/richhickey

Comentarios

Entradas populares de este blog

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

Programación Windows Batch (CMD) parte 4

Siguiendo con la serie de post sobre programación ( 1 , 2 , y 3 ) batch ahora veremos algunas cosas como operaciones aritméticas, operadores lógicos  y uso de ficheros. Cuando somos administradores de servidores o desarrolladores muchas veces tenemos que realizar tareas que nos quitan, relativamente, tiempo valioso que podríamos ocupar para otras cosas (como ver nuestro Facebook, jeje, broma).  Aprender a escribir scripts que nos faciliten algunas tareas siempre es útil. Por ejemplo, conocer todas las características técnicas de nuestro equipo de cómputo nos servirá cuando se realiza peritajes informáticos y soporte al equipo. Realizar respaldos automáticos a nuestras carpetas , archivos y directorios será más sencillo gracias a un script. Pero antes debemos aprender lo básico de la programación en batch. Ejemplo 1. Operaciones aritméticas básicas. aritmetica.bat @ echo off ::Nombre del archivo, imprimirá: aritmetica.bat echo %0 :: Set nos servirá para a...

COBOL para principiantes #1

COBOL es un lenguaje de programación que sigue dando de que hablar. Los programadores Java, C#, Python, etc. saben que aún existen aplicaciones hechas en COBOL y es difícil que éstas migren a un lenguaje más actual. Es por esa y otras razones que muchos han pensado en aprender este lenguaje 'obsoleto'. ¡COBOL is the king, no ha muerto! ¡A desempolvar los libros de nuestros abuelos, tíos o maestros! ¿Qué debemos hacer para aprender COBOL y no morir en el intento? Para empezar necesitas: Tener bases de programación (obvio). Conseguir un compilador dependiendo del sistema operativo que uses (si usas Windows puedes usar Visual Studio e instalar un compilador; si usas Linux puedes usar Gnu OpenCOBOL, nosotros usaremos éste último en el blog ). Saber qué extensión se usa para crear un programa COBOL (.cb, cbl, .cb). Nosotros usaremos .cbl  Comprender la estructura de un programa COBOL.  Conocer las estructuras de control y estructuras de datos en COBOL. Practicar...