ruby on rails - i love ruby (português)

Download Ruby on Rails - i Love Ruby (Português)

Post on 19-Jan-2016

23 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Tutorial de Ruby

    Eustaquio TaQ Rangel (eustaquiorangel@yahoo.com)

    19 de julho de 2005

  • Este trabalho esta licenciado sob uma Licenca Creative Commons Atribuicao-Uso Nao-Comercial-Compatilhamento pela mesma licenca.

    Para ver uma copia desta licenca, visitehttp://creativecommons.org/licenses/by-nc-sa/2.5/br/ou envie uma carta para

    Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

    Este documento foi feito usando LATEX.Versao 0.1

    Para atualizacoes, visite http://beam.to/taq/tutorialruby.phpA figura do logotipo de Ruby acima e de minha livre autoria, nao representando um

    logotipo oficial

    2

  • Sumario

    1 Introducao 91.1 O que e Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Onde encontro Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    2 Arrumando as coisas 112.1 Preparando sua fonte de consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.2 Preparando o ambiente de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    3 Conhecendo o basico da linguagem 133.1 Variaveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.1.1 Escopo das variaveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2 Tipos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    3.2.1 Blocos de codigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.2 Numeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2.3 Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.2.5 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2.6 Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2.7 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2.8 Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2.9 Smbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.2.10 Expressoes regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.2.11 Procs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.2.12 Metodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    Retornando valores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Recebendo parametros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Como os parametros sao enviados . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Metodos destrutivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Metodos predicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Metodos ou funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    3.2.13 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.14 Juntando tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    3.3 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.3.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3.3.2 Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43until . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44begin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.4 Comentarios no codigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    3

  • 4 Classes 474.1 Variaveis de instancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.2 Variaveis de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524.3 Metodos de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4 Executando metodos da classe pai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.5 Redefinindo operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.6 Heranca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584.7 Duplicando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.8 Controle de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

    4.8.1 Metodos publicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.8.2 Metodos privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.8.3 Metodos protegidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.8.4 Especificando o tipo de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    4.9 Classes e metodos singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    5 Entrada e sada 735.1 Fluxos simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.2 Fluxos mais complexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    5.2.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Lendo arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Escrevendo em arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

    5.2.2 Fluxos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

    6 Excecoes 816.1 Begin . . . rescue . . . ensure . . . end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.2 Throw . . . catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    7 Modulos 87

    8 Threads 918.1 Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.2 Criando usando Proc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.3 Sincronizacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938.4 Condition variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    9 Acessando banco de dados 999.1 Abrindo a conexao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999.2 Executando queries que nao retornam resultado . . . . . . . . . . . . . . . . . . . . . . . . 1009.3 Recuperando dados do banco de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.4 Preparando comandos e usando parametros variaveis . . . . . . . . . . . . . . . . . . . . . 1019.5 Metadados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039.6 Trabalhando com blocos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049.7 Output especializado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

    9.7.1 Tabular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059.7.2 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    10 XML 10910.1 Lendo arquivos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10910.2 Criando arquivos XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    11 YAML 11311.1 Lendo arquivos YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11311.2 Gravando arquivos YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    4

  • 12 XSLT 117

    13 Usando Ruby na web 11913.1 mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

    13.1.1 Instalando o mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11913.1.2 Configurando o servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11913.1.3 Testando o mod ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

    13.2 eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12113.2.1 Instalando o eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12113.2.2 Configurando o servidor Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12113.2.3 Testando o eruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .