Você está na página 1de 8

APRENDA A PROGRAMAR (Ruby on Rails)

De Chris Pine, Traduo Fabio Akita http://aprendaaprogramar.rubyonrails.com.br/

0. Iniciando Quando voc programa um computador, voc tem que "falar" em uma lngua que o seu computador entenda: uma linguagem de programao. Existem muitas e muitas linguagens por a, e muitas so excelentes. Neste tutorial eu escolhi usar a minha favorita, Ruby. Alm de ser a minha favorita, Ruby tambm a linguagem mais fcil que eu j vi (e eu j vi uma boa quantidade delas). Alis, esta a verdadeira razo pela qual estou escrevendo este tutorial: Eu no decidi escrever este tutorial e a escolhi Ruby por ser minha favorita; ao invs disso, eu descobri que o Ruby era to fcil que eu decidi que deveria haver um bom tutorial que a usasse voltado para iniciantes. Foi a simplicidade do Ruby que inspirou este tutorial, no o fato dela ser minha favorita. (Escrever um tutorial similar usando outra linguagem, C++ ou Java, teria tomado centenas e centenas de pginas.) Mas no pense que Ruby uma linguagem para iniciantes s porque fcil! Ela uma linguagem poderosa, de nvel profissional como poucas. Quando voc escreve algo em uma linguagem humana, o que escrito chamado de texto. Quando voc escreve algo em uma linguagem de computador, o que escrito chamado de cdigo. Eu inclu vrios exemplos de cdigo Ruby por todo este tutorial, a maioria deles programas completos que voc pode rodar no seu prprio computador. Para deixar o cdigo mais legvel, eu colori partes dele com cores diferentes. (Por exemplo, nmeros esto sempre em verde.) Qualquer coisa que voc tiver que digitar estar sempre numa caixa cinza, e qualquer coisa que o programa imprimir estar em uma caixa amarela. Se voc encontrar algo que no entende, ou se voc tiver uma pergunta que no foi respondida, tome nota e continue a ler! bem possvel que a resposta venha em um captulo mais adiante. Porm, se sua pergunta no for respondida at o ltimo captulo, eu lhe mostrarei onde voc pode ir para perguntar. Existem muitas pessoas maravilhosas por a mais que dispostas a ajudar; voc s precisa saber onde elas esto. Mas primeiro ns precisamos baixar e instalar o Ruby no nosso computador. Instalao no Windows A instalao do Ruby no Windows muito fcil. Primeiro, voc precisa baixar o Instalador Ruby. Pode haver mais de verso para escolher; este tutorial usa a verso 1.8.7, ento assegure-se de que o que voc baixar seja ao menos to recente quanto ela. (Eu pegaria a ltima verso disponvel.) Ento simplesmente rode o programa de instalao. Ele perguntar onde voc gostaria de instalar o Ruby. A no ser que voc tenha uma boa razo para no fazer isso, eu instalaria no lugar recomendado. Para programar, voc precisa poder escrever programas e rod-los. Para fazer isso, voc vai precisar de um editor de texto e uma linha de comando. O instalador do Ruby vem com um editor de texto adorvel chamado SciTE (the Scintilla Text Editor). Voc pode rodar o SciTE selecionando-o no menu Iniciar. Se voc quiser que o seu cdigo seja colorido como os exemplos deste tutorial, baixe estes arquivos e coloque-os na sua pasta SciTE (c:/ruby/scite se voc escolher o local recomendado).

