| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/04/2009 21:54:43
|
MauNunes
Java Ninja
Membro desde: 10/06/2007 22:27:54
Mensagens: 282
Offline
|
Nunca tinha visto Ruby na vida e resolvi tentar aprender atraves do livro do Rodrigo Urubatan que apesar de ter como foco Ruby on Rails, tem nos primeiros capítulos uma introdução a linguagem Ruby.
Não se se é problema meu que conheço só java, ams to tendo uma certa dificuldade de enter a linguagem.
Abaixo está os código que viajei.
A saida é 1
2
3
4
E o outro
A saida é: Recebi 23 dentro deste bloco
Meu Deus! Daonde surgiu aquele |var| o que ele faz ? Achei que iria passar o um parâmetro para |var|
E o outro código ? Sem chance..
Será que é normal agente não entender nada no começo ?
This message was edited 1 time. Last update was at 16/04/2009 21:56:40
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2009 02:15:22
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Ok, vamos lá.
Vou te ensinar de um jeito bem simplista, na medida em que você se acostumar com a linguagem você pode procurar por mais materiais e entender mais a fundo o que se passa.
O ruby te deixa 'passar' blocos de código pros métodos. Você pode pensar nesses blocos como funções que vão ser executadas em 'alguma coisa' que o metodo que vc passou o bloco retorna.. essa 'alguma coisa' o método 'joga' no parâmetro do seu bloco.
Pensa que existem dois tipo de parametros: o parametro do método e o parametro do bloco.
Exemplo:
No caso do método 'met', quando você chama esse metodo sem passar um bloco, ele imprime o argumento que você passou.
Quando você passa um bloco pra 'met', o 'if block_given?' vê que você passou o bloco e o executa. Aí ele 'joga' a variável 'alguma_coisa' (usando yield) no parâmetro do bloco.
No primeiro exemplo que você colocou, o each faz um yield pra cada elemento do array, por isso que todos os elementos são impressos. O segundo método é parecido com o que eu dei de exemplo...
É isso ai!
This message was edited 1 time. Last update was at 17/04/2009 02:18:26
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2009 07:11:15
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1531
Localização: Terra (maior parte do tempo)
Offline
|
Se quiser melhores detalhes procure um tutorial do CLIPPER vs 5.0 em diante, você vai encontrar vários exemplos com explicações bem detalhadas sobre o assunto.
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2009 10:21:08
|
MauNunes
Java Ninja
Membro desde: 10/06/2007 22:27:54
Mensagens: 282
Offline
|
Olá dlt, beleza ?
Cara obrigado pela explicações, mas vamos ver se entendi.
Quando eu passo um bloco para o método met, ele verifica se é um bloco atraves do if block_given?, certo ?
Sendo assim ele executa o bloco atraves e atribui o valor para yield. Assim sendo, novamente chama-se o metodo met passando como parâmetro o resultado atribuido a yield .
Só não entendi o resultado abaixo. Vc não esta passando para o método yield o valor 'testando', o retorno não deveria ser 'testando', já que 'testando' não é um bloco de código.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2009 13:53:54
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Sendo assim ele executa o bloco atraves e atribui o valor para yield. Assim sendo, novamente chama-se o metodo met passando como parâmetro o resultado atribuido a yield .
Não. O método 'met' não é chamdo duas vezes. Se você passar um bloco pra ele, ele executa o bloco, que espera um parâmetro.
Pensa que o bloco é uma função. O yield é um método que o ruby usa pra fazer o bind do que vc passar como parâmetro pra ele com o parâmetro que o bloco espera.
Considerando esse bloco:
Se eu tenho o bloco, e passo ele pro método 'met', o yield pega o valor da variável 'alguma_coisa' e coloca no lugar do 'var' do bloco. Depois o bloco é executado com o parâmetro que foi passado pra ele pelo yield.
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/04/2009 14:51:33
|
peczenyj
Moderador
![[Avatar]](/images/avatar/299dc35e747eb77177d9cea10a802da2.jpg)
Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline
|
puxa, com Ruby vc pode passar um bloco de codigo para um metodo.
Vc teria que fazer isso, em javascript, para ter o mesmo efeito:
perceba que o que muda é que vc passa, em ruby, um {|i| faz_algo_com(i) } pois vc esta passando um bloco que recebe um parametro.
Pratique mais que uma hora cai a ficha, comigo foi assim.
|
http://pacman.blog.br
'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.' |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2009 08:24:26
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
Boa idéia
vou tentar colocar exemplos em outras linguagens na próxima vez que eu for explicar isto
PS.: Mauricio, a explicação que te mandei por email ajudou?
This message was edited 1 time. Last update was at 19/04/2009 08:24:57
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/04/2009 11:36:35
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
urubatan wrote:Boa idéia
vou tentar colocar exemplos em outras linguagens na próxima vez que eu for explicar isto
PS.: Mauricio, a explicação que te mandei por email ajudou?
Urubatan poderia expor a explicação aqui para que todos pudesse acompanhar o raciocínio nesse post ?
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2009 08:19:42
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Sei não.. acho que a versão em javascript do jeito que foi colocada confunde mais ainda quem tá começando.
Acho um 'map' mais simples:
Tirei o código do map daqui.
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2009 10:35:07
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
Marcio Duran wrote:
Urubatan poderia expor a explicação aqui para que todos pudesse acompanhar o raciocínio nesse post ?
Segue o que mandei por email:
cria uma closure que recebe um parâmetro
esta closure é passada como parametro para o método each do array
eu posso por exemplo fazer:
PS.: mais adiante ainda no primeiro capitulo do livro isto é explicado, derepente o erro foi falar de arrays antes de falar de métodos.
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2009 10:36:24
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
dlt wrote:Sei não.. acho que a versão em javascript do jeito que foi colocada confunde mais ainda quem tá começando.
Acho um 'map' mais simples:
Tirei o código do map daqui.
OK, mas a idéia não era um código simples e javascript, era um código com a mesma lógica daquele em Ruby para exemplificar o que estava acontecendo.
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2009 11:53:47
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Eu estava respondendo a esse post seu:
urubatan wrote:Boa idéia
vou tentar colocar exemplos em outras linguagens na próxima vez que eu for explicar isto
Por isso falei do js.
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/05/2009 22:16:19
|
Filipe Chagas
JavaGuru
Membro desde: 18/09/2006 15:26:48
Mensagens: 226
Offline
|
A quem pertence este método block_given? ... ?
De onde ele vem?
|
@filipechagas
about.me/filipeochagas
filipechagas.wordpress.com
<><
Jesus te ama! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/05/2009 10:29:27
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
Filipe Chagas wrote:A quem pertence este método block_given? ... ?
De onde ele vem?
pertence ao core do ruby, se não estou enganado, foi declarado no modulo System
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/05/2009 10:18:51
|
Filipe Chagas
JavaGuru
Membro desde: 18/09/2006 15:26:48
Mensagens: 226
Offline
|
[off] Depois desse tópico, comprei o seu livro, urubatan, e devo parabenizá-lo, o conteúdo está excelente! Gostaria, apenas, de deixar uma sugestão: Que tal criar uma seção no portal que você criou para o livro (http://livro.urubatan.com.br/), para as erratas. Eu sei que você tem as colocado no seu blog, mas se estivessem em uma seção, como falei, ficariam mais fáceis de acessar. Fica aí a dica. Novamente meus parabéns. Sucesso! [/off]
This message was edited 1 time. Last update was at 18/05/2009 10:21:51
|
@filipechagas
about.me/filipeochagas
filipechagas.wordpress.com
<><
Jesus te ama! |
|
|
 |
|
|