Article image
Maria Carvalho
Maria Carvalho22/04/2024 18:58
Compartilhe

Uma síntese de aprendizado

  • #Ruby
  • #RubyGems

Conceitos de Ruby

Ruby além de ser uma linguagem orientada a objetos também pode ser uma linguagem de uso funcional, imperativa e reflexiva. Por ser muito versátil e de sintaxe facilitada, acabou caindo no meu gosto pessoal. Ao longo desse artigo, irei descrever algumas percepções que tive como programadora da vida real, revisitando as bases e reaprendendo conceitos.

Como todas as linguagens mais usadas, ruby tem seus tipos de dados como:

  • Integer
  • Float
  • Boolean
  • String
  • Array

Mas também tem uma coisinha que eu não lembrava e que só existe nela (até onde eu saiba)

  • Symbol

Symbol em ruby é como se fosse uma constante, pode-se declarar um symbol da seguinte maneira:

:nome_symbol

Onde esse símbolo vai ter valor imutável, ou seja, não importa onde você chame o símbolo declarado, ele sempre vai existir com o mesmo valor. O que pode ser comparado a uma constante por exemplo.

Um símbolo é o objeto Ruby mais básico que você pode criar. Ele é apenas um nome e um ID interno. Símbolos são úteis porque um dado nome de símbolo se refere ao mesmo objeto através de um programa Ruby. Símbolos são mais eficientes que strings. Duas strings com o mesmo conteúdo são dois objetos diferentes, mas para qualquer nome existe apenas um objeto Symbol. Isso pode economizar tempo e memória.
  • Definição encontrada em: https://guru-sp.github.io/tutorial_ruby/simbolos.html

Símbolos em Ruby (Symbols)

Nesses casos, o símbolo pode ajudar a economizar memória e processamento.

Vagando um pouco mais, agora na modalidade de operadores, no ruby não temos o iterador ++ ou - - então sempre que queremos iterar uma variável, usamos:

var += 1

var =+ 1

var -= 1

var =- 1

Passando para as estruturas de controle, temos as padrões:

  • IF/ELSIF/ELSE
  • FOR
  • WHILE
  • CASE (que seria switch/case)
  • DO/WHILE (que seria loop)

Temos as que são comumente abordadas em linguagens de Orientação à Objetos, como:

  • EACH/DO
  • MAP
  • SELECT

Que fazem parte das coleções.

E temos algumas estruturas próprias do ruby (até onde sei)

  • Unless
  • Times

Uma que funciona como contrário de IF e outra que trabalha de forma parecida com o loop, mas sua estrutura é assim:

10.times do
  puts "Olá, Mundo"
end

E repete o trecho de código enquanto não completar o ciclo definido.

Aprofundando os conhecimentos em métodos

Dentro do que o curso oferece, temos o contato com métodos e gems, que apesar de serem simples, podem se tornar um emaranhado complexo a medida que uma aplicação e desafios tomam forma.

Os métodos surgem para reutilização de trechos de código, que vão ser usados comumente em vários locais da aplicação repetidas vezes. Como esse conceito é muito comum, não irei dar enfoque nele.

Dentro desse módulo, temos as gems, que são bibliotecas com funcionalidades especificas, onde podemos incrementar nossa aplicação. Alguns exemplos:

  • Validação de dados como cpf, cartão, cnpj
  • Autenticação de usuários
  • Painéis de administração de aplicação
  • Gerar dados em massa

Entre diversas outras. Outro ponto interessante a se ressaltar é a questão de poder criar suas próprias gems, além da metaprogramação, mas isso fica para outro dia.

Agora entramos em um pilar fundamental na programação: Orientação à Objetos

Dentro do curso, adentramos no módulo III que fala de orientação à objetos, o que significa e os seus pilares.

Vale ressaltar que, como vimos na introdução deste artigo, orientação à objetos não é a única maneira de se programar.

Os 4 pilares de orientação à objetos são:

  • Abstração
  • Encapsulamento
  • Herança
  • Polimorfismo

Por mais que pareça complexo, esses assuntos são essenciais, uma vez que farão parte de toda jornada de programação.

A abstração vêm da maneira de como trazemos algo do mundo real para o código.

O encapsulamento é uma maneira de guardar esse código para segurança da aplicação e do usuário final.

A herança é uma forma de transmitir métodos e atributos que fazem parte de outras classes, entretanto é válido ressaltar que no ruby não temos múltiplas heranças.

O polimorfismo é a maneira de objetos de diferentes instâncias terem métodos com mesmo nome e comportamentos completamente diferentes, ou um mesmo método seja adaptado de diferentes formas para cada objeto instanciado.

Dentro disso, chegamos ao fim da jornada de Ruby básico, com alguns projetos implementados e muitos desafios realizados, que realmente testaram meu conhecimento e vontade de saber. Lendo fóruns, documentações, revisando códigos para fazer de uma maneira bem estruturada e legível, além do uso de ferramentas externas que me ajudaram a compreender os assuntos.

Vou ficando por aqui, até uma próxima vez.

Compartilhe
Comentários (2)
Maria Carvalho
Maria Carvalho - 24/04/2024 10:38

Sobre as questões do símbolo:


  • A vantagem é que o símbolo sempre vai ter nome único e poderá ser evocado em qualquer parte do código, além de que não terá seu valor alterado, ele aponta sempre para a mesma memória, uso de referência de memória e não de alocamento de memória.
  • A desvantagem é o uso de símbolos onde se deve ter variáveis, onde o usuário precisa fazer modificações, exemplo de um endereço ou número de telefone, o símbolo não permitira tal feito, não aconselho o uso também em laços de repetição que usem para iterações, entre outras questões.


Símbolos são usados quando é necessário identidade sem se importar necessariamente com o conteúdo, se o conteúdo for importante é recomendado que se use uma string ou variável.


Sobre Gems e Metaprogramação, irei abordar com maior profundidade em outro artigo.

RT

Rafael Tabares - 23/04/2024 17:27

Curti o artigo. Apresenta uma visão abrangente e prática sobre a linguagem de programação Ruby, abordando tanto conceitos fundamentais quanto aspectos avançados como métodos, gems e orientação a objetos. Em relação ao artigo, tenho dois questionamentos:


  1. Sobre a utilização de Símbolos: você mencionou a eficiência dos símbolos em ruby. Poderia explorar um pouco mais sobre como essa característica impacta positivamente o desempenho de uma aplicação? Existe alguma situação específica em que o uso de símbolos seria desaconselhável?
  2. Sobre a Metaprogramação com Gems: você tocou brevemente no tópico de criar suas próprias GEMS e a metaprogramação em ruby. Poderia detalhar como um dev pode começar a criar suas próprias gems?