Seria tambm uma boa idia criar um diretrio em algum lugar para manter todos os seus programas. Tenha certeza que, quando voc salvar um programa, esteja salvando neste diretrio. Para ir para sua linha de comando, selecione Prompt de Comando na pasta Acessrios do seu menu Iniciar. Voc vai querer navegar para o diretrio onde voc mantm seus programas. Digitar cd .. levar voc para o diretrio anterior, e cd nome_do_diretorio colocar voc dentro do diretrio chamado nome_do_diretorio. Para ver todos seus diretrios dentro do diretrio atual, digite dir /ad. E isto! Voc est pronto para aprender a programar. Instalao para Macintosh Se voc tiver um Mac OS X 10.2 (Jaguar), ento voc j tem Ruby no seu sistema! O que poderia ser mais fcil? Infelizmente, eu no acho que voc possa usar Ruby no Mac OS X 10.1 e verses anteriores. Para programar, voc precisa ser capaz de escrever programas e execut-los. Para fazer isto, voc precisar de um editor de textos e uma linha de comando. Sua linha de comando est acessvel atravs da aplicao Terminal (encontrada em Aplicaes/Utilitrios). Para um editor de textos, voc pode usar qualquer um com que voc esteja familiarizado ou se sinta confortvel usando. Se voc usa TextEdit, entretanto, tenha certeza que voc est salvando seus programas como somente-texto! Caso contrrio seus programas no funcionaro. Outras opes para programar so emacs, vi, e pico, que esto todos acessveis via linha de comando. E isto! Voc est pronto para aprender a programar. Instalao em Linux Primeiro, vale a pena checar se voc j tem Ruby instalado. Digite which ruby. Se este comando responder algo como /usr/bin/which: no ruby in (...), ento voc precisa fazer o download do Ruby, caso contrrio veja que verso do Ruby voc possui com ruby -v. Se for mais velha do que a ltima verso estvel na pgina de download acima, pode ser bom atualiz-lo. Se voc for o usurio root, ento voc provavelmente no precisa de qualquer instruo para instalar o Ruby. Se no for, voc poderia pedir ao seu administrador de sistema para instal-lo para voc. (Desta forma todos neste sistema poderiam usar Ruby.) Caso contrrio, voc pode apenas instal-lo de forma que apenas voc possa us-lo. Mova o arquivo baixado para um diretrio temporrio, como $HOME/tmp. Se o nome do arquivo for ruby-1.6.7.tar.gz, voc pode abri-lo com tar zxvf ruby-1.6.7.tar.gz. Mude do diretrio atual para o diretrio que acabou de ser criado (neste exemplo, cd ruby-1.6.7). Configure sua instalao digitando ./configure --prefix=$HOME). Depois digite make, que construir seu interpretador Ruby. Isto pode levar alguns minutos. Aps isto ter terminado, digite make install para instal-lo. Em seguida, voc vai querer adicionar $HOME/bin para seu caminho de busca de comandos varivel de ambiente PATH, editando seu arquivo $HOME/.bashrc. (Voc pode ter que se deslogar e logar novamente para que isto surta efeito.) Aps ter feito isto, teste sua instalao:

ruby -v. Se mostrar a voc qual a verso do Ruby que voc tem, voc pode agora remover os arquivos em $HOME/tmp (ou onde quer que voc os colocou). E isto! Voc est pronto para aprender a programar.

1. Nmeros Agora que voc j arranjou tudo, vamos escrever um programa! Abra seu editor de texto favorito e digite o seguinte:
puts 1+2

Salve seu programa (sim, isso um programa!) como calc.rb (o .rb o que normalmente colocamos no final de programas escritos em Ruby). Agora rode o seu programa digitando ruby calc.rb na linha de comando. Ele deve ter posto 3 na sua tela. Viu como programar no to difcil? Introduo ao puts O que ento que est acontecendo no programa? Tenho certeza que voc capaz de adivinhar o qu 1+2 faz; nosso programa praticamente a mesma coisa que:
puts 3

puts simplesmente escreve na tela tudo que vem depois dele. Inteiro e Float Na maioria das linguagens de programao (e no diferente no Ruby) nmeros sem pontos decimais so chamados de inteiros, e nmeros com pontos decimais normalmente so chamados de nmeros de ponto-flutuante, ou mais singelamente, floats. Eis alguns inteiros:
5 -205 9999999999999999999999999 0

E aqui esto alguns floats:


54.321 0.001 -205.3884 0.0

Na prtica, a maioria dos programas no usa floats; apenas inteiros. (Afinal, ningum quer ler 7.4 emails, ou navegar 1.8 pginas, ou ouvir 5.24 msicas favoritas) Floats so

