Cap. 10 – Salvando Arquivos, Avançando…

Anterior Índice Próxima

Indo Além…

Nós cobrimos um pedação de chão nos nove capítulos anteriores mas, mesmo assim, nós apenas começamos a explorar as possibilidade de programação com o Ruby. Uma das áreas que nós nem mesmo chegamos a tocar é o desenvolvimento de aplicações para a web usando o framework Rails (popularmente conhecido como ‘Ruby On Rails’). A boa notícia é que, desenvolver com Rails será muito mais fácil agora que você tem um entendimento fundamental da programação em Ruby. Enquanto o Rails possui todos os tipos de ferramentas para colocar uma aplicação simples em uso, tentar programar em Rails sem entender Ruby seria como tentar escrever um romance sem conhecer bem a língua que se usará para escrevê­lo! Nós também não vimos as características do Ruby relacionadas a um sistema operacional específico. Existem, por exemplo, muitos projetos em desenvolvimento destinados a fazer o Ruby rodar na plataforma Microsoft .NET. Existem também bibliotecas e ferramentas as quais ajudam você criar interfaces gráficas para seus programas em Ruby.

Gravando dados

Agora é hora de finalizar este Pequeno Livro do Ruby. Vamos fazer isto vendo mais um exemplo – um pequeno banco de dados de Cds que permite você criar novos objetos ( um objeto para cada disco em sua coleção de Cds), adicioná­los a uma matriz e os armazená­los em disco. Para gravar os dados no disco eu usei a biblioteca YAML do Ruby: # saves data to disk in YAML format def saveDB File.open( $fn, 'w' ) {
f
f.write($cd_arr.to_yaml) } end

YAML

YAML descreve o formato para gravar dados como texto legível por nós humanos. Os dados podem ser depois recarregados do disco para construir uma matriz de objetos CD na memória do computador: def loadDB input_data = File.read( $fn ) $cd_arr = YAML::load( input_data ) end Muito da codificação deste pequeno programa deve ser familiar – são oriundos de nossos exemplos anteriores. Algumas coisas devem ser ressaltadas, porém. Primeiro, as variáveis iniciando com um sinal $ são globais logo são usadas por todo o código do programa (lembre­se das variáveis de instância, que iniciam com @, que são usadas somente por um objeto específico; enquanto variáveis locais, que iniciam com uma letra minúscula, somente são usadas dentro de um escopo bem definido como um método específico).

Arquivos

Também note que nós usamos a classe File para verificar se um arquivo existe: if File.exist?( $fn ) Aqui, exist? é um 'método de classe' – isto é, está ligado à classe File e não a uma instância da classe File. O que explica como nós invocamos o método diretamente de File em vez de chamá­lo de um novo objeto criado de File. Isto deve tê­lo feito se lembrar dos métodos de módulos discutidos no Capítulo Nove – outro exemplo de semelhanças entre módulos e classes. data_save.r b # Ruby Sample program from www.sapphiresteel.com / www.bitwisemag.com require 'yaml' #array for cd objects $cd_arr = Array.new # file name for saving/loading Pág. 88 Pequeno Livro do Ruby Cap. 10 – Salvando Arquivos, Avançando… $fn = 'cd_db.yml' # ancestor generic CD class class CD

# initialize variables parsed from array argument # ( arr ) def initialize( arr ) @name = arr[0] @artist = arr[1] @numtracks = arr[2] end

# return an array containing all instance variables # of a CD object def getdetails return[@name, @artist, @numtracks] end end # PopCD is a 'child' class of CD class PopCD < CD

# call super to pass array, arr, to parent (CD) class # This initializes three instance variables. This # method the initializes one more: @genre def initialize( arr ) super( arr ) @genre = arr[3] end

# calls sup to get arra from CD class getdetails # method. Then adds @genre to the end of the array # and returns the entier 4­item array def getdetails return( super << @genre ) end end class ClassicalCD < CD def initialize( arr ) super( arr ) @conductor = arr[3] @composer = arr[4] Pág. 89 Pequeno Livro do Ruby Cap. 10 – Salvando Arquivos, Avançando… end

def getdetails return( super << @conductor << @composer ) end end # some methods to get data from the user def otherCD print( "Enter CD name: " ) cd_name = gets().chomp() print( "Enter artist's name: " ) a_name = gets().chomp() print( "Enter number of tracks: " ) num_tracks = gets().chomp().to_i return [cd_name, a_name, num_tracks ] end def classicCD cdInfo= otherCD print( "Enter conductor's name: " ) con_name= gets().chomp() print( "Enter composer's name: " ) comp_name = gets().chomp() cdInfo << con_name << comp_name return cdInfo end def popCD cdInfo= otherCD print( "Enter genre of music: " ) genre = gets().chomp() cdInfo << genre return cdInfo end # adds a CD object to the array variable, $cd_arr def addCD( aCD ) $cd_arr << aCD end # saves data to disk in YAML format # the to_yaml method converts to YAML format Pág. 90 Pequeno Livro do Ruby Cap. 10 – Salvando Arquivos, Avançando… def saveDB File.open( $fn, 'w' ) {
f
f.write($cd_arr.to_yaml) } end # loads data from disk and recreates the array of # cd objects, $cd_arr, from the data def loadDB input_data = File.read( $fn ) $cd_arr = YAML::load( input_data ) end # prints the data from the array to screen in human­ # readable (YAML) format def showData puts( $cd_arr.to_yaml ) end # Start of Program if File.exist?( $fn ) then loadDB showData else puts( "The file #{$fn} cannot be found.") end # 'main' loop ans = ” until ans == 'q' do puts( "Create (P)op CD (C)lassical CD, (O)ther CD ­ (S)ave or (Q)uit?" ) print( "> " ) ans = gets[0].chr().downcase() case ans when 'p' then addCD( PopCD.new( popCD() ) ) when 'c' then addCD( ClassicalCD.new( classicCD() ) ) when 'o' then addCD( CD.new( otherCD() ) ) when 's' then saveDB end Pág. 91 Pequeno Livro do Ruby Cap. 10 – Salvando Arquivos, Avançando… showData end

Avançando…

A comunidade Ruby é muito ativa atualmente e novos projetos estão surgindo constantemente. Para manter­se atualizado, nós sugerimos que você visite o site Sapphire In Steel (www.sapphiresteel.com) para encontrar os links de alguns dos mais úteis recursos para os programadores Ruby. Nós também devemos adicionar mais tutoriais e projetos exemplo ao site para continuar nossa exploração da programação em Ruby. Concluindo, eu espero que você tenha aproveitado esta pequena introdução à linguagem Ruby e que possa ser apenas o início de muitos anos de um prazeroso e produtivo desenvolvimento em Ruby.

Anterior Índice

-- LeandroNunes - 18 Oct 2006
Topic revision: r1 - 05 Jul 2008, UnknownUser
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki-Colivre? Send feedback