CURSO DE EXTENSÃO: Desenvolvimento de Aplicativos WEB com Ruby on Rails
|
|
- Victor Gabriel Graça Faria
- 8 Há anos
- Visualizações:
Transcrição
1 CURSO DE EXTENSÃO: Desenvolvimento de Aplicativos WEB com Ruby on Rails Jackson Pires de O. S. Júnior Abril de 2008
2 2ª Semana Classes, Objetos, Variáveis, Tipos, Métodos, Exceções, Entrada / Saída
3 Introdução Olá seja bem vindo à segunda aula do curso de extensão de Desenvolvimento de Aplicativos Web com Ruby on Rails. Todo conteúdo do curso está baseado em livros, tutoriais e cursos, a maioria disponíveis na internet, portanto, você pode ampliar ainda mais seu conhecimento procurando mais informações em ferramentas de busca e sites específicos sobre a tecnologia citada. Mais à frente darei algumas referências para que você possa continuar estudando sobre o assunto. Nesta aula faremos uma breve introdução à linguagem Ruby tocando os pontos que facilitarão o desenvolvimento de aplicações Web com o Ruby on Rails. Abaixo temos o conteúdo programático que seguiremos nessa segunda semana: Ruby o Linguagem Classes, Objetos, Variáveis Tipos Métodos Exceções Entrada / Saída
4 Linguagem Dando continuidade ao nosso curso, não poderíamos deixar de nos aprofundar um pouco mais na linguagem que é a base para todo o entimento do framework Ruby on Rails. So assim, tentaremos trazer os conceitos mais importantes da linguagem para que mais à frente possamos desfrutar de suas facilidades no desenvolvimento dos aplicativos WEB. É bom lembrar que não falaremos de conceitos básicos de programação e algorítimo, esse passo já deve ter sido visto em sala de aula. Então mãos à obra!
5 Classes, Objetos e Variáveis Considerando que o Ruby é completamente orientado a objetos, nada mais apropriado que começar nossa exploração do mesmo por essa parte. A primeira coisa que precisamos no nosso processo de compreensão do Ruby é enter como variáveis funcionam. No Ruby, como na maior parte das linguagens orientadas a objeto, as variáveis são simplesmente referências a objetos. Veja o exemplo abaixo: ~$ irb irb(main):001:0> a = 1 => 1 irb(main):002:0> a = "1" => "1" No exemplo acima, atribuímos a valor inteiro 1 à variável a e depois atribuímos à mesma variável, o valor 1, que é uma seqüência de caracteres. Isso, e o fato de que nenhum erro ocorreu, demonstram duas coisas sobre o Ruby. Primeiro, variáveis simplesmente apontam para os valores atribuídos à mesma, e, por causa disso, podem ser re-atribuídas de acordo com necessidade; segundo, variáveis não precisam ser declaradas. Um exemplo posterior poderia ser: ~$ irb irb(main):001:0> a = 1 => 1 irb(main):002:0> a.class => Fixnum irb(main):003:0> a = "1 " => "1 " irb(main):004:0> a.class => String Note que mesmo tipos primitivos como o número inteiro 1 são membros de uma classe no caso Fixnum, que é a classe que define números com representação fixa. Considere agora o seguinte trecho de código: ~$ irb irb(main):001:0> 1.class
6 => Fixnum irb(main):002:0> 1.class.class => Class irb(main):003:0> 1.class.superclass => Integer irb(main):004:0> Note que 1 é uma instância da classe Fixnum. A classe Fixnum, por sua vez, é também um objeto, uma instância da classe Class, que define todas as classes em Ruby. Class é chamada a metaclasse de Fixnum, ou seja, é uma classe que descreve uma classe. Na terceira linha temos outro conceito de orientação a objetos que é a superclasse de uma classe, ou seja, a classe da qual a mesma é derivada. No caso de Fixnum, temos a seguinte hierarquia: Object => Numeric => Integer => Fixnum. Esses dois conceitos, metaclasses e superclasses, são importantes em qualquer linguagem orientada a objeto e precisam ser compreidos por qualquer programador. Outro aspecto com o qual os programadores estão acostumados é ter uma separação muito distinta entre tipos primitivos e objetos. Em Java, 3 é um inteiro, uma estrutura primitiva de 32-bits. Se precisamos de um objeto em torno desse primitivo, embrulhamos em torno uma instância da classe Integer. Em Ruby 3 é um objeto, tipo Fixnum. Como tal, tem diversos métodos. Por Exemplo: ~$ irb irb(main):001:0> 1.to_s => "1" irb(main):002:0> => 2 irb(main):003:0> 1.+(1) => 2 irb(main):004:0> -1.abs => 1 irb(main):005:0> "123".length => 3 No exemplo acima, temos várias invocações de métodos de determinados objetos. O primeiro método invocado, to_s, converte um valor numérico em
7 uma string correspondente. O segundo exemplo é ainda mais interessante. Note que fizemos uma operações, somando dois números. Mas, como podemos ver logo abaixo, a operação é simplesmente uma invocação de um método do objeto. Obviamente que, para uso diário, utilizaremos à primeira sintaxe. É importante, porém, compreer que isso é válido para basicamente todos os métodos do Ruby e que isso pode ser usado em suas próprias classes. Uma maneira fácil de visualizar os métodos que uma classe possui é chamar o seu método methods, como pode ser visto abaixo: ~$ irb irb(main):001:0> 1.methods => ["%", "inspect", "<<", "singleton_method_added", "&", "clone", ">>", "ceil", "public_methods", "instance_variable_defined?", "div", "equal?", "freeze", "times", "*", "+", "to_i", "methods", "respond_to?", "-", "upto", "between?", "prec", "round", "/", "method", "dup", "instance_variables", " id ", "divmod", "chr", "succ", " ", "eql?", "integer?", "~", "id", "to_f", "singleton_methods", "s", "prec_i", "taint", "truncate", "to_int", "frozen?", "instance_variable_get", " s ", "^", "instance_of?", "modulo", "to_a", "object_id", "+@", "zero?", "-@", "type", "**", "<", "protected_methods", "<=>", "instance_eval", "==", "prec_f", "quo", ">", "===", "step", "id2name", "size", "instance_variable_set", "kind_of?", "remainder", "ext", ">=", "nonzero?", "next", "to_s", "<=", "coerce", "hash", "floor", "class", "tainted?", "=~", "private_methods", "display", "fdiv", "nil?", "untaint", "downto", "to_sym", "[]", "is_a?", "abs"] Esses são todos os métodos públicos compartilhados pelas instâncias da classe Fixnum. Como classes podem possuir métodos públicos, protegidos e privados, a distinção pode ser obtida invocando os métodos public_methods, protected_methods e private_methods de uma instância qualquer. Incidentemente, classes são objetos também, com seus próprios métodos. Você pode observar isso invocando o método acima em uma classe, usando, por exemplo: ~$ irb irb(main):001:0> String.public_methods
8 => ["inspect", "private_class_method", "const_missing", "clone", "public_methods", "public_instance_methods", "instance_variable_defined?", "method_defined?", "superclass", "equal?", "freeze", "included_modules", "const_get", "autoload?", "methods", "respond_to?", "module_eval", "class_variables", "method", "dup", "protected_instance_methods", "instance_variables", "public_method_defined?", " id ", "eql?", "const_set", "id", "singleton_methods", "s", "class_eval", "taint", "frozen?", "instance_variable_get", "include?", "private_instance_methods", " s ", "instance_of?", "private_method_defined?", "to_a", "object_id", "name", "type", "new", "<", "protected_methods", "instance_eval", "<=>", "==", ">", "===", "instance_variable_set", "kind_of?", "ext", "protected_method_defined?", "const_defined?", ">=", "ancestors", "to_s", "<=", "public_class_method", "autoload", "allocate", "hash", "class", "instance_methods", "tainted?", "=~", "private_methods", "class_variable_defined?", "display", "nil?", "instance_method", "untaint", "constants", "is_a?"] Aqui cabe uma explicação sobre uma diferença do Ruby para outras linguagens orientadas a objetos. Métodos públicos são métodos acessíveis a todo o programa. Métodos protegidos são acessíveis somente a instâncias da própria classe e subclasses da mesma. Em Ruby, porém, métodos privados possuem uma distinção sutil: eles somente podem ser chamados com um receptor explícito, ou seja, dentro do próprio objeto. Isso significa que subclasses podem também chamar os métodos privados de sua superclasse, mas somente dentro do seu próprio contexto de execução. Objetos, como instâncias de classes, podem ser criados implicitamente ou explicitamente em Ruby. Acima, vimos alguns exemplos de criação implícita, que é comum a todos os tipos primitivos. A criação explícita, porém, é feita através da invocação do método new: ~$ irb irb(main):001:0> a = "Uma string qualquer" => "Uma string qualquer" irb(main):002:0> b = String.new("Uma string qualquer") => "Uma string qualquer" irb(main):003:0> a == b => true irb(main):004:0> require 'date' => true
9 irb(main):005:0> d = Date.new(2007, 1, 1) => #<Date: /2,0, > irb(main):006:0> d.day => 1 irb(main):007:0> d.year => 2007 Note que nas primeiras declarações criamos uma string de maneira implícita e de maneira explícita. Uma comparação entre as duas revela que não há diferença na criação, ou seja, a criação implícita é essencialmente o mesmo que uma chamada ao método new seguida de uma atribuição. No exemplo seguinte, temos a criação de um objeto que não possui criação implícita. Note também que o objeto não faz parte do núcleo do Ruby, mas é implementado em uma biblioteca externa que é adquirida para o contexto atual através do método require. Esse método, embora seja invocado aparentemente sem um objeto receptor, é na verdade um método do módulo Kernel, incluindo na classe Object, que provê uma série de métodos comuns para o ambiente de execução Ruby. Veremos mais sobre módulos em seções seguintes. Como podemos notar de tudo o que foi visto acima, o Ruby é realmente uma linguagem orientada a objetos em toda a sua extensão. Todo valor criado é uma instância de uma classe qualquer, mesmo as próprias classes. Desafio 1.O Ruby possui um método chamado id, comum a todas as classes e objetos. O que esse método faz? 2.Faça um teste, criando duas variáveis inteiras. Compare os ids das mesmas. Qual é o resultado? 3.Faça o mesmo teste com duas variáveis String. Qual é o resultado agora? 4.Por que você acha que isso acontece?
10 Mas o que são Símbolos no Ruby? Bom, esse trechinho da apostila entra pra deixar você ainda mais à vontade com a linguagem Ruby. Mais à frente vamos nos deparar com trechos de códigos mais ou menos assim: a = :teste Vamos notar então que existe : (dois pontos) na frente do nome teste, não se preocupe, não é erro de digitação, isto meu caro amigo é um símbolo ou se preferir um symbol. Bom, para começarmos a enter símbolos no Ruby é interessante ler um post que o Fabio Akita deixou em seu blog < esse post faz demonstrações muito boas para o entimento do assunto, não deixem de visitá-lo. Por hora, basta termos em mente o seguinte. Pense em símbolos como Strings Leves. Eles representam nomes e algumas String dentro do interpretador Ruby, e são sempre o mesmo objeto durante a execução de um programa. Ou ainda dizemos que são representações eficientes de um valor qualquer, não muito diferentes de constantes Um exemplo prático seria: ~$ irb irb(main):001:0> s1 = :fasete => :fasete irb(main):002:0> s2 = :fasete => :fasete irb(main):003:0> s3 = :fasete => :fasete irb(main):004:0> s1.object_id => irb(main):005:0> s2.object_id => irb(main):006:0> s3.object_id =>
11 Observe que todos apontam para o mesmo objeto, diferentemente da utilização de Strings comuns. Continuando... Agora que trabalhamos um pouco com os conceitos básicos de classes, objetos e variáveis, é hora de criar as nossas próprias classes, experimentando um pouco mais com o sistema de objetos do Ruby. Criar uma classe é bem simples em Ruby. Basta fazer o seguinte: class Carro def initialize(marca, = = modelo O código acima define uma classe chamada Carro que possui um método chamado initialize. Esse método possui uma conotação especial em Ruby, so o método que é invocado quando a instância de uma classe é criada. Vejamos isso em um exemplo: irb(main):007:0> gol = Carro.new("Volkswagem", "Gol") irb(main):008:0> O código acima cria uma instância da classe Carro, atribuindo os parâmetros a variáveis de instância da classe (identificadas pelo na frente dos seus nomes). Note que new é usado e não initialize, so que este último é invocado automaticamente. Esse é um detalhe de implementação do Ruby, so que o método initialize é automaticamente marcado com private.
12 Dica: Segundo convenções Ruby, nos nomes dos métodos devem-se usar letras minúsculas separando as palavras com um sublinhado (_), porém no nome das classes é utilizado camel case, da mesma maneira que no Java, com maiúsculas separando dois ou mais nomes da classe. Exemplos: MinhaClasse MeuTeste CarroPersonalizado. Dica: Caso você não queira ficar colando o código a todo momento, salve um arquivo com um nome qualquer e a extensão.rb e use o método load para carregar esse arquivo, lembrando que load requer o nome completo do arquivo a carregar, incluindo a extensão. Note que se você tentar extrair o valor de uma variável de instância acima, você verá um erro. Por exemplo: irb(main):009:0> gol.marca NoMethodError: undefined method `marca' from (irb):9 Variáveis de instância são automaticamente internas e você só pode extrair o valor das mesmas publicamente criando um método específico para isso. Falando em métodos, podemos criar um método para a nossa classe para ver como os mesmos funcionam. Antes vejamos a próxima linha: irb(main):010:0> gol.to_s => "#<Carro:0x2af9068>" Vamos aproveitar para substituir a inconveniente representação textual acima por uma de nosso interesse. Isso é feito criando um método chamado to_s, que já mencionamos anteriormente. Esse método converte um objeto qualquer em sua representação textual.
13 Todos objetos em Ruby possuem esse método, embora sua implementação inicial seja bem limitada. Podemos sobrescrever o método assim: class Carro def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} O código acima apresenta algumas características interessantes. Primeiro, ele retorna a representação textual do objeto, mas sem invocar qualquer expressão de retorno. Ruby possui, realmente, uma expressão return, mas a mesmo não precisa ser usada na maior parte dos casos. Isso acontece porque qualquer expressão em Ruby retorna automaticamente um valor. Se o valor não é explicitamente retornado, o valor nil é usado implicitamente. Isso significa que um método retorna o resultado de sua última expressão, sem necessidade de chamar return. No método acima, estamos retornando também uma string, usando o que é chamado de interpolação de valores. Qualquer expressão entre os delimitadores #{} dentro de uma string será executada e seu valor representacional retornado isto é o método to_s do valor resultante é invocado automaticamente. Veja o resultado do método acima: irb(main):010:0> gol = Carro.new("Volkswagem", "Gol") irb(main):011:0> gol irb(main):012:0> gol.to_s => "marca: Volksvagem, modelo Gol" Voltando à questão dos atributos, se quisermos torná-los manipuláveis, podemos usar a seguinte implementação:
14 class Carro def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} def def Isso permite o seguinte código: irb(main):016:0> gol = Carro.new("Volkswagem","Gol") irb(main):017:0> gol.marca => "Volkswagem" irb(main):018:0> gol.marca = "Nova Volks" => "Nova Volks" irb(main):019:0> gol.marca => "Nova Volks" Note que agora temos métodos que podemos usar para obter ou mudar o valor de um atributo do objeto. Os métodos que mudam o valor possuem um sinal de igual (=) em seu nome e são usados automaticamente pelo Ruby em caso de atribuição como o exemplo demonstra. Para encurtar ainda mais, Ruby permite que declaremos métodos de acesso à essas variáveis de uma forma diferente, observe o código: class Carro attr_reader :marca attr_writer :modelo def initialize(marca, = marca
15 @modelo = modelo def to_s marca: #{@marca}, modelo #{@modelo} ou ainda: class Carro attr_accessor :marca attr_reader :modelo def initialize(marca, = = modelo def to_s marca: #{@marca}, modelo #{@modelo} Note o início de cada código temos readers, writers e accessors e que eles usam símbolos para fazerem referências à variáveis de classe. Estes funcionam como um atalho para a operação tediosa que fizemos anteriormente. Resumindo, o attr_reader permite apenas leitura, o attr_writer permite apenas escrita e o attr_accessor permite escrita e leitura. Observe: irb(main):012:0> gol = Carro.new("Volkswagem", "Gol") irb(main):013:0> gol.marca => "Volkswagem" irb(main):014:0> gol.modelo NoMethodError: undefined method `modelo' from (irb):14 irb(main):015:0> gol.marca = "Nova Volks" NoMethodError: undefined method `marca=' from (irb):15 irb(main):016:0> gol.modelo = "Novo Gol" => "Novo Gol"
16 Pra fechar essa parte, como seriam feitas heranças em Ruby? Herança simples em Ruby é bastante trivial: class B < A A declaração acima indica que a classe B herda os métodos da classe A. Variáveis de classe, variáveis de instância, e variáveis de instância de classe seguem as regras descritas anteriormente. Ou seja o exts utilizado no Java, fica assim classe filha < classe pai, no Ruby. Veremos isso com mais detalhes em nossas andanças pelo Rails.
17 Tipos Considerando o fato de que o Ruby é completamente orientado a objetos, todos os seus tipos são representados por classes e uso dos mesmos é bem objetivo e direto. Ainda assim, é bom enter quais são os tipos básicos, quais são os seus detalhes de implementação, e, acima de tudo, quais são as suas limitações. O Ruby possui uma hierarquia relativamente extensa até mesmo para os tipos primitivos. Conhecer essa hierarquia é interessante como uma forma de enter mais como o Ruby funciona e serve como um bom exercício. O tipo mais básico do Ruby é o tipo numérico, em suas duas variantes: inteiro e de ponto flutuante. Os tipos são implementados por classes diferentes, mas a interoperabilidade dos mesmos é similar ao que se vê em outras linguagens de programação. ~$ irb irb(main):001:0> 1.class => Fixnum irb(main):002:0> 1.0.class => Float irb(main):003:0> 1_000_000.class => Fixnum Como o exemplo acima mostra, o Ruby é inteligente o bastante para conseguir operar com métodos mesmo no caso de números de ponto flutuante. A forma exemplificada na terceira linha de código é uma maneira de representar números com mais clareza, e pode ser usada em opção à maneira usual de declaração de números. Um detalhe interessante é que a exemplo do Smalltalk, Lisp e outras linguagens similares o Ruby permite o uso de número inteiros de tamanho arbitrário. Inclusive, há uma conversão automática quando o número excede a capacidade de representação dos inteiros. Veja o exemplo abaixo:
18 ~$ irb irb(main):001:0> 1_000_000_000 * 1_000_000_000 => irb(main):001:2> (1_000_000_000 * 1_000_000_000).class => Bignum A classe Bignum é capaz de representar número com precisão infinita, restrita somente à memória e processamento da máquina hospedeira. O próximo tipo primitivo do Ruby descreve a representação de valores booleanos. O Ruby possui duas pseudo-variáveis que representam esses valores, so essas variáveis as únicas instâncias das suas respectivas classes. Veja o exemplo abaixo: ~$ irb irb(main):001:0> true => true irb(main):002:0> false => false irb(main):003:0> true.class => TrueClass irb(main):004:0> false.class => FalseClass irb(main):005:0> true.class.superclass => Object irb(main):006:0> false.class.superclass => Object irb(main):007:0> TrueClass.new NoMethodError: undefined method `new' for TrueClass:Class from (irb):7 from :0 Note que uma tentativa de instanciar qualquer das duas classes booleanas resulta em um erro. O Ruby remove a definição do método new dessas classes para evitar qualquer problema. Além dessas duas variáveis, existe outra pseudo-variável especial que é o valor nil, que representa nulo. A exemplo das variáveis booleanas, esse valor é a única instância da classe NilClass.. Prosseguindo, temos o tipo que representa seqüências de caracteres, tipo este que é definido pela classe String:
19 ~$ irb irb(main):001:0> "123".length => 3 Considerando que o Ruby é muito voltado para processamento de texto inspirado sem dúvida por sua herança Perl a classe String foi desenhada com uma enorme gama de métodos que podem ser utilizados para esse tipo de trabalho. Além disso, há várias bibliotecas completando o que a classe não apresenta por padrão um tributo à flexibilidade do Ruby. Dois detalhes devem ser considerados quando se trabalha com textos em Ruby. O primeiro é que não existe um tipo para caracteres. Isso leva à situação abaixo: ~$ irb irb(main):001:0> "123"[0] => 49 irb(main):002:0> "123"[0].chr => "1" irb(main):003:0> "123"[0, 1] => "1" Acessar diretamente uma posição de uma String retorna o valor inteiro que representa aquele caractere. As duas outras linhas mostram a forma de obter o valor como uma String de tamanho um: você pode usar o método chr, ou pode obter um pedaço posicionado da String, do tamanho desejado. O segundo detalhe é que o Ruby não suporta Unicode ou UTF-8 por padrão. Veja o exemplo abaixo: ~$ irb irb(main):001:0> "Sábado"[0,2] => "S\303" irb(main):002:0> "Sábado"[0,3] => "S\303\241" irb(main):003:0> "Sábado"[0,4] => "S\303\241b" irb(main):004:0> "Sábado"[1].chr => "\303" irb(main):005:0> "Sábado"[2].chr
20 => "\241" irb(main):006:0> "Sábado"[3].chr => "b" irb(main):007:0> "Sábado".length => 7 Note que pelo fato do a acentuado ocupar dois bytes em uma representação não-ascii, o Ruby falha em suas funções mais elementares. Existem bibliotecas que procuram resolver o problema em graus variados, com inclusive uma delas estando embutida no próprio Rails. Os planos são de que a próxima versão do Ruby suporte Unicode nativamente. Uma característica da manipulação de texto em Ruby é que as strings geradas no mesmo são mutáveis, isto é, qualquer operação normal em uma string aloca uma nova string automaticamente. Por isso, é possível encontrar vários métodos com duas versões: uma que retorna um novo objeto e uma que modifica o objeto existente. Veja o exemplo abaixo: irb(main):001:0> s1 = "abc" => "abc" irb(main):002:0> s2 = s1 => "abc" irb(main):003:0> s2.object_id == s1.object_id => true irb(main):004:0> s2 = s1.upcase => "ABC" irb(main):005:0> s2 => "ABC" irb(main):006:0> s2.object_id => irb(main):007:0> s1 => "abc" irb(main):008:0> s1.object_id => irb(main):009:0> s1.upcase! => "ABC" irb(main):010:0> s1.object_id =>
21 O exemplo mostra que existem métodos que retornam uma nova string com as modificações e métodos que modificam a string sem alocar nova memória. Esses métodos destrutivos geralmente possuem o sufixo! (upcase!, gsub!, etc) para distingui-los dos métodos não-destrutivos (upcase, gsub, etc). Essa característica do Ruby pode causar algumas diferenças de performance em loops se o programador não for cuidadoso. Considere a seguinte situação: um loop em que uma variável string é concatenada repetidamente. O exemplo abaixo mostra essa diferença: ~$ irb irb(main):001:0> s = "" => "" irb(main):005:0> for a in [1, 2, 3] irb(main):006:1> s = s + a.to_s irb(main):007:1> puts s.object_id irb(main):008:1> => [1, 2, 3] irb(main):009:0> for a in [1, 2, 3] irb(main):010:1> s << a.to_s irb(main):011:1> puts s.object_id irb(main):012:1> => [1, 2, 3] irb(main):013:0> s => "123123" O exemplo mostra claramente que, no primeiro caso, um objeto novo é gerado a cada iteração do loop; no segundo caso, entretanto, isso não acontece: a string é meramente re-alocada de maneira eficiente. Isso pode significar uma boa diferença de performance quando se trabalha com textos de tamanho razoável. Existem várias formas de declarar strings em Ruby. Veja o exemplo abaixo:
22 ~$ irb irb(main):001:0> a = "valor" => "valor" irb(main):002:0> 'string com aspas simples: #{a}' => "string com aspas simples: \#{a}" irb(main):003:0> "string com aspas duplas: #{a}" => "string com aspas duplas: valor" irb(main):004:0> %(string com marcadores especiais: #{a}) => "string com marcadores especiais: valor" irb(main):005:0> s = <<EOF irb(main):006:0" uma string com irb(main):007:0" quebra de linha irb(main):008:0" e espacamento irb(main):009:0" EOF => "uma string com\n quebra de linha\n e espacamento\n" Com exceção da aspas simples, todas as outras formas de declaração de strings aceitam interpolação, isto é, a inserção de valores por meio de marcadores especiais em uma string usando #{expressão}. O Ruby aceita essa gama de declarações de strings com o objetivo de facilitar o uso de caracteres especiais. A lista abaixo é um resumo dessas formas de declaração. 'sem interpolacao,' interpolacao e contra-barras %q(sem interpolacao) %Q(interpolacao e contra-barras) %(interpolacao e contra-barras) Um outro tipo interessante do Ruby é o range, que define uma faixa de valores. Ele é muito útil para loops e muito fácil de ser usado: ~$ irb irb(main):001:0> (1..10) => irb(main):002:0> ('A'..'Z') => "A".."Z" irb(main):003:0> 'A'..'Z' => "A".."Z" irb(main):004:0> for i in ('A'..'C')
23 irb(main):005:1> puts i irb(main):006:1> A B C Dois outros tipos básicos que vamos explorar são Array e Hash, que possuem muitas similaridades. Um Array é uma vetor numericamente indexado, enquanto um Hash é um vetor associativo, que permite acesso randômico com maior eficiência. Veja os exemplos abaixo: ~$ irb irb(main):001:0> a = [1, 2, 3] => [1, 2, 3] irb(main):002:0> b = { :a => "Valor 1", :b => "Valor 2" } => {:b=>"valor 2", :a=>"valor 1"} irb(main):003:0> a[0] => 1 irb(main):004:0> a[:b] TypeError: Symbol as array index from(irb):4:in `[]' from (irb):4 from :0 irb(main):005:0> b[:a] => "Valor 1" irb(main):006:0> b[0] => nil irb(main):007:0> b.default = "Valor Default" => "Valor Default" irb(main):008:0> b[0] => "Valor Default" Note que o Array somente permite acesso por índices numéricos, enquanto Hash aceita qualquer objeto, retornando o valor nil se nenhuma chave correspondente for encontrada. Um valor padrão pode ser dado ao Hash para facilitar o retorno se necessário.
24 Métodos Até o momento já usamos bastante os vários métodos das classes primitivas do Ruby, mas ainda não utilizamos plenamente as características dos mesmos. Um método é simplesmente uma mensagem que um objeto pode executar. Se dois objetos respondem à mesma mensagem, eles podem ser trabalhados pelo mesmo código, indepentemente das classes em questão. Essa é uma das maiores vantagens de linguagens dinâmicas com Ruby, Python e Smalltalk e embora possa parecer que isso dá origem a mais erros no desenvolvimento, o inverso é verdadeiro: a flexibilidade da linguagem propicia um código mais limpo com menor incidência de erros. O uso simples de métodos é bem trivial: ~$ irb irb(main):001:0> def metodo(param1, param2) irb(main):002:1> param1 + param2 irb(main):003:1> => nil irb(main):004:0> metodo(1, 2) => 3 irb(main):005:0> metodo 1, 2 => 3 Note que não é necessário usar parênteses a menos que você precise desambiguar algum parâmetro. O mesmo é válido para a própria declaração do método, embora isso não esteja demonstrado acima. E embora seja possível ignorá-los em muitos casos, usar parênteses confere uma legibilidade melhor ao código e é mais desejável na maioria dos casos. O exemplo abaixo, mostra uma outra característica dos métodos Ruby: a possibilidade de receber uma quantidade de parâmetros arbitrária:
25 ~$ irb irb(main):001:0> def metodo(*args) irb(main):002:1> for a in args irb(main):003:2> puts a irb(main):004:2> irb(main):005:1> => nil irb(main):006:0> metodo(1) 1 => [1] irb(main):007:0> metodo(1, 2, 3) => [1, 2, 3] irb(main):008:0> metodo((1..3)) 1..3 => [1..3] irb(main):009:0> metodo(*(1..3)) No exemplo acima, criamos um método que simplesmente imprime todos os valores que lhe foram passados. O sinal de * é conhecido como splat operator e possui dois propósitos: primeiro, na declaração de um método, como na primeira linha, ele especifica que o Ruby deve pegar todos os parâmetros e passá-los em um array para o método. Segundo, como na última linha, ele tem o efeito contrário, ele pede ao Ruby que expanda uma seqüência qualquer em um array. Essas duas aplicações são igualmente importantes e devem ser entidas com clareza. Por fim, métodos podem receber blocos como parâmetros, tanto para execução interna como para retorno parcial de valores. Vamos mostrar no momento somente o uso simples de blocos e retornar ao assunto mais adiante, quando necessário:
26 ~$ irb irb(main):001:0> def metodo(s) irb(main):002:1> yield(s) irb(main):003:1> => nil irb(main):004:0> metodo(2) { i i + i } => 4 irb(main):005:0> metodo("2") { i i + i } => "22" Esse é um exemplo muito simples, mas mostra que blocos de código são variáveis de primeira classe, capaz de interagir com o ambiente como qualquer outro objeto. Aqui notamos o uso dos blocos associadas a código do Ruby, que existem na seguinte forma: do parametros { parametros } O exemplo acima poderia ser reescrito na outra variante: ~$ irb irb(main):001:0> def metodo(s) irb(main):002:1> yield(s) irb(main):003:1> => nil irb(main):004:0> metodo(2) do i irb(main):005:1* i + i irb(main):006:1> => 4irb(main):007:0> metodo("2") do i irb(main):008:1* i + i irb(main):009:1> => "22" Não existe diferença funcional entre os dois estilos, mas a forma { } é geralmente usada mais quando o resultado é importante, e do quando o resultado pode ser descartado, principalmente em loops mais extensos.
27 Expressões Agora que experimentamos um pouco com métodos e tipos em Ruby, podemos partir para a verificação das expressões possíveis na linguagem. Essa verificação é interessante, inclusive, por nos permitir comparar as possibilidades que o Ruby oferece em termos de construções sintáticas versus métodos de primeira classe presentes em sua hierarquia de objetos. A maior diferença entre o Ruby e a maioria das outras linguagens é que basicamente tudo o que pode retornar um valor em Ruby, retorna. Isso permite encadear expressões de uma maneira bem eficiente e prática. Por exemplo: ~$ irb irb(main):001:0> a = b = c = 0 => 0 irb(main):002:0> Class.superclass.superclass Isso se aplica também ao que seriam meras declarações em outras linguagens. Por exemplo: rating = if value == 0 "Terrible" elsif value < 2 "Passable" elseif value < 4 "Nice" else "Superb" Basicamente toda expressão em Ruby pode ser usada dessa forma. A sintaxe das principais expressões é a seguinte:
Bruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby
Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Recapitulando... Escopos Constantes Tipagem Métodos Input Estruturas de Controle e Repetição Classes Nativas Blocos
Leia maisComeçando com Ruby on Rails @gibsongabriel
Começando com Ruby on Rails @gibsongabriel Yukiriho 'Matz' Matsumoto http://ruby-lang.org/pt/ Ruby é uma linguagem de programação interpretada, com tipagem forte e dinâmica, que tem como foco a simplicidade
Leia maisCAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
Leia maisBruno Jurkovski Lucas Fialho Zawacki. Site do curso: www.inf.ufrgs.br/pet/cursos/ruby
Bruno Jurkovski Lucas Fialho Zawacki Site do curso: www.inf.ufrgs.br/pet/cursos/ruby Por que Ruby? Sintaxe limpa e intuitiva: Por que Ruby? Fortemente orientada à objetos Note que não temos os tipos primitivos,
Leia mais2 echo "PHP e outros.";
PHP (Hypertext Preprocessor) Antes de qualquer coisa, precisamos entender o que é o PHP: O PHP(Hypertext Preprocessor) é uma linguagem interpretada gratuita, usada originalmente apenas para o desenvolvimento
Leia maisOrientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Leia maisSUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2
SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2
Leia maisNOVIDADES DO JAVA PARA PROGRAMADORES C
PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB NOVIDADES DO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o Conceito de Classes e Objetos Capacitar para a criação de objetos simples
Leia maisJSP - ORIENTADO A OBJETOS
JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...
Leia maisIntrodução à Linguagem
Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:
Leia maisAlgoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br
(Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Leia maisValidando dados de páginas WEB
Validando dados de páginas WEB Para que validar os dados? Validar os dados informados pelo usuário garante que sua aplicação funcione corretamente e as informações contidas nela tenha algum sentido. Outro
Leia maisTutorial de Matlab Francesco Franco
Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada
Leia maisProf. Esp. Adriano Carvalho
Prof. Esp. Adriano Carvalho O que é um Programa? Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais
Leia maisSISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com
- Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as
Leia mais2. Representação Numérica
2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos
Leia maisMemória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos
TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br
Leia maisEntendendo como funciona o NAT
Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços
Leia maisAnálise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem
Leia maisAULA 4 VISÃO BÁSICA DE CLASSES EM PHP
AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.
Leia maisArquitetura de Rede de Computadores
TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador
Leia maisPROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br
PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando
Leia maisARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
Leia maisPROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor
Leia maisParte I. Demoiselle Mail
Parte I. Demoiselle Mail Para o envio e recebimento de e-s em aplicativos Java, a solução mais natural é usar a API JavaMail [http:// www.oracle.com/technetwork/java/java/index.html]. Ela provê um framework
Leia maisPROGRAMAÇÃO ESTRUTURADA. CC 2º Período
PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem
Leia maisAlgoritmos em Javascript
Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays
Leia maisProgramação WEB I Estruturas de controle e repetição
Programação WEB I Estruturas de controle e repetição Operadores de Incremento Operadores de incremento servem como expressões de atalho para realizar incrementos em variáveis Operadores de Incremento Vamos
Leia mais1.6. Tratamento de Exceções
Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER
Leia mais1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?
Exercícios sobre Linguagem PHP: 1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela? 2) Considere a linguagem de programação PHP e seus operadores. A execução da sentença:
Leia maisConceitos básicos da linguagem C
Conceitos básicos da linguagem C 2 Em 1969 Ken Thompson cria o Unix. O C nasceu logo depois, na década de 70. Dennis Ritchie, implementou-o pela primeira vez usando o sistema operacional UNIX criado por
Leia maisOPERADORES E ESTRUTURAS DE CONTROLE
OPERADORES E ESTRUTURAS DE CONTROLE 3.1 Operadores Os operadores indicam o tipo de operação matemática que será executada gerando novos valores a partir de um ou mais operadores. São muito utilizados em
Leia maisComputação II Orientação a Objetos
Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Introdução Esse não é um curso de Java! O objetivo é aprender os conceitos da programação orientada a objetos,
Leia maisComponentes da linguagem C++
Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras
Leia maisPython Funções. Introdução à Programação SI1
Python Funções Introdução à Programação SI1 Conteúdo Funções Conceitos Objetivos Modularização Exemplos Exercícios 2 Funções O que são? Qual a função de uma função? 3 Imagine o código 4 Imagine o código
Leia maisOrganização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br
Organização de programas em Python Vanessa Braganholo vanessa@ic.uff.br Vamos programar em Python! Mas... } Como um programa é organizado? } Quais são os tipos de dados disponíveis? } Como variáveis podem
Leia maisDadas a base e a altura de um triangulo, determinar sua área.
Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares
Leia maisResumo da Matéria de Linguagem de Programação. Linguagem C
Resumo da Matéria de Linguagem de Programação Linguagem C Vitor H. Migoto de Gouvêa 2011 Sumário Como instalar um programa para executar o C...3 Sintaxe inicial da Linguagem de Programação C...4 Variáveis
Leia mais5 Equacionando os problemas
A UA UL LA Equacionando os problemas Introdução Nossa aula começará com um quebra- cabeça de mesa de bar - para você tentar resolver agora. Observe esta figura feita com palitos de fósforo. Mova de lugar
Leia mais20 Caracteres - Tipo char
0 Caracteres - Tipo char Ronaldo F. Hashimoto e Carlos H. Morimoto Até agora vimos como o computador pode ser utilizado para processar informação que pode ser quantificada de forma numérica. No entanto,
Leia maisTUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo
TUTORIAL DO ACCESS PASSO A PASSO I. Criar um Novo Banco de Dados Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo 3. Clicar em Banco de Dados em Branco 4. Escrever um nome na caixa de diálogo
Leia maisTabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008
Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,
Leia maisHistória. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.
1 1. Overview 2 História Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega. Matz procurava por uma linguagem de script orientada a objetos. A primeira versão estável de Ruby (1.2) foi
Leia maisJavascript 101. Parte 2
Javascript 101 Parte 2 Recapitulando O Javascript é uma linguagem de programação funcional Os nossos scripts são executados linha a linha à medida que são carregados. O código que está dentro de uma função
Leia maisOs objetivos indicados aplicam-se a duas linguagens de programação: C e PHP
AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DÃO CURSO PROFISSIONAL DE TÉCNICO DE GESTÃO E PROGRAMAÇÃO DE SISTEMAS INFORMÁTICOS 2012-2015 PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO MÓDULO 2 Mecanismos de Controlo de
Leia maisExercícios Teóricos Resolvidos
Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar
Leia maisPHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006.
PHP: Formulários e upload de múltiplos arquivos Por Alfred Reinold Baudisch 28 de fevereiro de 2006. Veja como montar um formulário para upload de múltiplos arquivos e como processá-lo com o PHP, usando
Leia maisTrecho retirando do Manual do esocial Versão 1.1
Trecho retirando do Manual do esocial Versão 1.1 A rotina de acesso direto ao XML do S-1000, o usuário pode encontrar na opção de cadastro de Empresas do SIP. Sempre que o usuário localizar a figura ao
Leia maisATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS
ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o
Leia maisCurso de Programação Computadores
3 O Primeiro Programa em C Unesp Campus de Guaratinguetá Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro 3 O Primeiro Programa em C 3.1 - Introdução Depois dos conceitos
Leia mais2 Orientação a objetos na prática
2 Orientação a objetos na prática Aula 04 Sumário Capítulo 1 Introdução e conceitos básicos 1.4 Orientação a Objetos 1.4.1 Classe 1.4.2 Objetos 1.4.3 Métodos e atributos 1.4.4 Encapsulamento 1.4.5 Métodos
Leia maisA lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.
INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,
Leia maisUNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA
Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais
Leia maisLP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br
LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de
Leia maisAlgoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem
Leia maisProgramação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage
Programação para Android Aula 07: Persistência de dados Shared Preferences, Internal e External Storage Persistência de dados Na maioria das aplicações precisamos ter algum tipo de persistência de dados.
Leia maisIntrodução ao PHP. Prof. Késsia Marchi
Introdução ao PHP Prof. Késsia Marchi PHP Originalmente PHP era um assíncrono para Personal Home Page. De acordo com convenções para atribuições de nomes recursivas do GNU foi alterado para PHP Hypertext
Leia mais3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis
3 Dicas MATADORAS Para Escrever Emails Que VENDEM Imóveis O que é um e- mail bem sucedido? É aquele e- mail que você recebe o contato, envia o e- mail para o cliente e ele te responde. Nós não estamos
Leia maisBem- Vindo ao manual de instruções do ECO Editor de COnteúdo.
Manual de Instruções ECO Editor de Conteúdo Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. O ECO é um sistema amigável e intui?vo, mas abaixo você pode?rar eventuais dúvidas e aproveitar
Leia maisCURSO DE PROGRAMAÇÃO EM JAVA
CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro
Leia maisLinguagem algorítmica: Portugol
Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada
Leia maisCriando um script simples
Criando um script simples As ferramentas de script Diferente de muitas linguagens de programação, você não precisará de quaisquer softwares especiais para criar scripts de JavaScript. A primeira coisa
Leia maisMinicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani
Minicurso de Python Aula 1 Raphael Lupchinski Marcelo Millani Introdução Python é uma linguagem de programação poderosa e fácil de aprender Possui estruturas de dados eficientes e de alto nível, além de
Leia maisManual de configuração do sistema
Manual de configuração do sistema (v.1.5.x Beta) Rua México, 119 Sala 2004 Centro Rio de Janeiro, RJ www.doctors-solution.com.br www.simdoctor.com.br contato@simdoctor.com.br Sumário 1. Fazendo seu primeiro
Leia maisJavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.
JavaScript JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos. Pode ser usada dentro do próprio arquivo HTML ou estruturada em um
Leia maisIntrodução a Java. Hélder Nunes
Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais
Leia maisIniciação à Informática
Meu computador e Windows Explorer Justificativa Toda informação ou dado trabalhado no computador, quando armazenado em uma unidade de disco, transforma-se em um arquivo. Saber manipular os arquivos através
Leia maisNa Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:
Tutorial de TCP/IP - Parte 6 - Tabelas de Roteamento Por Júlio Cesar Fabris Battisti Introdução Esta é a sexta parte do Tutorial de TCP/IP. Na Parte 1 tratei dos aspectos básicos do protocolo TCP/IP. Na
Leia mais02 - Usando o SiteMaster - Informações importantes
01 - Apresentação do SiteMaster - News Edition O SiteMaster foi desenvolvido para ser um sistema simples de gerenciamento de notícias, instalado em seu próprio computador e com configuração simplificada,
Leia maisAdapti - Technology Solutions www.adapti.net Leonor cardoso nº 331 Fone : (041) 8844-7805 81240-380 Curitiba - PR MANUAL DO USUÁRIO
MANUAL DO USUÁRIO 1 Índice Administração de Documentos...2 Lista de documentos criados...3 Criando um novo documento...3 Barra de ferramentas do editor...4 Editando um documento...7 Administrando suas
Leia maisUm objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;
um objeto; é definido; Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; class ClasseBase{ é instanciado; $objetobase = new ClasseBase; Caso queira,
Leia maisProgramação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza
Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem
Leia mais4 O Workflow e a Máquina de Regras
4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu
Leia mais1. NÍVEL CONVENCIONAL DE MÁQUINA
1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0
Leia mais1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece.
1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece. Para acessar o programa através do comando na barra de prompt, basta digitar dutoteccad e
Leia maisPolimorfismo. Prof. Leonardo Barreto Campos 1
Polimorfismo Prof. Leonardo Barreto Campos 1 Sumário Introdução; Polimorfismo; Polimorfismo Java; Métodos Abstratos Java Classes Abstratas Java Exercício - Java Polimorfismo C++ Classe Abstrata C++; Funções
Leia maisInformática I. Aula 6. http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1
Informática I Aula 6 http://www.ic.uff.br/~bianca/informatica1/ Aula 6-12/09/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript e
Leia maisManual do Painel Administrativo
Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...
Leia maisIntrodução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
Leia maisAPLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE
1/5 PROTOCOLOS DE O Modelo OSI O OSI é um modelo usado para entender como os protocolos de rede funcionam. Para facilitar a interconexão de sistemas de computadores, a ISO (International Standards Organization)
Leia maisINTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO
Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele
Leia maisAMBIENTE DE PROGRAMAÇÃO PYTHON
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos
Leia maisDespachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1
DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...
Leia maisSérie ArcGIS Online I. Aprenda em 20. Módulo 4. Configure pop-ups. www.academiagis.com.br
Série ArcGIS Online I Aprenda em 20 Módulo 4 Configure pop-ups Junho/2015 academiagis@img.com.br www.academiagis.com.br 1 Configure pop-ups No módulo 3, você trabalhou com várias propriedades diferentes
Leia maisLinguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.
Linguagem e Técnicas de Programação I Operadores, expressões e funções Prof. MSc. Hugo Souza Material desenvolvido por: Profa. Ameliara Freire Operadores básicos Toda linguagem de programação, existem
Leia maisINTRODUÇÃO AO JAVA PARA PROGRAMADORES C
PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB INTRODUÇÃO AO JAVA PARA PROGRAMADORES C Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar a grande semelhança entre Java e C Apresentar a organização diferenciada
Leia maisInternet e Programação Web
COLÉGIO ESTADUAL PEDRO MACEDO Ensino Profissionalizante Internet e Programação Web 3 Técnico Prof. Cesar 2014 1 SUMÁRIO Criar sites dinâmicos em PHP --------------------------------------------------------
Leia maisPROGRAMAÇÃO II 4. ÁRVORE
4. ÁRVORE PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma árvore impõe uma estrutura hierárquica em uma coleção de itens. Um exemplo familiar é a árvore genealógica. Árvores despontam de forma natural em
Leia maisCOMPILADORES E INTERPRETADORES
Aula 16 Arquitetura de Computadores 12/11/2007 Universidade do Contestado UnC/Mafra Curso Sistemas de Informação Prof. Carlos Guerber COMPILADORES E INTERPRETADORES Um compilador transforma o código fonte
Leia maisUsando o do-file editor Automatizando o Stata
Usando o do-file editor Automatizando o Stata 1 O QUE É O EDITOR DE DO-FILE O Stata vem com um editor de texto integrado, o do-file editor (editor de do-files, em português), que pode ser usado para executar
Leia maisFundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br
Fundamentos de Programação Turma CI-240-EST Josiney de Souza josineys@inf.ufpr.br Agenda do Dia Aula 2 (07/08/15) Introdução ao Python História Características Estrutura dos código-fonte Primeiros elementos
Leia maisEXEMPLO DE COMO FAZER UMA MALA DIRETA
EXEMPLO DE COMO FAZER UMA MALA DIRETA OBS: Para esta nota de aula foi utilizada como referência: Apostila Mala Direta Santos, Jorge Rodrigues dos. Foram adaptados os comando para utilizar mala direta no
Leia maisALGORITMOS PARTE 01. Fabricio de Sousa Pinto
ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3
Leia maisComandos Sequenciais if else, e Switch
Introdução à Programação Comandos Sequenciais if else, e Switch 1º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes (afernandes@unipiaget.cv) O computador pensa? Muitas vezes utiliza-se a
Leia maisUnidade 5: Sistemas de Representação
Arquitetura e Organização de Computadores Atualização: 9/8/ Unidade 5: Sistemas de Representação Números de Ponto Flutuante IEEE 754/8 e Caracteres ASCII Prof. Daniel Caetano Objetivo: Compreender a representação
Leia mais