# Esto es un comentario de una línea=beginY esto un comentariode más de una línea=endputs"Esto se imprimirá en el terminal"# > Esto se imprimirá en el terminal# Variables numéricasx=1# Enteroy=2.3# Flotanteputs2+5# Suma e imprime 7puts4-2# Resta e imprime 2puts10/2# Divide e imprime 5puts5*2# Multiplica e imprime 10puts2**4# 2 con exponente 4 e imprime 16puts7%3# 7 módulo 3 e imprime 1# Variables booleanasverdadero=truefalso=falsefalso2= !verdadero# Otros operadores de asignaciónx=1x += 1# x = 1 + 1 = 2x -= 1# x = 2 - 1 = 1x *= 2# x = 1 * 2 = 2x /= 2# x = 2 / 2 = 1
Strings
s1='Soy un String's2="También soy un String"putss1.length# Obtiene el largo e imprime 13putss1.length# Invierte el string e imprime gnirtS nu yoSputss1.upcase# Convierte a mayúsculas e imprime SOY UN STRINGputss1.downcase# Convierte a minúsculas e imprime soy un stringedad=10puts"Hola, tengo #{edad} años"# > Hola, tengo 10 años# Se pueden concatenar stringsputs"Soy el 1er string, " + "y yo el 2do"# > Soy el 1er string, y yo el 2doedad="10"# edad es un String "10"edad=edad.to_i# edad se convierte a entero 10
Control de flujo
# Solo una condiciónifedad == 10puts"Tienes 10 años!"end# La versión de una líneaputs"Tienes 10 años"ifedad == 10# Condición If y Elseifedad > 50puts"Tienes más de 50 años"elseputs"Tienes 50 años o menos"end# Condición compleja con Else Ififedad == 5puts"Tienes 5 años"elsifedad == 10puts"Tienes 10 años"elsifedad == 15puts"Tienes 15 años"elseputs"No tienes 5, 10 ni 15 años"end# Condiciones con casemomento="mañana"casemomentowhen"mañana"puts"Buenos días"when"tarde"puts"Buenas tardes"elseputs"Hola"end# > Buenos días# Operador ternarioedad=12putsedad >= 18 ? "Eres mayor de edad" : "Eres menor de edad"# > Eres menor de edad
Operadores lógicos
Operador
Descripción
==
Igual qué
!=
Distinto qué
<
Menor qué
<=
Menor o igual qué
>
Mayor qué
>=
Mayor o igual qué
||
Or lógico
&&
And lógico
# Comparando dos cosasa == b# Comparando varias condicionesa == b || c >= d# Dentro de una condiciónifedad > 10 && edad < 20doputs"Tienes más de 10 y menos de 20 años"end
Loops
# Loop for de 1 a 5foriin1..5putsiend# > 1# > 2# > 3# > 4# > 5# Loop for de 1 a 5 saltando los números pares# next se usa para saltar a la siguiente iteraciónforiin1..5nextifi % 2 == 0putsiend# > 1# > 3# > 5# Ejecuta un bloque utilizando el método times5.times{puts"Hola"}# > Hola# > Hola# > Hola# > Hola# > Hola
Arreglos, Hashes y Símbolos
Arreglos
num=[1,2,3,4,5]palabras=["hola","soy","un","array"]mezclados=["hola",true,2,1.5]vacio=[]num << 6putsnum# [1, 2, 3, 4, 5, 6]# Los arreglos se pueden indexar# El primer elemento siempre es el 0putsmezclados[2]# > trueputsmezclados[0]# > hello# Para arreglos de múltiples dimensionesarreglo_2D=[[1,2,3,4,5],["hola",true,2,1.5]]# El arreglo con índice 1 es el segundoputsarreglo_2D[1]# > ["hola", true, 2, 1.5]# También se puede acceder a un elemento particularputsarreglo_2D[0][2]# > 3# El método each se usa para recorrer los arreglospalabras=["hola","soy","un","array"]palabras.each{ |palabra| putspalabra}# > hola# > soy# > un# > array
Hashes
# Un hash es una colección de pares key-valorperfil={"nombre"=>"Jon","apellido"=>"Snow""telefono"=>1234567}putsperfil["nombre"]# > Jon# Para agregar un nuevo par key-valorperfil["edad"]=35# Para inicializar un Hashvacio=Hash.newputsvacio# > {}# El método each también se usa para recorrer hashesperfil={"nombre"=>"Jon","apellido"=>"Snow""telefono"=>1234567}perfil.eachdo |key,valor|
puts"Mi #{key} es #{valor}."end# > Mi nombre es Jon.# > Mi apellido es Snow.# > Mi telefono es 1234567.
Hashes y símbolos
# Los símbolos son nombres inmutables usados principalmente como hash keys. Se pueden definir en hashes de dos formas, usando => o :perfil={:nombre=>"Jon",:apellido=>"Snow",:telefono=>1234567}perfil={nombre: "Jon",apellido: "Snow",telefono: 1234567}# En ambos casos se llama al valor de la siguiente formaputsperfil[:nombre]# > Jon# Se puede utilizar el método select para obtener valores que cumplan un criteriotiempos={Jon: 15.5,Arya: 16.8,Bran: 21.0}tiempos.select{ |nombre,tiempo| tiempo < 20.0}# Retorna {:Jon=>15.5, :Arya=>16.8}# Tambien podemos iterar por los keys o valores con el método each_key y each_valuetiempos.each_key{ |k| putsk}# > Jon# > Arya# > Brantiempos.each_value{ |v| putsv}# > 15.5# > 16.8# > 21.0
Métodos
# Un método sin argumentodefsaludaputs"¡Hola Mundo!"end# Para llamar al métodosaluda()# > ¡Hola Mundo!# Un método con argumentosdefexponente(num,exp)returnnum ** expendputsexponente(2,4)# > 16# Se puede usar el operador * antes de un argumento para indicar que puede tener un número desconocido de argumentosdeflista_de_nombres(*nombres)nombres.each{ |nombre| puts"Yo soy #{nombre}"}endlista_de_nombres("Jon","Arya","Bran")# > Yo soy Jon# > Yo soy Arya# > Yo soy Bran
Convenciones para nombrar
# Usa snake_case y no separes el número de letras para simbolos, métodos y variables# Malo:someSymbolsomeVar=5var_10=10defsomeMethodend# Bueno:some_symbolsome_var=5var10=10defsome_methodend# Usa CamelCase para clases y modulos, manteniendo las mayúsculas de acrónimos como HTTP, XML, etc.# MaloclassSomeclassendclassSome_ClassendclassSomeXmlendclassXmlSomethingend# BuenoclassSomeClassendclassSomeXMLendclassXMLSomethingend# Usa snake_case para nombrar archivos y directorios# hello_world.rb# hello_world/hello_world.rb# Usa SCREAMING_SNAKE_CASE para constantes# MaloSomeConst=5# BuenoSOME_CONST=5# Otras recomendaciones# + Las variables son nombradas por el significado de su contenido, no por el tipo de contenido# + Las variables no son abreviadas# + No pueden empezar con un número# Malostudents_array=[1,2,3,4]1st_lesson=1sts=4# Buenostudents=[1,2,3,4]first_lesson=1students=4