You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# 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