usados mais freqentemente para fins acadmicos (experimentos de fsica e afins) e para grficos 3D. Mesmo a maioria dos programas que lidam com dinheiro usam inteiros; eles s ficam contando as moedinhas! Aritmtica Simples At agora, temos tudo que necessrio para uma calculadora simples. (Calculadoras sempre usam floats, ento se voc quer que seu computador aja como uma calculadora, voc tambm deve usar floats.) Para adio e subtrao, usamos + e -, como vimos. Para multiplicao, usamos *, e para diviso usamos /. A maioria dos teclados possui essas teclas no teclado numrico. Se voc tem teclado menor ou um laptop, voc pode usar Shift 8 e / (fica na mesma tecla que ?). Vamos tentar expandir um pouco nosso calc.rb. Digite o seguinte e depois rode.
puts puts puts puts 3.0 6.0 -3.0 4.5 1.0 2.0 5.0 9.0 + * / 2.0 3.0 8.0 2.0

Isto o que o programa retorna:

(Os espaos no programa no so importantes; eles s deixam o cdigo mais legvel.) Bom, no foi l muito surpreendente. Vamos tentar agora com inteiros.
puts 1+2 puts 2*3 puts 5-8 puts 9/2

Basicamente a mesma coisa, no ?


3 6 -3 4

Ahn... tirando aquele ltimo ali! Quando voc faz aritmtica com inteiros, voc recebe respostas em inteiros. Quando seu computador no sabe dar a resposta "certa", ele sempre arredonda para baixo. (Claro, 4 a resposta certa em aritmtica de inteiros para 9/2; s pode no ser o que voc estava esperando.) Talvez voc esteja se perguntado para que diviso de inteiros serve. Bem, vamos dizer que voc vai ao cinema, mas s tem $ 9. Aqui em Portland, voc pode ver um filme no Bagdad por 2 pilas. A quantos filmes voc pode assistir l? 9/2... 4 filmes. 4.5 no a resposta certa neste caso; eles no vo deixar voc ver metade de um filme, ou metade de voc ver um filme inteiro... algumas coisas no so divisveis.

Agora experimente com alguns programas seus! Se voc quiser escrever expresses mais complexas, voc pode usar parnteses. Por exemplo:
puts 5 * (12-8) + -15 puts 98 + (59872 / (13*8)) * -52 5 -29802

Umas Coisinhas Para Tentar Escreva um programa que lhe d:


quantas horas h em um ano? quantos minutos h em uma dcada? qual a sua idade em segundos? quantos chocolates voc pretende comer na vida? Aviso: Esta parte do programa pode demorar um pouco para computar!

Eis uma pergunta mais difcil:


Se minha idade de 1154 milhes de segundos, qual minha idade em anos?

Quando voc cansar de brincar com nmeros, vamos dar uma olhada em algumas letras. 2. Letras Ento, ns j aprendemos tudo sobre nmeros, mas e as letras? Palavras? Textos? Ns nos referimos a grupos de letras em um programa como strings (Voc pode pensar em letras impressas juntas ao longo de um banner). Para ficar mais fcil de entender quais partes do cdigo so strings, Eu vou colorir as strings em vermelho. Aqui tem alguns exemplos de strings:
'Ol.' 'Ruby rocks.' '5 meu nmero favorito... qual o seu?' 'Snoopy diz #%^?&*@! quando algum pisa no seu p.' ' ' ''

Como voc pode ver, strings podem ter pontuao, dgitos, smbolos e espaos... muito mais do que apenas letras. A ltima string no tem nada: ns a chamamos de string vazia. Ns estvamos usando puts para imprimir os nmeros; vamos tentar ele de novo com algumas strings:
puts 'Ol, mundo!' puts '' puts 'At logo.' Ol, mundo! At logo.

Isso funcionou bem. Agora, tente umas strings voc mesmo.

Aritimtica das String Assim como voc pode fazer aritimtica com nmeros, voc tambm pode fazer aritimtica com strings! Bem, uma parte dela... voc pode adicionar strings, de qualquer forma. Vamos tentar adicionar duas strings e ver o que o puts faz.
puts 'Eu gosto de' + 'torta de ma.' Eu gosto de torta de ma.

