Basicamente, a saída padrão do Ruby é com o puts
, dessa forma:
puts "Olá, Mundo!"
Os comentários são inseridos dessa forma:
# Comentário de uma linha
=begin
Comentário
de
várias
linhas!
=end
Veja a declaração dos tipos mais comuns (inteiro, float, string e booleano):
numero = 50
real = 9.85
letra = "A"
frase = "Isso é uma String"
logico = true
puts numero
puts real
puts letra
puts frase
puts logico
No Ruby, todos os tipos são classes, onde a classe pai é a Object, de onde todas as outras classes herdam. Os tipos Integer e Float são filhos da classe Numeric. Temos também os tipos String, Symbols e outros. Para ver os tipos das variáveis, digite .class
na variável desejada.
Para pegar dados da linha de comando, usamos o gets
, dessa forma:
print "Digite um número inteiro: " # O print não pula uma linha
numero = gets.to_i # Converte pra inteiro
print "Digite um número real: "
real = gets.to_f # Converte para real
print "Digite uma única letra: "
letra = gets[0] # Pega só o primeiro caractere
print "Digite uma frase: "
frase = gets.strip # Pega a string pura, o strip é pra remover espaços
puts numero
puts real
puts letra
puts frase
Só pra complementar, a conversão de strings é usando a propriedade to_s
.
PS: Podemos rodar o Ruby no terminal interativamente digitando irb
. Ele também permite operações aritméticas diretas, como digitar 10 + 5
.
Existem várias formas de declaras strings em Ruby, veja abaixo:
d1 = "Isto é uma string de aspas duplas!"
d2 = %Q{Isto é uma string de aspas duplas!}
d3 = %{Isto é uma string de aspas duplas!}
d4 = %/Isto é uma string de aspas duplas!/
s1 = 'Isto é uma string de aspas simples!'
s2 = %q{Isto é uma string de aspas simples!}
puts d1
puts d2
puts d3
puts d4
puts s1
puts s2
A concatenação é feita usando +
ou <<
(este último altera variáveis), como podem ver:
preco = 10.99
puts "O produto custa " + '%.2f' % preco + "."
# Pode ser << no lugar do +, mas este altera a variável
Nas strings de aspas duplas, podemos colocar variáveis, números e outros componentes de códigos com interpolações, como por exemplo:
preco = 10.99
puts "O produto custa #{'%.2f' % preco}."
Como visto acima, podemos formatar usando máscaras, são praticamente as mesmas usadas em C (%s para strings, %d para inteiro e %f para float).
puts "#{'%s' % 'String'}"
puts "#{'%d' % 50}"
puts "#{'%f' % 9.85}"
E também podemos usar métodos do objeto da string, como estes:
texto = "Exemplo de String"
puts texto.upcase # Deixa tudo em letra maiúscula
puts texto.downcase # Deixa tudo em minúscula
puts texto.reverse # Inverte o texto
puts texto.concat(" com mais algo") # Concatena texto
puts texto.split # Divide a string
puts texto.gsub!("String", "Texto") # Substituí algo
Isso serve pra criar hashs de senhas:
require "digest/md5"
senha = "123"
md5 = Digest::MD5.new
crip = md5.hexdigest senha
puts crip
PS: Podemos usar também a opção SHA1 para criar hashs.
O Digest é uma gem do Ruby, falaremos delas mais pra frente.
Basicamente, os operadores são os mesmos de outras linguagens, como por exemplo:
print "Digite o primeiro número: "
n1 = gets.to_i
print "Digite o segundo número: "
n2 = gets.to_i
soma = n1 + n2
subs = n1 - n2
mult = n1 * n2
divi = n1 / n2
rest = n1 % n2
puts "#{n1} + #{n2} = #{soma}."
puts "#{n1} - #{n2} = #{subs}."
puts "#{n1} * #{n2} = #{mult}."
puts "#{n1} / #{n2} = #{divi}."
puts "#{n1} % #{n2} = #{rest}."
PS: Da forma acima, ele retornará a divisão inteira. Para divisões reais, faça a conversão, dessa forma:
divi = n1.to_f / n2.to_f
A ordem de precedência matemática é a mesma das demais linguagens (primeiro parênteses, depois multiplicações e divisões incluindo restos, e depois adições e subtrações).
PS: Podemos também colocar atribuição com algum valor, como por exemplo num += 2
ou num -= 3
, que faça a atribuição e a operação juntos no mesmo comando. Concatenação com atribuição também pode ser colocada com o +=
.
Veja um exemplo pra analisar notas:
print "Digite a primeira nota: "
nota1 = gets.to_f
print "Digite a segunda nota: "
nota2 = gets.to_f
media = (nota1 + nota2) / 2
puts "A média das notas é de #{'%.1f' % media}."
Mas diferente de outras linguagens, a biblioteca Math não faz todas as operações como potências e arredondamentos, nós fazemos isso em Python usando métodos do próprio objeto (apenas as raizes são calculadas pelo Math), por exemplo:
print "Digite o primeiro número: "
n1 = gets.to_f
print "Digite o segundo número: "
n2 = gets.to_f
puts "O número absoluto de #{n1} é #{n1.abs}."
puts "A raiz quadrada de #{n1} é #{Math.sqrt(n1)}."
puts "A raiz cúbica de #{n1} é #{Math.cbrt(n1)}."
puts "O quadrado de #{n1} é #{n1 ** 2}."
puts "O cubo de #{n1} é #{n1 ** 3}."
puts "#{n1} elevado à #{n2} é #{n1 ** n2}."
puts "O número #{n1} arredondado pra cima é #{n1.ceil}."
puts "O número #{n1} arredondado pra baixo é #{n1.floor}."
puts "O número #{n1} arredondado pro mais próximo é #{n1.round}."
puts "Número aleatório entre #{n1} e #{n2}: #{rand(n1..n2)}"
No Ruby também temos os operadores lógicos e relacionais. São os mesmos das linguagens C-like. Veja um exemplo de uso deles:
print "Digite sua idade: "
idade = gets.to_i
if idade >= 18 && idade < 70 then
puts "Voto Obrigatório!"
elsif idade >= 16 && idade < 18 || idade >= 70 then
puts "Voto Opcional!"
else
puts "Voto Proibido!"
end
Outro exemplo:
print "Você Fuma? [S/N] "
opc = gets.strip[0]
logico = (opc == "S" || opc == "s") # Retorna um booleano
res = !logico ? "não fuma" : "fuma"
puts "Ele #{res}!"
Veja os operadores Relacionais:
Operador Aritmético | Significado |
---|---|
== | Igualdade. |
!= | Diferente. |
> | Maior. |
< | Menor. |
>= | Maior ou Igual. |
<= | Menor ou Igual. |
Os operadores lógicos são usados:
Operador | Operação | Significado |
---|---|---|
&& | AND | E |
|| | OR | Ou |
! | NOT | Não |