Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
Ruby em 100 exemplos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
CEI-UFPR
Ruby em 100 exemplos
Commits
7cd82c63
Commit
7cd82c63
authored
Jun 10, 2016
by
Everaldo Gomes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit inicial - 100 exemplos
parents
Changes
100
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
100 changed files
with
4997 additions
and
0 deletions
+4997
-0
001_alo_mundo.rb
001_alo_mundo.rb
+25
-0
002_top_object_main.rb
002_top_object_main.rb
+110
-0
003_expressoes_aritmeticas_sao_chamadas_de_metodos.rb
003_expressoes_aritmeticas_sao_chamadas_de_metodos.rb
+35
-0
004_toda_expressao_retorna_um_valor.rb
004_toda_expressao_retorna_um_valor.rb
+61
-0
005_interpolacao_de_strings.rb
005_interpolacao_de_strings.rb
+24
-0
006_metodos_predicados_terminam_em_interrogacao.rb
006_metodos_predicados_terminam_em_interrogacao.rb
+32
-0
007_todo_objeto_possui_uma_identidade.rb
007_todo_objeto_possui_uma_identidade.rb
+54
-0
008_cuidado_ao_comparar_valor_e_identidade.rb
008_cuidado_ao_comparar_valor_e_identidade.rb
+51
-0
009_parenteses_sao_opcionais_quando_nao_ha_ambiguidade.rb
009_parenteses_sao_opcionais_quando_nao_ha_ambiguidade.rb
+49
-0
010_ultimo_comando_eh_o_valor_de_retorno.rb
010_ultimo_comando_eh_o_valor_de_retorno.rb
+53
-0
011_atribuicao_com_operacao.rb
011_atribuicao_com_operacao.rb
+28
-0
012_atribuicao_multiplca.rb
012_atribuicao_multiplca.rb
+50
-0
013_cuidado_com_alias_de_objetos.rb
013_cuidado_com_alias_de_objetos.rb
+62
-0
014_inspect_e_o_metodo_p.rb
014_inspect_e_o_metodo_p.rb
+69
-0
015_o_operador_splat_em_atribuicoes.rb
015_o_operador_splat_em_atribuicoes.rb
+159
-0
016_ha_variaveis_globais_entre_nos.rb
016_ha_variaveis_globais_entre_nos.rb
+44
-0
017_use_gets_para_a_entrada_padrao.rb
017_use_gets_para_a_entrada_padrao.rb
+61
-0
018_chomp_nos_livra_do_incomodo_barra_n_do_gets.rb
018_chomp_nos_livra_do_incomodo_barra_n_do_gets.rb
+32
-0
019_um_breve_comentario_sobre_o_protocolo_de_conversao_de_tipos.rb
...eve_comentario_sobre_o_protocolo_de_conversao_de_tipos.rb
+48
-0
020_um_breve_comentario_sobre_constantes.rb
020_um_breve_comentario_sobre_constantes.rb
+51
-0
021_crie_blocos_de_comentarios_com_igual_begin_e_igual_end.rb
...crie_blocos_de_comentarios_com_igual_begin_e_igual_end.rb
+26
-0
022_certifique_se_de_que_um_codigo_sempre_sera_executado_primeiro_com_BEGIN_chaves.rb
...codigo_sempre_sera_executado_primeiro_com_BEGIN_chaves.rb
+25
-0
023_certifique_se_de_que_um_codigo_sempre_sera_executado_antes_do_programa_terminar_com_END_chaves.rb
...ra_executado_antes_do_programa_terminar_com_END_chaves.rb
+20
-0
024_certifique_se_de_que_um_codigo_sera_executado_antes_do_programa_terminar_com_at_exit.rb
..._sera_executado_antes_do_programa_terminar_com_at_exit.rb
+45
-0
025_underline_underline_END_underline_underline_denota_fim_do_programa.rb
...derline_END_underline_underline_denota_fim_do_programa.rb
+32
-0
026_temos_blocos_de_expressoes_com_begin_e_end_mas_nao_confunda_com_blocos_do_end.rb
...oes_com_begin_e_end_mas_nao_confunda_com_blocos_do_end.rb
+25
-0
027_caso_uma_excecao_nao_seja_capturada_o_programa_termina_com_uma_mensagem_de_erro.rb
..._capturada_o_programa_termina_com_uma_mensagem_de_erro.rb
+13
-0
028_capture_uma_excecao_com_rescue.rb
028_capture_uma_excecao_com_rescue.rb
+25
-0
029_rescue_pode_ser_utilizado_dentro_de_metodos_sem_necessidade_de_begin_end.rb
...ilizado_dentro_de_metodos_sem_necessidade_de_begin_end.rb
+24
-0
030_caso_nenhuma_excecao_seja_capturada_por_rescue_execute_um_codigo_alternativo_com_else.rb
...rada_por_rescue_execute_um_codigo_alternativo_com_else.rb
+35
-0
031_garanta_que_um_codigo_sempre_sera_executado_com_ensure.rb
...garanta_que_um_codigo_sempre_sera_executado_com_ensure.rb
+44
-0
032_capture_todos_os_tipos_de_excecoes_com_rescue_exception.rb
...apture_todos_os_tipos_de_excecoes_com_rescue_exception.rb
+33
-0
033_execute_novamente_o_bloco_que_causou_a_excecao_com_retry.rb
...ecute_novamente_o_bloco_que_causou_a_excecao_com_retry.rb
+27
-0
034_use_rescue_apos_um_unico_comando_como_uma_especie_de_or.rb
...se_rescue_apos_um_unico_comando_como_uma_especie_de_or.rb
+29
-0
035_lance_suas_proprias_excecoes_com_raise_ou_fail.rb
035_lance_suas_proprias_excecoes_com_raise_ou_fail.rb
+61
-0
036_um_pouco_sobre_catch_e_throw.rb
036_um_pouco_sobre_catch_e_throw.rb
+55
-0
037_use_ponto_de_interrogacao_e_dois_pontos_como_operador_ternario.rb
...o_de_interrogacao_e_dois_pontos_como_operador_ternario.rb
+21
-0
038_unless_e_o_mesmo_que_if_not.rb
038_unless_e_o_mesmo_que_if_not.rb
+37
-0
039_use_elif_no_lugar_de_else_if.rb
039_use_elif_no_lugar_de_else_if.rb
+35
-0
040_use_a_palavra_then_para_escrever_um_if_numa_unica_linha.rb
...se_a_palavra_then_para_escrever_um_if_numa_unica_linha.rb
+15
-0
041_guard_clause_use_if_ou_inless_apos_um_comando.rb
041_guard_clause_use_if_ou_inless_apos_um_comando.rb
+71
-0
042_use_while_para_modificar_um_bloco_begin_end_ou_um_unico_comando.rb
..._para_modificar_um_bloco_begin_end_ou_um_unico_comando.rb
+41
-0
043_use_until_para_modificar_um_bloco_begin_end_ou_um_unico_comando.rb
..._para_modificar_um_bloco_begin_end_ou_um_unico_comando.rb
+39
-0
044_cuidado_com_a_prioridade_de_alguns_operadores.rb
044_cuidado_com_a_prioridade_de_alguns_operadores.rb
+75
-0
045_use_case_when_para_escolher_entre_multiplas_condicoes.rb
045_use_case_when_para_escolher_entre_multiplas_condicoes.rb
+60
-0
046_use_case_com_else_para_escolher_uma_opcao_padrao.rb
046_use_case_com_else_para_escolher_uma_opcao_padrao.rb
+36
-0
047_use_case_when_then_para_expressoes_na_mesma_linha.rb
047_use_case_when_then_para_expressoes_na_mesma_linha.rb
+29
-0
048_use_case_when_para_testar_a_classe_de_seus_objetos.rb
048_use_case_when_para_testar_a_classe_de_seus_objetos.rb
+88
-0
049_ruby_possui_o_comando_for_mas_voce_nao_deveria_usa_lo_nunca.rb
...possui_o_comando_for_mas_voce_nao_deveria_usa_lo_nunca.rb
+25
-0
050_ruby_tambem_possui_o_comando_while_e_until_mas_eh_muito_raro_utiliza_los_tambem.rb
...ndo_while_e_until_mas_eh_muito_raro_utiliza_los_tambem.rb
+71
-0
051_use_break_para_terminar_o_loop_mais_interno.rb
051_use_break_para_terminar_o_loop_mais_interno.rb
+49
-0
052_use_next_para_pular_para_o_final_do_loop_seguindo_para_a_proxima_iteracao.rb
..._para_o_final_do_loop_seguindo_para_a_proxima_iteracao.rb
+46
-0
053_use_redo_para_repetir_a_iteracao.rb
053_use_redo_para_repetir_a_iteracao.rb
+29
-0
054_use_o_metodo_loop_para_loops_infinitos_ou_nao_com_estilo.rb
...e_o_metodo_loop_para_loops_infinitos_ou_nao_com_estilo.rb
+75
-0
055_use_heredoc_para_strings_longas.rb
055_use_heredoc_para_strings_longas.rb
+172
-0
056_existem_diversas_formas_de_se_declarar_uma_string.rb
056_existem_diversas_formas_de_se_declarar_uma_string.rb
+58
-0
057_cuidado_com_operacoes_que_criam_novas_strings.rb
057_cuidado_com_operacoes_que_criam_novas_strings.rb
+56
-0
058_use_o_metodo_split_para_separar_uma_string.rb
058_use_o_metodo_split_para_separar_uma_string.rb
+21
-0
059_retorne_uma_substring_de_uma_string.rb
059_retorne_uma_substring_de_uma_string.rb
+32
-0
060_substitua_trechos_de_uma_string_com_replace_e_gsub.rb
060_substitua_trechos_de_uma_string_com_replace_e_gsub.rb
+24
-0
061_declarando_arrays_literais.rb
061_declarando_arrays_literais.rb
+28
-0
062_acessando_elementos_de_um_array.rb
062_acessando_elementos_de_um_array.rb
+32
-0
063_uma_notacao_simples_para_arrays_de_strings.rb
063_uma_notacao_simples_para_arrays_de_strings.rb
+36
-0
064_conheca_o_operador_da_pa.rb
064_conheca_o_operador_da_pa.rb
+43
-0
065_com_unshift_e_pop_ja_eh_possivel_implementar_as_estruturas_de_dados_mais_basicas_como_filas_e_pilhas.rb
...s_estruturas_de_dados_mais_basicas_como_filas_e_pilhas.rb
+60
-0
066_use_range_para_representar_intervalos.rb
066_use_range_para_representar_intervalos.rb
+33
-0
067_use_range_para_gerar_rapidamente_arrays.rb
067_use_range_para_gerar_rapidamente_arrays.rb
+28
-0
068_declarando_hashes_literais.rb
068_declarando_hashes_literais.rb
+80
-0
069_use_fetch_para_retornar_um_valor_default_quando_a_chave_nao_existir.rb
...a_retornar_um_valor_default_quando_a_chave_nao_existir.rb
+93
-0
070_vamos_usar_o_valor_padrao_definido_no_construtor_de_uma_hash_para_calcular_fibonacci_de_uma_forma_interessante.rb
...hash_para_calcular_fibonacci_de_uma_forma_interessante.rb
+52
-0
071_gerencie_valores_default_de_argumentos_com_merge.rb
071_gerencie_valores_default_de_argumentos_com_merge.rb
+61
-0
072_use_open_struct_para_uma_estrutura_de_dados_intermediaria_entre_uma_hash_e_uma_classe.rb
...ura_de_dados_intermediaria_entre_uma_hash_e_uma_classe.rb
+53
-0
073_uma_pequena_introducao_a_blocos.rb
073_uma_pequena_introducao_a_blocos.rb
+120
-0
074_blocos_podem_receber_argumentos.rb
074_blocos_podem_receber_argumentos.rb
+34
-0
075_verifique_se_um_bloco_foi_passado_para_um_metodo_com_block_given.rb
...se_um_bloco_foi_passado_para_um_metodo_com_block_given.rb
+39
-0
076_capture_um_bloco_com_ampersand.rb
076_capture_um_bloco_com_ampersand.rb
+19
-0
077_um_bloco_e_armazenado_como_um_proc.rb
077_um_bloco_e_armazenado_como_um_proc.rb
+26
-0
078_lambdas_verificam_numero_de_parametros_e_return_termina_sua_execução.rb
...cam_numero_de_parametros_e_return_termina_sua_execução.rb
+91
-0
079_blocos_estimulam_uma_filosofia_passe_para_a_frente.rb
079_blocos_estimulam_uma_filosofia_passe_para_a_frente.rb
+65
-0
080_ruby_possui_enumeradores.rb
080_ruby_possui_enumeradores.rb
+53
-0
081_voce_pode_usar_um_enumerador_para_gerar_numeros_de_fibonacci.rb
...ode_usar_um_enumerador_para_gerar_numeros_de_fibonacci.rb
+32
-0
082_o_metodo_each_percorre_todos_os_elementos_de_uma_colecao.rb
...metodo_each_percorre_todos_os_elementos_de_uma_colecao.rb
+94
-0
083_nunca_mais_use_if_para_descobrir_o_menor_ou_maior_elemento_de_uma_colecao.rb
...ara_descobrir_o_menor_ou_maior_elemento_de_uma_colecao.rb
+23
-0
084_transforme_todos_os_elementos_de_uma_colecao_com_map_ou_collect.rb
...e_todos_os_elementos_de_uma_colecao_com_map_ou_collect.rb
+42
-0
085_use_reduce_inject_para_percorrer_uma_colecao_e_retornar_um_valor.rb
..._inject_para_percorrer_uma_colecao_e_retornar_um_valor.rb
+48
-0
086_pra_nao_dizer_que_nao_falamos_de_expressoes_regulares.rb
086_pra_nao_dizer_que_nao_falamos_de_expressoes_regulares.rb
+63
-0
087_um_pouco_sobre_modulos.rb
087_um_pouco_sobre_modulos.rb
+55
-0
088_inclua_modulos_nas_classes.rb
088_inclua_modulos_nas_classes.rb
+71
-0
089_encapsule_seus_dados_com_variaveis_de_instancia.rb
089_encapsule_seus_dados_com_variaveis_de_instancia.rb
+87
-0
090_exponha_suas_variaveis_com_attribute_accessors.rb
090_exponha_suas_variaveis_com_attribute_accessors.rb
+118
-0
091_uma_classe_tambem_pode_ter_variaveis.rb
091_uma_classe_tambem_pode_ter_variaveis.rb
+52
-0
092_uma_forma_elegante_de_atribuir_valores.rb
092_uma_forma_elegante_de_atribuir_valores.rb
+54
-0
093_voce_pode_abrir_uma_classe_e_adicionar_novos_metodos.rb
093_voce_pode_abrir_uma_classe_e_adicionar_novos_metodos.rb
+95
-0
094_uma_classe_pode_ter_outra_classe_dentro_dela.rb
094_uma_classe_pode_ter_outra_classe_dentro_dela.rb
+53
-0
095_uma_classe_pode_herdar_de_outra.rb
095_uma_classe_pode_herdar_de_outra.rb
+53
-0
096_se_anda_como_um_pato_e_se_fala_como_um_pato_entao_e_um_pato.rb
...da_como_um_pato_e_se_fala_como_um_pato_entao_e_um_pato.rb
+83
-0
097_use_os_modificadores_de_acesso_para_controlar_encapsulamento_de_metodos.rb
...res_de_acesso_para_controlar_encapsulamento_de_metodos.rb
+106
-0
098_use_a_palavra_super_para_invocar_o_metodo_na_classe_pai.rb
...se_a_palavra_super_para_invocar_o_metodo_na_classe_pai.rb
+0
-0
099_use_defined_para_descobrir_o_que_uma_expressao_significa.rb
...e_defined_para_descobrir_o_que_uma_expressao_significa.rb
+0
-0
100_leia_um_arquivo_com_read.rb
100_leia_um_arquivo_com_read.rb
+0
-0
No files found.
001_alo_mundo.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 001 - Alô Mundo
#
# O caractere # representa um comentário
"Alô mundo"
# A partir do Ruby 2.0 (estamos no 2.3) todas as Strings são
# UTF-8 por default, portanto pode utilizar acento sem problemas
# E caracteres especiais, caso deseje
# Para imprimir, utilize puts. O comando acima não imprime nada.
puts
"Alô mundo"
# Após imprimir, o método puts imprime um separador de linha (\n)
# e retorna nil (valor nulo)
002_top_object_main.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 001 - Top Object Main
#
# Na linguagem Ruby, um conceito muito importante é o de self.
# Semelhante ao self do Python e ao this do Java e Javascript,
# o self do Ruby indica o "receiver". Receiver é o objeto que
# recebe uma chamada de método.
#
# Dessa forma, quando executamos puts, no exemplo 001, esse
# método está sendo executado no receiver (self).
#
# Num script, self aponta inicialmente para um objeto especial
# chamado (main). Não confunda com o método main de linguagens
# como C e Java. Ruby não possui um método main e se você invocar
# uma variável main, sem tê-la declarado irá lançar um erro, de
# variável não declarada.
#
# O objeto main (top-Level Object) é uma instância da classe Object.
#
# A classe Object inclui o módulo Kernel, que inclui o módulo IO,
# que por sua vez define o método puts
#
# http://ruby-doc.org/core-2.3.1/Object.html
# http://ruby-doc.org/core-2.3.1/Kernel.html
# http://ruby-doc.org/core-2.3.1/IO.html#method-i-puts
#
# A classe Object não é a raiz da hierarquia de objetos. A partir do
# Ruby 1.9, Object herda da classe BasicObject
#
# http://ruby-doc.org/core-2.3.1/BasicObject.html
#
puts
"Fora de classes e módulos self é
#{
self
}
"
puts
"A classe do Top Level Object é
#{
self
.
class
}
"
# Dentro de um método definido fora de Módulos ou classes,
# self continua sendo main
def
um_metodo
puts
"Dentro de um método definido em Top-Level Object self é
#{
self
}
"
end
um_metodo
module
UmModulo
def
self
.
um_metodo
puts
"Dentro de um método de um módulo self é
#{
self
}
"
end
end
UmModulo
.
um_metodo
#
# Dentro de um módulo, self será o nome do Módulo
# Se o Módulo for incluído dentro de uma classe,
# self será a classe que o incluiu
#
#
#
#
class
UmaClasse
def
self
.
um_metodo
puts
"Dentro de um método definido numa classe self é
#{
self
}
"
end
end
UmaClasse
.
um_metodo
#
# Dentro de uma classe, self será o nome da Classe
#
#
#
# Method Dispatch
#
# Quando um método é invocado, se ele não for encontrado em self,
# Ruby automaticamente procura na hierarquia de classes
#
# Para descobrir essa hierarquia, use o método ancestors da
# classe do objeto
#
#
puts
"Os ancestrais de Top-Level Object são
#{
self
.
class
.
ancestors
}
"
puts
"Os anscestrais de um módulo são
#{
UmModulo
.
class
.
ancestors
}
"
puts
"Os ancestrais de uma classe são
#{
UmaClasse
.
class
.
ancestors
}
"
#
# Dessa forma, entendemos como o método puts é invocado de acordo
# com self e a hierarquia de Objetos. Mesmo ele não estando presente
# num módulo ou classe, ele está presente em seus ancestrais
#
003_expressoes_aritmeticas_sao_chamadas_de_metodos.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 003 - Expressões aritméticas são chamadas de métodos
#
# Na linguagem Ruby, números são objetos da classe Fixnum.
# A partir da versão 2.4, todos os números serão da classe Integer
# Atualmente, números muito grandes pertencem à classe Bignum.
#
# De qualquer forma, todos os números são objetos.
# E uma expressão aritmética é, na verdade, uma chamada de método
#
#
#
#
2
+
5
# => 7
2
.
send
(:
+
,
5
)
# => 7
2
.
class
# => Fixnum
# Você pode usar o caractere _ para tornar números grandes mais legíveis
1_000_000_000_000_000_000_000_000
.
class
# => Bignum
2
.
public_methods
# => [:%, :&, :*, :+, :-, :/, :<, :>, :^, :|, :~, :-@, :**, :<=>, :<<, :>>, :<=, :>=, :==, :===, :[], :inspect, :size, :succ, :to_s, :to_f, :div, :divmod, :fdiv, :modulo, :abs, :magnitude, :zero?, :odd?, :even?, :bit_length, :to_int, :to_i, :next, :upto, :chr, :ord, :integer?, :floor, :ceil, :round, :truncate, :downto, :times, :pred, :to_r, :numerator, :denominator, :rationalize, :gcd, :lcm, :gcdlcm, :+@, :eql?, :singleton_method_added, :coerce, :i, :remainder, :real?, :nonzero?, :step, :positive?, :negative?, :quo, :arg, :rectangular, :rect, :polar, :real, :imaginary, :imag, :abs2, :angle, :phase, :conjugate, :conj, :to_c, :pretty_print, :pretty_print_cycle, :between?, :pretty_print_instance_variables, :pretty_print_inspect, :instance_of?, :public_send, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :private_methods, :kind_of?, :instance_variables, :tap, :public_method, :singleton_method, :is_a?, :extend, :define_singleton_method, :method, :to_enum, :enum_for, :pretty_inspect, :=~, :!~, :respond_to?, :freeze, :display, :object_id, :send, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :trust, :untrusted?, :methods, :protected_methods, :frozen?, :public_methods, :singleton_methods, :!, :!=, :__send__, :equal?, :instance_eval, :instance_exec, :__id__]
004_toda_expressao_retorna_um_valor.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 004 - Toda Expressão Retorna um Valor
#
#
# Em Ruby, todas as expressões retornam um valor.
# Além das expressões aritméticas, também são expressões:
#
#
# Atribuição
# Chamada de método
# Definição de classes e Módulos
# Comandos de Controle e blocos (if, for, while etc.)
#
# O método puts retorna nil, que quando impresso não retorna nada
# O objeto nil é uma instância da classe NilClass
retorno
=
puts
(
"Uma mensagem qualquer"
)
puts
"O valor de retorno é '
#{
retorno
}
'"
puts
retorno
.
inspect
# Atribuição múltipla
a
=
b
=
c
=
d
=
e
=
f
=
0
# => 0
puts
"a=
#{
a
}
"
puts
"b=
#{
b
}
"
puts
"c=
#{
c
}
"
puts
"d=
#{
d
}
"
puts
"e=
#{
e
}
"
puts
"f=
#{
f
}
"
a
=
if
true
10
else
20
end
puts
"a agora vale 10, porque o comando if também retorna valores.
O valor retornado é do último comando executado no bloco"
# Não é necessário usar ponto-e-vírgula em Ruby. A não ser que você queira
# definir uma classe ou método vazios numa mesma linha
uma_classe
=
class
A
;
end
puts
uma_classe
.
inspect
# => nil
# uma_classe é nulo, porque a classe não retornou nenhum valor em sua definição
005_interpolacao_de_strings.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 005 - Interpolação de Strings
#
#
# Nos exemplos anteriores, utilizamos interpolação de strings,
# sem explicá-la.
#
# A interpolação de strings (não funciona com strings de aspas simples)
# permite que objetos sejam automaticamente convertidos para strings
# sem a necessidade de invocar explicitamente operadores, como a concetanação
# e a conversão para strings
#
#
a
=
0
puts
'#{a}'
# imprime #{a}, aspas simples
puts
"
#{
a
}
"
# imprime 0
puts
"
#{
1
+
1
}
"
# imprime 2. Use expressões dentro de #{}
006_metodos_predicados_terminam_em_interrogacao.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 006 - Métodos de predicados terminam em ponto de interrogação
#
#
# Na linguagem Ruby, existe uma convenção de que métodos de predicados:
# métodos que retornam um valor booleano, verdadeiro ou falso, terminam
# com o caractere ponto de interrogação (ao contrário de outras linguagens,
# onde é um caractere inválido).
#
#
puts
nil
.
nil?
puts
false
.
nil?
puts
""
.
nil?
puts
0
.
nil?
puts
0
.
even?
puts
1
.
odd?
puts
-
1
.
negative?
puts
42
.
positive?
puts
""
.
empty?
puts
"Mariana"
.
include?
(
"ana"
)
#
# Observe que nem false, nem string vazia e nem 0 são valores nulos
#
# Em Ruby, apenas dois valores são falsos: nil e false
# O restante é verdadeiro
# Mas se você comparar nil == false, retorna falso
#
007_todo_objeto_possui_uma_identidade.rb
0 → 100644
View file @
7cd82c63
# 31/05/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 007 - Todo objeto possui uma identidade, que é seu endereço
#
#
# Objetos são armazenados em memória. Cada objeto em Ruby
# possui seu endereço, que pode ser acessado pelo método object_id.
#
#
# Fixnum, valores iguais compartilham o mesmo endereço (decisão de implementação).
# Bignum, valores iguais podem ter endereços distintos.
# O mesmo para Strings e todos os outros objetos.
# Existe apenas um objeto do tipo NilClass, TrueClass e FalseClass
#
puts
5
.
object_id
puts
5
.
object_id
cwb
=
"Curitiba"
curitiba
=
"Curitiba"
puts
"Endereço de cwb=
#{
cwb
.
object_id
}
"
puts
"Endereço de curitiba=
#{
curitiba
.
object_id
}
"
# => nil
# Valores de cwb e curitiba são iguais, endereços são distintos
#
puts
ObjectSpace
.
count_objects
# ObjectSpace#count_objects armazena o número total
# de objetos
#
#
cwb
=
:curitiba
curitiba
=
:curitiba
puts
"Símbolos compartilham identidade"
# => nil
puts
"Endereço de cwb=
#{
cwb
.
object_id
}
"
puts
"Endereço de curitiba=
#{
curitiba
.
object_id
}
"
# => nil
# Símbolos são constantes strings, começam pelo caractere dois-pontos
#
#
#
008_cuidado_ao_comparar_valor_e_identidade.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 008 - Cuidado ao comparar valor e identidade
#
#
# Ao comparar dois objetos, cuidado com o tipo de comparação:
# de valor ou identidade (endereço / object_id)
#
#
# O método equal? compara identidade
# O método eql? ou == compara valor
#
#
## Fixnum
# =>
puts
5
==
5
puts
5
.
eql?
5
puts
5
.
equal?
5
## Bignum
puts
1_000_000_000_000_000_000_000_000
==
1_000_000_000_000_000_000_000_000
puts
1_000_000_000_000_000_000_000_000
.
eql?
1_000_000_000_000_000_000_000_000
puts
1_000_000_000_000_000_000_000_000
.
equal?
1_000_000_000_000_000_000_000_000
# retorna false
## Strings
cwb
=
"Curitiba"
curitiba
=
"Curitiba"
puts
cwb
==
curitiba
puts
cwb
.
eql?
curitiba
puts
cwb
.
equal?
curitiba
## Símbolos
cwb
=
:curitiba
# => :curitiba
curitiba
=
:curitiba
puts
cwb
==
curitiba
puts
cwb
.
eql?
curitiba
puts
cwb
.
equal?
curitiba
# retorna true, porque símbolos são constantes
009_parenteses_sao_opcionais_quando_nao_ha_ambiguidade.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 009 - Parênteses são opcionais quando não há ambiguidade
#
#
# Nos exemplos anteriores, fizemos uso de várias definições
# e chamadas de métodos sem o uso de parênteses.
#
# Isso porque, em Ruby, parênteses são necessários somente
# para evitar ambiguidades
#
puts
(
"Alô Mundo"
)
puts
"Alô mundo"
# É de bom tom utilizar parênteses na definição de métodos
def
metodo1
(
a
,
b
)
"(Metodo1: a=
#{
a
}
b=
#{
b
}
)"
end
def
metodo2
(
c
,
d
)
# ~> ArgumentError: wrong number of arguments (given 3, expected 2)
"(Metodo2: c=
#{
c
}
d=
#{
d
}
)"
end
# As duas chamadas são equivalentes
puts
metodo1
metodo2
(
"val1"
,
"val2"
),
"val3"
puts
metodo1
(
metodo2
(
"val1"
,
"val2"
),
"val3"
)
##
## Esta linha abaixo causa o erro ArgumentError
## 3 argumentos dados, 2 esperados
##
## É necessário usar parênteses porque a chamada é ambígua
## Ruby não consegue distinguir que val3 pertence a método 1
##
#puts metodo1 metodo2 "val1", "val2", "val3" # =>
# Em casos de ambiguidades, somente os métodos "mais internos" precisam
# de parênteses.
010_ultimo_comando_eh_o_valor_de_retorno.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 010 - O último comando é o valor de retorno
#
# Além dos parênteses opcionais e das expressões
# aritméticas que, em verdade, são chamadas de métodos,
# Ruby provê mais "açúcar sintático" (syntax sugar).
#
# O último comando de um bloco ou método é o valor
# de retorno. Esta funcionalidade é coerente com o
# princípio de que "toda expressão retorna um valor".
# Logo, blocos também são expressões.
#
#
# Caso deseje, pode explicitar um retorno com a palavra chave
# return
#
# Se a expressão for vazia, o valor retornado será nil
#
#
def
alo_mundo
"Alô mundo"
end
puts
alo_mundo
# => nil
def
metodo_vazio
end
puts
"Método vazio=
#{
metodo_vazio
}
"
# => nil
x
=
if
true
1
else
2
end
# Imprime 1 # =>
puts
x
## Imprime números de 0 a 9
## Depois x, vale 10, pois é o retorno do bloco
x
=
10
.
times
{
|
i
|
puts
i
}
puts
"x vale 10, x=
#{
x
}
"
# => nil
011_atribuicao_com_operacao.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 011 - Atribuição com Operação
#
# Ruby também facilita a escrita de atribuições com
# operações de aritmética e lógica
#
#
x
=
10
x
+=
1
# Imprime 11
puts
x
a
=
true
a
&&=
false
# Imprime false
puts
a
#
# Ruby não tem os operadores ++, como na linguagem c
#
012_atribuicao_multiplca.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 012 - Atribuição múltipla
#
# Ruby permite que inúmeras variáveis sejam atribuídas
# com um único operador de atribuição (=)
#
# Use o operador igual para separar os valores
#
x
,
y
=
2
,
3
# Imprime 2 e 3
puts
x
,
y
# Você pode até mesmo trocar os valores, com um único comando
# e sem usar variáveis auxiliares
# Em C:
#
# aux = x;
# x = y;
# y = aux;
#
x
,
y
=
y
,
x
# Imprime 3 e 2, agora
puts
x
,
y
a
,
b
=
10
puts
a
,
b
# Agora b é nulo
puts
"
#{
b
.
nil?
}
"
c
,
d
=
5
,
6
,
7
# Não gera nenhum erro. O valor 7 é descartado
puts
c
,
d
013_cuidado_com_alias_de_objetos.rb
0 → 100644
View file @
7cd82c63
# 02/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 013 - Cuidado com Alias de Objetos
#
#
# Em linguagens orientadas a objetos, tais como Ruby, Python
# e Java, deve-se tomar cuidado com alias ou aliasing de
# objetos.
#
# Quando você faz uma cópia por atribuição ou argumento de
# método, deve-se estar ciente se o valor é realmente copiado
# para um novo objeto ou se a nova variável é apenas um alias
# de um objeto já existente.
#
#
# Lembre-se, uma variável é apenas uma referência que aponta
# para o endereço do objeto.
#
#
def
um_metodo
(
y
)
y
=
20
end
x
=
10
um_metodo
(
x
)