Ops! Eu esqueci de adicionar um espao entre 'Eu gosto de' e 'torta de ma.'. Espaos no fazem importncia normalmente, mas eles fazem sentido dentro de strings. ( verdade o que dizem: computadores no fazem o que voc quer que eles faam, apenas o que voc manda eles fazerem). Vamos tentar de novo:
puts 'Eu puts 'Eu Eu gosto Eu gosto gosto de ' + 'torta de ma.' gosto de' + ' torta de ma.' de torta de ma. de torta de ma.

(Como voc pode ver, no importa em qual string eu adicione o espao.) Ento voc pode somar strings. Mas voc pode, tambm, multiplic-las! (Por um nmero, de qualquer forma). Veja isso:
puts 'piscar ' * 4 piscando os olhos dela

(Estou brincando... ele na verdade faz isso:)


piscar piscar piscar piscar

Se voc parar para pensar, isso realmente faz sentido. Afinal, 7*3 realmente quer dizer 7+7+7, ento 'moo'*3 apenas significa 'moo'+'moo'+'moo'. 12 vs '12' Antes de irmos mais longe, ns devemos ter certeza de que entendemos a diferena entre nmeros e dgitos. 12 um nmero, mas '12' uma string de dois dgitos. Vamos brincar com isso um pouco:
puts 12 + 12 puts '12' + '12' puts '12 + 12' 24 1212 12 + 12

Que tal isso?


puts 2 * puts '2' * puts '2 * 5 5 5'

10 22222 2 * 5

Esses exemplos foram muito diretos. De qualquer forma, se voc no for muito cauteloso quando misturar strings e nmeros, voc pode cair em... Problemas Nesse ponto, voc j deve ter tentado algumas coisas que no funcionaram. Se no, aqui tem algumas:
puts '12' + 12 puts '2' * '5' #<TypeError: can't convert Fixnum into String>

Hmmm... Uma mensagem de erro. O problema que voc no pode, realmente, adicionar um nmero a uma string, ou multiplicar uma string por outra string. Isso no faz muito sentido como isso:
puts 'Betty' + 12 puts 'Fred' * 'John'

Uma coisa que voc deve saber: voc pode escrever 'porco'*5 em um programa, j que isso apenas quer dizer 5 conjuntos da string 'porco', todas adicionadas entre si. Entretanto, voc no pode escrever 5*'porco', j que isso significa 'porco' conjuntos do nmero 5, o que um pouco insano. Finalmente, e que tal um programa que imprima Isso um apstrofo: '? Ns podemos tentar isso:
puts 'Isso um apstrofo: ''

Bem, aquilo no vai funcionar; Eu nem vou tentar executar aquilo. O computador me disse que ns terminamos com uma string. ( por isso que bom ter um editor de texto que tenha realador de sintaxe para voc). Ento, como podemos fazer com que o computador saiba que ns queremos continuar dentro da string? Ns temos que escapar o apstrofo, assim:
puts 'Isso um apstrofo: \'' Isso um apstrofo: '

A barra invertida um caractere de escape. Em outras palavras, se voc tem uma barra invertida seguida de um caractere, isso pode ser, algumas vezes, traduzido em um novo caractere. As nicas coisas que uma barra invertida escapa, porm, so o apstrofo e a prpria barra invertida (Se voc pensar a respeito, caracteres de escape devem sempre escapar a si mesmos).) Acho que uns exemplos so bons agora:

puts 'Isso um apstrofo: \'' puts 'uma barra invertida no fim da string: puts 'acima\\embaixo' puts 'acima\embaixo' Isso um apstrofo: ' uma barra invertida no fim da string: \ acima\embaixo acima\embaixo

\\'

Uma vez que a barra invertida no escapa'e', mas escapa a si mesma, as ltimas duas strings so idnticas. Elas no se parecem no cdigo, mas no seu computador elas so as mesmas. Se voc tiver outra dvida, apenas continue lendo! Eu no posso responder a todas as questes nesta pgina.

Você também pode gostar