create account

Tutorial Ruby 02: Sintaxis Basica by shadowmyst

View this thread on: hive.blogpeakd.comecency.com
· @shadowmyst ·
$0.86
Tutorial Ruby 02: Sintaxis Basica
![image.png](https://files.peakd.com/file/peakd-hive/shadowmyst/23wN1fM9irLt715wF3xWVo8fqoXoD32fmhbQtuJrH2HWh4GN177wtX78NNjbWkFz5p6Uo.png)

<div class="text-justify">

NOTA: Estoy volviendo a crear mis tutoriales de Ruby y en este caso para este post es una remasterización de un post que escribí hace más de dos años, por lo que ando arreglando algunas cosas que tenía mal explicado, así que busco que sea mejor entendible para el que quiera aprender Ruby y no se pierda en el proceso.

NOTA 2: El primer post de este tutorial lo puedes encontrar en [mi canal de Youtube de Programación](https://youtu.be/bHoj1eoOSD4) o en mi [web personal](https://shadowmyst.net/como-instalar-ruby/), de ahí en adelante crearé una colección en Peakd para que sea fácil su acceso.

--- 

Después de ver como [instalar el Lenguaje de Programación Ruby en nuestra computadora](https://shadowmyst.net/como-instalar-ruby/), es momento de que aprendamos la sintaxis básica que tiene. Una sintaxis buena para los principiantes, pues lo que busca este lenguaje de programación es que sea gentil para el programador.

Una de las ventajas y al mismo tiempo un poco confuso para los programadores que vienen de lenguajes de programación como C++ o Java es el uso de `{` `}` en nuestro ámbito de programación, ni tampoco terminamos nuestras instrucciones con un `;` en cambio su estructura empieza con la condición a usar y termina con un `end`. Ya lo veremos a continuación cuando ponga algunos ejemplos de su sintaxis, asi que agarren su **IDE** y pongamos manos a la obra. También recordar que una vez que creamos nuestro programa para ejecutarlo, en nuestra terminal ponemos `ruby <nombre_del_archivo>.rb`.

## Tipos de datos en Ruby

Los tipos de datos en Ruby tenemos las más conocidas de otros lenguajes de programación como son los enteros, cadena de caracteres, booleanos, junto con otras nuevas propias de este lenguaje de programación que a continuación mencionaré alguna de ellas. Una característica interesante es que no tenemos que declarar de que tipo es nuestra variable al momento de crearla, pues solo es cuestión de asignarle su valor y Ruby identificara de que tipo son.

* **Cadena de caracteres (`strings`):** Las cadenas de caracteres además de ser igual que otros lenguajes de programación que puedes declararlas usando comillas simples o dobles, tiene también la característica de que puedes incrustar un valor igual dentro de otra cadena usando `#{<variable>}`

~~~ ruby
variable1 ="Shadow Myst"
variable2 = "Hola soy #{variable1}"
~~~

* **Numeros:** Como mencione anteriormente, Ruby detecta de forma automática que tipo de variable estás usando, si es un entero o si es un número decimal (`float`),  además que si estás usando números muy grandes, puedes poner guiones bajos, los cuales ignorara `millones=10_000_000`, así que es una forma de poder leer números grandes al momento de declarar variables

* **Booleanos:** Aquí no hay gran diferencia a otros lenguajes de programación, sus únicos valores serán True o False

* **Arreglos:** Los arreglos es algo que usamos mucho en los diferentes lenguajes de programación que llegamos a manejar y obviamente Ruby no seria la excepción. En ruby tenemos diferentes formas de declarar arreglos y tambien de manipularlos.

~~~ ruby
#Crear un objeto array
arreglo = Array.new
#Crear un objeto array pero con el numero de elementos que tendra
arreglo2 =Array.new(2)
#Simplemente iniciarlo con corchetes
arreglo3 = []
#Iniciarlo con los elementos que tendra
arreglo4 = ["Jesus","Leonel","Emmanuel"]
~~~

Ademas para añadir un elemento a nuestro arreglo podemos simplemente usar la anotación de corchetes en el indice correcto `arreglo4[3] = Atzimba` o usar la función push: `arreglo4.push("Atzimba")`

Un gran cambio que podemos notar con los arreglos en Ruby es la forma en recorrer los elementos del mismo, mientras que en otros lenguajes tendriamos que hacerlo con un For.

~~~ ruby
arreglo4.each do |indice|
  puts indice
end
~~~

Nos creamos una variable "indice" donde se almacena temporalmente cada elemento de nuestro arreglo para los usos que queramos darle

* **Hash:** Los hash son como los arreglos pero con una gran diferencia, ya que en vez de existir un indice en el que se recorra el elemento, estos contendran llaves que sirvan para poder localizar el elemento que queramos usar. La forma en que las declaramos es casi igual que con los arreglos solo que en vez de corchetes `[ ]` usamos las llaves `{ }`

~~~ ruby
hash= Hash.new
hash2 = {}

#Lo llenamos de la siguiente forma
hash2 = {"Nombre" => "Jesus","apellido" => "Figueroa"}

~~~

Para agregar un nuevo elemento utilizaremos la notación de corchetes. Puedes usar cualquier valor para nombrar la clave: `hash2["edad"] = 30`

* **Simbolos:** Son usados muy seguido como identificadores en lugar de las cadenas porque pueden consumir menos memoria. Para crear un simbolo, simplemente precede una palabra con dos puntos: `:simbolo`

## Tipos de declaración de Variables en Ruby

Una de las características que tiene Ruby, es que las variables no son necesarias declararlas con un tipo de especifico, como suele ser en algunos otros lenguajes como lo que es C++, Java, etc. Las variables cambian de tipo en tiempo de ejecución por lo que por un momento puede ser una variable de tipo entero y en otro se vuelve una variable de tipo cadena, dependiendo de como las estemos usando al momento de necesitarlas.

* **Variables locales:** Tienen un ámbito local (dentro de una función o contexto) por convención se escriben en minúscula y si tiene un nombre compuesto este se separa por un guion bajo.

~~~ ruby
nombre, id_cliente, primer_apellido, segundo_apellido
~~~

* **Variables Globales:** Tienen un ámbito global pueden ser usados en cualquier parte de nuestro código, como una función, una clase o moduelo. Empiezan con el símbolo `$` conservan la misma convención de las variables locales.

~~~ ruby
$nombre, $id_cliente, $primer_apellido, $segundo_apellido
~~~

* **Variables de Instancia:** Aunque lo veremos mas adelante cuando se vean **las Clases** son las variables que se ejecutan dentro de una clase y son las variables que hacen referencia a las propiedades de una clase. Si estas variables las usas fuera de la clase te devolveran un valor nulo, por lo que solo pueden ser usadas dentro de los metodos de nuestra clase. Se representan colocando un `@` antes del nombre de la clase.

~~~ ruby
@nombre, @edad
~~~

* **Variables de clase:** Variables que pertenecen a la clase que tiene la facultad de que la variable al ser cambiado su valor, todos los objetos de esa clase también cambiara el valor de esa variable, por eso es obligado que cuando se crea una variable de este tipo debe comenzar inicializada con un valor y se representan con `@@` antes del nombre de la clase.

~~~ ruby
@@ruedas = 4
~~~

* **Constantes:** Variable que nunca cambiara de valor en todo el programa, por convención siempre se escriben en mayúscula.

~~~ ruby
PI = 3.1416, CAPACIDAD
~~~

## Estructuras de desición y Bucles

### Condicionales

* **if/else y unless:** Ruby tiene algo mas que el **if/else** como condicional primaria, sino que también tenemos a **unless**, mientras que **if** analiza una condición verdadera y de ahí sigue el flujo de instrucciones, **unless** hace justamente lo opuesto, analiza una condicional y si es falsa se ejecutan las instrucciones dentro del ámbito.

~~~ ruby
a  =  5
b  =  7
if a<b
  puts  "a es menor de b"
else
  puts  "b es menor de a"
end
~~~

En este caso como `a` es menor que `b` por lo que la condicion es verdadera nos imprimirá el mensaje dentro del **if**.

~~~ ruby
a  =  5
b  =  7
unless a<b
    puts  "b es menor de a"
else
    puts  "a es menor de b"
end
~~~

Pero en este caso como **unless** necesita que la condición sea falsa, nos va a imprimir lo que esta dentro de **else**. 

También podemos poner nuestro condicional en una sola instrucción si es que nuestro programa es algo simple.

~~~ ruby
puts "a es menor a b" if a<b
puts "b es menor a a" unless a<b
~~~

* **switch/case:** Aunque en otros lenguajes de programación lo conocemos como un **"switch"** aqui se usa la palabra reservada **"case"** y su uso es prácticamente igual.

~~~ ruby
case calificacion
  when (0..69) #Esta es una variable del tipo Range
    puts "Reprobado"
  when (70..100)
    puts "Aprobado"
  else
    puts "No existe esa calificación o fue mal escrita"
end
~~~

**NOTA 1:** Los comentarios de una sola linea podemos anteponerlos con `#`

**NOTA 2:** Dentro de nuestro `case` podemos usar variables de tipo string, numéricos o en el caso de este ejemplo usamos de clase `Range`

**NOTA 3:** Mientras que en otros lenguajes se usa `default` como opción final en cuanto no tengamos como evaluar, en ruby usaremos Else como si fuera un if.

### Bucles

Ruby también nos da una variedad de diferentes palabras reservadas para usar bucles aparte de las tradicionales **while, do-while y for**, veamos todas una por una en un ejemplo rápido

* **While:**

~~~ ruby
while a<10
    puts a
    a+=1
end
~~~

* **Do-While:** Realmente no se conoce como do-while en ruby pero como es lo mas parecido a otros lenguajes lo subtitule de esa forma

~~~ ruby
begin
  puts a
  a+=1
end while a<10
~~~

* **until:** Until es lo mismo que cuando vimos **unless** mientras la condición sea falsa se va a cumplir la condición

~~~ ruby
until a<10
  a+=1
  puts "a no es menor a 10"
end
---------------
begin
  puts "a no es menor a 10"
  a+=1
end until a<10
~~~

De igual forma podemos poner nuestro `while` y `until` en una sola instrucción.

~~~ ruby
a+=1 while a<20 #Para While
a+=1 until a>20 #Para Until
~~~

* **loop:** Cuando conocí `Loop` se me hizo extraño pues realmente consiste de ciclar una instrucción indefinidamente y la única forma de salirse es con la palabra reservada `break`

~~~ ruby
loop do
  puts a
  a+=1
  break if a>100
end
~~~

* **For:** Por ultimo nos falta la instrucción For que se nos simplifica mucho mas, aunque al principio puede confundir. Mientras que en otros lenguajes usamos la sintaxis `for(i=0;i<10;i++)` con Ruby lo reducimos a el nombre de la variable y un rango de valores que se especifica de la siguiente manera: `(0..10)`.

~~~ ruby
for i in (0..10)
  puts i
end
~~~

Por ultimo y como recordatorio, podemos usar cuatro comandos que nos ayudaran en nuestros bucles:

* `break`: Termina el bucle
* `next`: Se adelanta a la siguiente interacción del bucle
* `redo`: Se repite el bucle ignorando y anulando la evaluación de la condición
* `retry`: Se repite el bucle repitiendo de igual forma la evaluación de la condición


</div>

[//]: # (CCC LINKS PLACEHOLDER, DON'T DELETE THIS TAG)
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
authorshadowmyst
permlinktutorial-ruby-02-sintaxis-basica
categoryhive-154226
json_metadata{"app":"peakd/2022.05.9","format":"markdown","tags":["developspanish","developer","programador","spanish","stem-espanol","ruby"],"users":["nombre","edad","ruedas"],"image":["https://files.peakd.com/file/peakd-hive/shadowmyst/23wN1fM9irLt715wF3xWVo8fqoXoD32fmhbQtuJrH2HWh4GN177wtX78NNjbWkFz5p6Uo.png"]}
created2022-07-06 22:48:45
last_update2022-07-06 22:48:45
depth0
children5
last_payout2022-07-13 22:48:45
cashout_time1969-12-31 23:59:59
total_payout_value0.424 HBD
curator_payout_value0.436 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10,666
author_reputation201,289,901,287,623
root_title"Tutorial Ruby 02: Sintaxis Basica"
beneficiaries
0.
accountescuadron201
weight500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id114,630,863
net_rshares1,592,578,158,385
author_curate_reward""
vote details (49)
@mtzrene ·
Me gustan los lenguajes de programación con sintáxis sencilla tipo Python y Julia. ¿Para qué utilizas particularmente Ruby?
👍  
properties (23)
authormtzrene
permlinkre-shadowmyst-req1lu
categoryhive-154226
json_metadata{"tags":["hive-154226"],"app":"peakd/2022.05.9"}
created2022-07-08 21:41:54
last_update2022-07-08 21:41:54
depth1
children3
last_payout2022-07-15 21:41:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length123
author_reputation55,036,306,677,344
root_title"Tutorial Ruby 02: Sintaxis Basica"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id114,687,323
net_rshares1,638,946,094
author_curate_reward""
vote details (1)
@shadowmyst ·
Para todo lo relacionado a los servicios web como tal, aunque ando tratando de hacer GUI's sencillas con Ruby para poder hacer software de esccritorio
👍  
properties (23)
authorshadowmyst
permlinkre-mtzrene-req204
categoryhive-154226
json_metadata{"tags":["hive-154226"],"app":"peakd/2022.05.9"}
created2022-07-08 21:50:30
last_update2022-07-08 21:50:30
depth2
children2
last_payout2022-07-15 21:50:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length150
author_reputation201,289,901,287,623
root_title"Tutorial Ruby 02: Sintaxis Basica"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id114,687,514
net_rshares3,652,834,603
author_curate_reward""
vote details (1)
@mtzrene ·
Interesante lo que encontré en una búsqueda rápida en internet, si vi que se usa más para cuestiones relacionadas con la web. También vi que se puede utilizar para ciencia de datos, pero que ya no han desarrollado suficientes herramientas porque es algo pesado su ejecución. Voy a darle una revisada, a ver que tal.
properties (22)
authormtzrene
permlinkre-shadowmyst-req2tf
categoryhive-154226
json_metadata{"tags":["hive-154226"],"app":"peakd/2022.05.9"}
created2022-07-08 22:08:03
last_update2022-07-08 22:08:03
depth3
children1
last_payout2022-07-15 22:08:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length315
author_reputation55,036,306,677,344
root_title"Tutorial Ruby 02: Sintaxis Basica"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id114,687,928
net_rshares0
@poshtoken ·
https://twitter.com/Shadow_Myst/status/1544867176301092865
<sub> The rewards earned on this comment will go directly to the people( @shadowmyst ) sharing the post on Twitter as long as they are registered with @poshtoken. Sign up at https://hiveposh.com.</sub>
properties (22)
authorposhtoken
permlinkre-shadowmyst-tutorial-ruby-02-sintaxis-basica21172
categoryhive-154226
json_metadata"{"app":"Poshtoken 0.0.1","payoutToUser":["shadowmyst"]}"
created2022-07-07 02:13:45
last_update2022-07-07 02:13:45
depth1
children0
last_payout2022-07-14 02:13:45
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length261
author_reputation5,349,669,067,600,033
root_title"Tutorial Ruby 02: Sintaxis Basica"
beneficiaries
0.
accountreward.app
weight10,000
max_accepted_payout1,000,000.000 HBD
percent_hbd0
post_id114,635,701
net_rshares0