Área do Usuário

Login

Apostila Ruby Completa

Gratuita          703KB          Publicado: 05/01/2010

1199 downloads

Ruby é uma linguagem de script interpretada para programação orientada a objetos de um modo fácil e rápido.

Sumário


1 Introdução
1.1 O que é Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2 Onde encontro Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2 Arrumando as coisas 11
2.1 Preparando sua fonte de consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Preparando o ambiente de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Conhecendo o básico da linguagem 13
3.1 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 Escopo das variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Tipos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.1 Blocos de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.2 Números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.3 Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.5 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.6 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.7 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.8 Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.9 Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.10 Expressões regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.11 Procs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2.12 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Retornando valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Recebendo parâmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Como os parâmetros são enviados . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Métodos destrutivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Métodos predicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Métodos ou funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2.13 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.14 Juntando tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.3.2 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.4 Comentários no código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
34 Classes 47
4.1 Variáveis de instância . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Variáveis de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.3 Métodos de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4 Executando métodos da classe pai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.5 Redefinindo operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Herança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.7 Duplicando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.8 Controle de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.8.1 Métodos públicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.8.2 Métodos privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.8.3 Métodos protegidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.8.4 Especificando o tipo de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.9 Classes e métodos singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5 Entrada e saída 73
5.1 Fluxos simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2 Fluxos mais complexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Lendo arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Escrevendo em arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.2.2 Fluxos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6 Exceçôes 81
6.1 Begin . . . rescue . . . ensure . . . end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.2 Throw . . . catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
7 Módulos 87
8 Threads 91
8.1 Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.2 Criando usando Proc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.3 Sincronizaçâo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.4 Condition variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9 Acessando banco de dados 99
9.1 Abrindo a conexâo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
9.2 Executando queries que nâo retornam resultado . . . . . . . . . . . . . . . . . . . . . . . . 100
9.3 Recuperando dados do banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.4 Preparando comandos e usando parametros variáveis . . . . . . . . . . . . . . . . . . . . . 101
9.5 Metadados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9.6 Trabalhando com blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.7 Output especializado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.7.1 Tabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.7.2 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
10 XML 109
10.1 Lendo arquivos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
10.2 Criando arquivos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
11 YAML 113
11.1 Lendo arquivos YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11.2 Gravando arquivos YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
412 XSLT 117
13 Usando Ruby na web 119
13.1 mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
13.1.1 Instalando o mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
13.1.2 Configurando o servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
13.1.3 Testando o mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
13.2 eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13.2.1 Instalando o eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13.2.2 Configurando o servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13.2.3 Testando o eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13.2.4 Sintaxe do eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
13.3 CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.3.1 Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.3.2 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
13.3.3 Sessôes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
14 Interface Gráfica 131
14.1 Obtendo e compilando o módulo GTK2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
14.2 Hello, GUI world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
14.3 Eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.4 Packing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
14.5 Posicionamento usando tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
14.6 Mais alguns componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
14.6.1 CheckButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
14.6.2 ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
14.6.3 Campos texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
14.6.4 Radio buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
15 Garbage collector 141
15.1 O algoritmo utilizado: mark-and-sweep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
15.2 Como funciona, na teoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
15.3 Como funciona, na prática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
15.4 Otimizando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
16 Unit Testing 147
16.1 A classe a ser testada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
16.2 Unidade de testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
16.3 Falhas nos testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
16.4 Novas funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
17 XML-RPC 155
17.1 Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
17.2 Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
17.3 Acessando de outras linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

(cc) Licença Creative Commons 2008 - 2018 Apostilaz.com.br