Escolar Documentos
Profissional Documentos
Cultura Documentos
RSS Feeds
Posts Comentrios
Blogroll
Plugins Blog do Goncin Blog do Jonas Fonini Blog da Paulinha Winter WordPress Planet Themes
Parceiros
Smashing Jobs Postado em abril 4, 2010 s 5:58 am
Introduo ao Ruby
Ruby uma linguagem de programao interpretada multi plataforma que tem muitas caractersticas em comum com outras linguagens de script como Perl e Phyton. Contudo a sua verso de orientao a objetos mais completa que aquelas linguagens e, em muitos aspectos, o Ruby tem mais em comum com o bisav das linguagens OOP (programao orientada a objetos)puras, o Smalltalk. A linguagem Ruby foi criada por um programador japons chamado Yukihiro Matsumoto (mais conhecido por Matz) e foi liberada pela primeira vez em 1995. Atualmente, muito da empolgao em volta do Ruby pode ser atribuda ao framework de desenvolvimento web chamado Rails popularmente conhecido como Ruby On Rails. Embora o Rails seja um framework impressionante, ele no a coisa mais importante do Ruby. Para ser sincero, se voc decidir mergulhar fundo no desenvolvimento com Rails sem antes dominar o Ruby, voc poder acabar fazendo uma aplicao que nem voc mesmo entende. Por isso decidi entrar inicialmente no Ruby, para depois passar para o Rails.
Onde baixar?
http://brunobemfica.net/?p=167 2/8
20/11/2010
A ltima verso do ruby pode ser encontrada em www.ruby-lang.org, onde usurios do windows podem baixar o instalador do Ruby. Usurios de OS X, Linux e Solaris podem efetuar a instalao diretamente atravs dos repositrios (utilizando port, apt-get ou semelhante, e pfexec, respectivamente). Esse o site oficial da linguagem, e conta inclusive com um console para que voc teste o ruby diretamente no browser. O ruby conta ainda com uma outra implementao, chamada IRON Ruby, que roda em cima do .NET framework (IRON uma sigla Implementation Running On .Net). A prpria Microsoft apia o projeto, e incluiu no framework 4.0 os tipos dinmicos, para facilitar a implementao de Ruby, Python e outras linguagens semelhantes na plataforma .NET.
Mos obra
Eu, por ser programador, entendo bem que programadores no gostam de enrolao, ento vamos ao cdigo. Abra seu editor de texto(Eu estou usando o Gedit no Ubuntu, mas pode ser o Bloco de notas do Windows ou qualquer outro editor de texto simples), e escreva a linha abaixo:
puts "Ol Ruby!"
Aps isso, salve o arquivo como HelloWorld.rb, e v at o seu terminal/prompt de comando e execute o arquivo com o comando ruby + nomedoarquivo.rb. Veja na imagem abaixo como ficou:
O famoso Ol, mundo em Ruby At ento, tudo muito simples. Vejamos ento alguns mtodos implcitos de manipulao de strings no Ruby.
http://brunobemfica.net/?p=167 3/8
20/11/2010
Substitua o cdigo do seu hello world pela linha abaixo, e vejamos o que ocorre:
puts "hello ruby!".reverse
Hello world em ruby, utilizando o mtodo reverse O ruby j possui funes prprias de manipulao de string como reverse, mostrada acima, alm de upcase, downcase, delete, insert, match e mais uma longa lista disponvel neste link. Vamos agora solicitar uma entrada de dados ao usurio. No Ruby, isto feito utilizando o mtodo gets(). Substitua o cdigo do seu arquivo pelo cdigo abaixo:
print " digite seu nome " nome = gets() print " Ol #{nome} "
http://brunobemfica.net/?p=167
4/8
20/11/2010
O hello world, agora com entrada de dados Perceba que eu usei print ao invs de puts. Isso por que o puts pula uma linha aps exibir a string, e a minha inteno era que o cursor continuasse na mesma linha.
Tipagem em Ruby
Ao contrrio do que possa parecer, o Ruby uma linguagem fortemente tipada. No h definio de tipos na declarao das variveis, pois a tipagem dinmica, ou seja: Os tipos so definidos em tempos de execuo. O que nos permite uma maior flexibilidade na manipulao de atributos do ruby, como demonstrado no cdigo abaixo. Crie um arquivo chamado MinhaPrimeiraClasse.rb e insira o seguinte cdigo:
class Teste attr_accessor :Name end x = Teste.new x.Name = "Bruno" puts x.Name puts x.Name.class puts "\n" x.Name = 345 puts x.Name puts x.Name.class
Vejamos o resultado:
http://brunobemfica.net/?p=167
5/8
20/11/2010
Veja a exibio dos valores e tipos das propriedades No cdigo acima, criei uma classe com um atributo chamado Nome, instanciei um objeto desse tipo e ao longo do cdigo, atribu diferentes valores a ele. em seguida, exibi seu valor e seu tipo. Veja que os tipos so distintos, ou seja: H tipagem, no so todos do tipo Object. Repare que na segunda linha, eu utilizo o comando attr_accessor para criar o atributo Nome. Este comando deixa implcito ao interpretador do Ruby de que esse atributo tem os mtodos get e set pblicos. Essa uma facilidade que a linguagem possui, para que no tenhamos que ficar escrevendo linhas e mais linhas de cdigo. Alm do accessor, podemos definir de forma semelhante apenas o get ou o set do atributo em questo, substituindo o attr_accessor por attr_reader no caso de o atributo ter apenas o get pblico, ou att_writer no caso de apenas o set ser pblico. Podemos tambm escrever normalmente os mtodos get e set. Abaixo, demonstro as maneiras diferentes de faz-lo.
class Pessoa attr_accessor :Nome, Idade end
http://brunobemfica.net/?p=167
6/8
20/11/2010
[Mini curso] Do ruby ao Rails Parte end def getIdade @idade end end
Repare que eu no declarei as variveis @nome e @idade antes de utiliz-las nos mtodos. Isso ocorre por que o Ruby entende que as variveis iniciadas com @ so atributos da classe, logo, no preciso instanci-los. Repare tambm que nos gets eu simplesmente coloco o nome da varivel, sem utilizar a palavra-chave return, comum em outras linguagens. Isso por que o ruby entende que a ltima linha de cada mtodo o retorno, tambm eliminando a necessidade de escrever o return. Bem, por enquanto isso. Pretendo continuar essa srie de artigos o mais breve possvel. Espero que tenham gostado. Crticas e sugestes, os comentrios esto disposio. Abraos e keep coding! Tags:Desenvolvimento gil, Programao, rails, Ruby, Web by Bruno Bemfica Programao, Ruby
Deixar um comentrio
http://brunobemfica.net/?p=167
7/8
20/11/2010
Posts Comentrios
Blogroll
Plugins Blog da Paulinha Winter Blog do Goncin WordPress Planet Themes Blog do Jonas Fonini
Parceiros
Smashing Jobs Postado em abril 6, 2010 s 11:48 am
O cdigo acima ir escrever 15.0 na tela(o mtodo to_f transforma em float, assim como o to_s transforma em string e o to_i transforma em inteiro este ltimo, Fixnum ou Bignum dependendo da necessidade). Uma das vantagens de ser dinamicamente tipada que ela escova bits sozinha, ou seja: No h desperdcio de memria alocando valores pequenos em espaos grandes. As Strings(vetores de caracteres) fazem parte dos tipos primitivos do Ruby, e na sua utilizao no h nenhum grande diferencial para outras linguagens(exceto o fato de poderem ser atribudas com aspas simples ou duplas tal qual no PHP). Mas nos tipos numricos que o Ruby possui algo incomum. Normalmente somos acostumados a trabalhar com variveis do tipo int(ou Integer, para os programadores VB), e assumir que s existe um tipo inteiro (Int32, tipos como Int16/short e Int64/long no so amplamente utilizados). J no caso dos valores de ponto flutuante(float e double) somos um pouco mais acostumados a prestar ateno. E nisso que o Ruby se diferencia, ele tem 2 tipos inteiros e apenas um flutuante, como podemos observar abaixo:
http://brunobemfica.net/?p=186
2/5
20/11/2010
Diviso de tipos numricos em Ruby Como o nome mesmo diz, os nmeros bignum so os inteiros grandes. Seu limite aproximadamente 2. Os nmeros Fixnum, ou inteiros pequenos vo de -2 a 2.
Smbolos
Smbolos em Ruby so um enigma. Ns utilizamos, mas muitos no entendem. Simplificando, smbolos so o que voc usa para representar nomes e strings. O que ele faz te dar uma forma eficiente de ter nomes descritivos, poupando o espao em memria que seria usado para gerar uma seqncia de caracteres para cada instncia de nomeao. Por exemplo:
comida = {"Entrada" =>"Shimeji", "Prato Principal" =>"Sushis variados", "Sobremesa" => "Melancia"}
Para simplificar um pouco mais, os smbolos servem para evitar mltiplas instncias do mesmo objeto. Como eu disse anteriormente, no Ruby tudo objeto. E uma das particularidades da linguagem que cada objeto tem um ID. Observe abaixo o que acontece:
O ID dos objetos diferente Perceba que os IDs so diferentes, embora a string e a linha de comando sejam exatamente iguais(estou
http://brunobemfica.net/?p=186 3/5
[Mini curso] e linha de comando sejam os IDs so diferentes, embora a stringDoaruby ao Rails Parte exatamente iguais(estou usando o IRB console do Ruby). As duas strings so objetos diferentes em memria. O verdadeiro motivo por trs de um smbolo ser to eficiente em consumo de memria quanto uma varivel global e ao mesmo tempo to legvel quanto uma string. Notem pelo exemplo que eu dei na varivel comida, que a notao j de string. algo como um dicionrio (interface IDictionary no .NET e no Java). Veja agora como ficaria a mesma expresso utilizando Symbols:
Mesma expresso, utilizando smbolos Note que agora o ID do objeto o mesmo, o que a longo prazo nos pouparia muita memria em uma aplicao. E vejamos como fica o exemplo da comida:
"Array" de smbolos, uma coleo par-valor. Aps executar esse exemplo, tente executar as seguintes linhas:
minhaJanta = comida["Entrada"] puts minhaJanta minhaJanta.object_id
http://brunobemfica.net/?p=186
4/5
20/11/2010
comida["Entrada"].object_id
Voc ver que tanto o valor da varivel minhaJanta quanto o object_id da mesma sero iguais aos de comida["Entrada"]. Bem, por enquanto s. Espero que tenham gostado. Tentarei continuar correndo com os artigos por aqui. Dvidas e sugestes, os comentrios esto abertos. Abraos e keep coding! Tags:Desenvolvimento gil, Programao, rails, Ruby, Web by Bruno Bemfica Programao, Ruby
Deixar um comentrio
Leopress Theme for Wordpress by 7Graus (design based on Apple's Leopard Mac OS X)
http://brunobemfica.net/?p=186
5/5
20/11/2010
RSS Feeds
Posts Comentrios
Blogroll
Plugins Themes Blog do Goncin WordPress Planet Blog do Jonas Fonini Blog da Paulinha Winter
Parceiros
Smashing Jobs Postado em abril 9, 2010 s 3:20 am
Arrays(Vetores)
Em Ruby, um array um objeto que contm um nmero de items. Estes items podem ser variveis(como strings, inteiros, Hash etc) ou at mesmo outros objetos(incluindo outros arrays para criar um array/vetor multimensional). Uma vez que os items foram agrupados em um array, voc pode realizar tarefas como ordenao em ordem alfabtica ou numrica, acessar e alterar o valor atribudo a cada item do array e at mesmo passar o grupo de items como argumento para um mtodo. H mais de uma forma de se criar um array em Ruby. Essencialmente, um array uma instncia da classe Array. Logo, podemos criar um array diretamente atribuindo valores a ele, ou simplesmente criar como um objeto, como demonstrado abaixo: DiasDaSemana = Array.new O construtor da classe Array tem algumas sobrecargas, logo poderamos ter passado como parmetro para ele apenas o tamanho do array (Ex: Array.new 7 ),o tamanho e um valor padro para os elementos (Ex: Array.new 7, hoje) ou diretamente os valores de cada elemento (Ex: Vetor = [1,2,3]). Abaixo h uma pequena demonstrao sobre as mais variadas formas de se instanciar um Array.
http://brunobemfica.net/?p=211
2/6
20/11/2010
As vrias maneiras de se instanciar um array Outros mtodos que temos ainda para arrays so empty?,shift, pop,push,delete, delete_at e size. O primeiro verifica se o array est vazio, shift remove o primeiro elemento do array, pop remove o ltimo elemento do array,push adiciona um elemento, delete remove um elemento passado como parmetro,delete_at remove um elemento que esteja em uma posio passada como parmetro e size retorna o tamanho do array. Execute o cdigo abaixo e verifique o resultado: vetor = ["a",1,2,"d","e","f"] vetor.empty? vetor.size vetor.shift vetor.pop vetor.delete_at(1) vetor.delete("d") vetor.inspect Observe o resultado do cdigo acima:
http://brunobemfica.net/?p=211
3/6
20/11/2010
Excluso de objetos em um array Os arrays em Ruby permitem infinitas possibilidades. Notem que o array acima possui elementos Fixnum e strings tambm. Sim, arrays em ruby podem conter diferentes tipos de elementos. Acessar elementos em arrays tambm algo bem simples. Podemos acessar atravs do ndice, ou atravs do prprio elemento. Execute o cdigo abaixo e veja os resultados: vetor.index("e") vetor[0] vetor[0].class Outra coisa interessante do ruby a subtrao de vetores, algo inexistente em linguagens como Java e C#. Execute o cdigo abaixo e observe o resultado: vetorDeLetras = ["a","b","c"] outroVetor = ["a","b"] vetorFinal = vetorDeLetras - outroVetor vetorFinal.inspect O resultado um vetor com os elementos que esto no primeiro vetor, mas no no segundo:
http://brunobemfica.net/?p=211
4/6
20/11/2010
Ordenao de arrays tambm muito simples em Ruby. Utilizando o mtodo sort!, ordenamos o array, e utilizando o mtodo reverse (cuja utilizao j foi demonstrada quando falei de strings lembrando que strings nada mais so que arrays de caracteres), podemos ordenar nossos arrays sem nenhum problema. Experimente rodar o cdigo abaixo, e verifique os resultados: vet = ["a","c","d","b"] vet.sort! vet.reverse
Ordenao de Arrays no Ruby E para terminar, vamos fazer uma atribuio de valores a mais de um elemento ao mesmo tempo. Execute o cdigo abaixo, e veja como o Ruby faz isso: vet = ["a","b","c","d","e"] vet[1..3] = "z","x","y" vet.inspect
http://brunobemfica.net/?p=211
5/6
20/11/2010
Sobrescrevendo elementos de um array Bem, por enquanto s. Os Arrays so uma ferramenta muito poderosa no Ruby, e ainda h muito a falar sobre eles, mas tpicos mais avanados deixarei para que vocs descubram. Dvidas, crticas e sugestes, os comentrios esto abertos. Espero que tenham gostado do artigo(e do fato de no estar mais centralizado, hehe). Abraos e keep coding! Tags:Desenvolvimento gil, Programao, rails, Ruby, Web by Bruno Bemfica Programao, Ruby
Deixar um comentrio
Leopress Theme for Wordpress by 7Graus (design based on Apple's Leopard Mac OS X)
http://brunobemfica.net/?p=211
6/6
20/11/2010
RSS Feeds
Posts Comentrios
Blogroll
Blog do Jonas Fonini Blog do Goncin WordPress Planet Blog da Paulinha Winter Plugins Themes
Parceiros
Smashing Jobs Postado em abril 28, 2010 s 2:26 am
Arrays multidimensionais
Arrays multidimensionais: Nada mais so que arrays dentro de outros arrays. Abaixo, um exemplo de como fazer isso: #Cria um array com mltiplos arrays dentro vetor = [ [1,2,3], [4,5,6], [7,8,9] ] #Cria um array de tamanho 2 outroVetor = Array.new 2 #Atribui um novo array, tambm de tamanho 2, posio 0 do array outroVetor[0]= Array.new 2, 'TesteTerceiroArray' #Atribui um novo array, tambm de tamanho 2, posio 1 do array outroVetor[1]=Array.new 2,, 'TesteQuartoArray'
Indexando arrays
Voc pode indexar a partir do fim de um array usando o sinal de menos (), onde 1 o ndice do ltimo elemento; Tambm podemos usar faixas de valor (entre um ndice inicial e final separados por dois sinais de ponto .. ): vetor = ['h','e','l','l','o',' ','w','o','r','l','d'] print( arr[0,5] ) #=>; 'hello' print( arr[5,5 ] ) #=>; 'world'
http://brunobemfica.net/?p=237 2/6
20/11/2010
O ruby possui um alias para arrays de strings, que o %w. Observe um exemplo abaixo: arrayDeStrings = %w{Exemplo de array de strings} arrayDeStrings.inspect
Hashes
Hashes tambm so colees, assim como os arrays. A diferena que o ndice dos Arrays sempre numrico, e Hashes so colees par-valor onde os ndices podem ser objetos tambm. Mesmo que os arrays forneam uma boa forma de indexar uma coleo de itens por nmero, h situaes que seria mais conveniente indexar de alguma outra forma. Se, por exemplo, ao listar os filmes da sua coleo de DVDs,seria mais significativo ter cada filme indexado pelo nome e/ou pelo gnero, ao invs de nmeros: 26, 42 e assim por diante. O Ruby possui uma classe que permite que voc faa isso: A classe Hash. Hashes so conhecidos em outras linguagens como dicionrios(em java e em .NET, classes que implementam a interface IDictionary). Tal qual um dicionrio de verdade, as entradas so indexadas por uma chave nica (em um dicionrio, seria uma palavra) e um valor (em um dicionrio, seria a definio da palavra). Voc pode criar um hash criando uma nova instncia da classe Hash: primeiroHash = Hash.new segundoHash = Hash.new("Um filme qualquer") Ambos os exemplos acima criam um Hash vazio. Um objeto Hash sempre tm um valor padro isto , um valor que retornado quando nenhum valor especfico encontrado em um dado ndice. Nestes dois exemplos, segundoHash inicializado com o valor default,um filme qualquer. A varivel primeiroHash no inicializado com um valor ento seu valor padro ser nil. Tendo criado um objeto Hash, podemos adicionar itens a ele usando uma sintaxe semelhante dos arrays isto , colocando um ndice nos colchetes e usando o sinal de igual para atribuir um valor.A diferena bvia aqui que, com um array, o ndice ( a chave ) deve ser um nmero inteiro; com um Hash, ele pode ser qualquer item de dado nico. Observe o exemplo abaixo: segundoHash['Horror'] = 'Jogos Mortais' segundoHash['Comedia'] = 'Uma noite no museu' segundoHash['Drama'] = 'Sempre ao seu lado' segundoHash['Sci-fi'] = 'Star Wars' Muitas vezes, a chave pode ser um nmero ou, como no cdigo acima, uma string. Por princpio, uma chave pode ser qualquer tipo de objeto. Dada uma classe Qualquer, a seguinte atribuio totalmente vlida: qqr = Qualquer.new('objeto Hash') segundoHash[qqr] = 'valor qualquer' Existe uma forma mais simples de criar e inicializar hashes. Adicione a chave seguida por => e o valor associado. Cada par chave-valor deve ser separado por uma vrgula e o lote todo colocado entre os sinais de chaves {}: musicHash = { 'Heavy Metal'=>'Iron Maiden',
http://brunobemfica.net/?p=237 3/6
20/11/2010
'MPB'=>'Chico Buarque', 'Classico'=>'Beethoven', 'New Age'=>'Enya' } puts musicHash['Eletronica'] puts segundoHash['ValorInexistente'] Repare que no cdigo acima, as ltimas duas linhas tentam imprimir chaves que no existem. Nesse caso, o ruby exibe o valor default, que definido no momento em que a instncia criada. Para o hash de nome segundoHash, definimos esse valor na instncia, no cdigo um pouco acima, quando o instanciamos(foi passado como parmetro para o mtodo new). No caso do hash musicHash, ser retornado o valor nil. Os hashes ainda possuem os mtodos keys e values, que retornam um array com os respectivos valores.
Mtodos
Os mtodos em ruby tem algumas particularidades(que podem ser utilizadas para o bem ou para o mal). Observe o cdigo abaixo: def Soma(a,b) return a+b end def Soma a,b a+b end Ambos so o mesmo mtodo, apenas com pequenas diferenas na declarao. O Ruby no exige parnteses na declarao ou na invocao de mtodos(embora seja uma boa prtica utiliz-los), e embora tenha a palavra return como reservada, no exige que ela seja colocada no retorno do mtodo, pois o interpretador considera sempre a ltima linha como um retorno. O ruby tambm possui mtodos estticos, ou seja: Mtodos de classe, que no precisam de uma instncia para serem chamados. Observe abaixo um exemplo: class Exemplo def self.Soma a,b a+b end def Subtracao a,b a-b end end Na classe acima, o mtodo Soma precedido pela palavra self, o que indica que um mtodo esttico e no precisa de um objeto instanciado para ser chamado. Observe o que ocorre ao chamarmos ambos os mtodos sem instanciarmos a classe:
http://brunobemfica.net/?p=237
4/6
20/11/2010
Invocao de mtodos no Ruby Ao chamar o mtodo soma que foi definido como esttico, temos o resultado esperado(3), mas ao chamar o mtodo Subtracao obtemos um erro, pois no instanciamos o objeto anteriormente. Por conveno, os mtodos em ruby, ao contrrio das classes, comeam com letra minscula. Escrevi os mtodos com letras maisculas por que eu sou um imbecil por costume, j que a minha linguagem nativa de programao o C#. Bem, por enquanto isso. Sugestes e crticas, os comentrios esto abertos. Abraos e keep coding. Tags:Desenvolvimento gil, Programao, rails, Ruby, Web by Bruno Bemfica Programao, Ruby
Deixar um comentrio
http://brunobemfica.net/?p=237
5/6