Sintaxe Básica
# Sem 'var', sem tipo (int, char, etc.), sem ';'
nome = "Rafael"
idade = 21
money = 31.50
arr = ['1', 2, 3.0]
bool = false
rang = (1..100)
nulo = nil
# Para saber o tipo da variável... '.class'
nome.class #=> String
idade.class #=> Integer
money.class #=> Float
arr.class #=> Array
true.class #=> TrueClass
bool.class #=> FalseClass
nil.class #=> NilClass
rang.class #=> Range
# def nome_do_metodo (parametros)
# codigo
# end
def greet(name)
return 'Hello, ' + name + '!'
end
puts greet('World') #=> 'Hello, World!'
def greet(name)
return 'Hello, ' + name + '!'
end
# Pega um input do usuário -> 'gets.chomp'
name = gets.chomp
# Imprime algo na tela -> 'puts'
puts greet(name)
# Imprime o exato 'objeto' -> p
p [9, 1, '2', nil, false]
# Jeito completo
if condition
# code if condition is true
elsif other_condition
# code if other_condition is true
else
# code if condition and other_condition are false
end
# Ternário
condition ? code_if_true : code_if_false
# One line if
code_to_do if condition
# if not == unless
code_to_do unless condition
# Múltiplos elsif's? Melhor usar case when
case variable
when condition_1
# code when variable == condition_1
when condition_2, condition_3
# code when variable == condition_2 || variable == condition_3
when condition_4
# code when variable == condition_4
else
# code when variable didn't match any condition
end
# Repita o código até a condição se tornar falsa
while condition
# code_to_repeat
end
# Repita o código até a condição se tornar verdadeira
until !condition
# code_to_repeat
end
# Repita o código 10 vezes
for var in 1..10 #=> (1..10) == 1,2,3,4,5,6,7,8,9,10 (Range from 1 to 10)
# code_to_repeat
end
# Repita o código para cada uma das posições da array
metallica = ["James", "Lars", "Robert", "Kirk"]
for name in metallica
puts "#{name} rocks!"
end
# Resultado do 2º for:
James rocks!
Lars rocks!
Robert rocks!
Kirk rocks!You can never write enough
# spec/hello_world_spec.rb
# Podemos requerir o arquivo lib/hello_world.rb da seguinte forma
require 'hello_world'
# Por convenção (apenas), ao escrevermos testes sobre um método específico,
# encapsulamos tudo dentro de um "describe '#nome_do_metodo'", assim:
describe '#hello_world' do
# "it" é a palavra-chave para descrever o que iremos testar e fazer o teste
# em si
it 'Should say "Hello, World!" if no arguments are passed' do
# expect é o que o RSpec irá sinalizar (no terminal) se passou como esperado
# ou não
expect( hello_world ).to eq("Hello World!")
end
it 'Should say "Hello, #{name}!" if a name is passed' do
expect( hello_world('Rafa').to eq("Hello Rafa!")
end
endKeep it nice, keep it clean
$ rubocopDoes Ruby stuff for you
# rubocop:disable all
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec)
desc 'Look for style guide offenses in your code'
task :rubocop do
sh 'rubocop --format simple || true'
end
task default: [:rubocop, :spec]