| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2009 17:38:32
|
tonyam
JavaBaby
![[Avatar]](/images/avatar/5e083bd37263c80781fff960e8f5e655.jpg)
Membro desde: 29/03/2006 14:17:03
Mensagens: 88
Offline
|
Vendo no http://desciclo.pedia.ws/wiki/PHP esse código do PHP,
não acreditei, mas é verdade.
<?php
if (('1 galinha' + '2 pardais') == '3 aves') {
echo 'são iguais!!!';
}
?>
Essa instrução é verdadeira. Alguém pode explicar isso?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2009 17:53:55
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
é "incompreensivel" isso acontecer...
alguém pode até explicar isso... e com certeza vão explicar, mas muito louco!!!
é nisso que dá Linguagens não Tipadas!! hahaha
por isso tonyam use Java sempre, pra que vc não desenvolva uma aplicação e ela acabe confundindo 2 aves + 1 Pessoa = 3 Frangos... kkkkkk
flw!
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2009 20:03:12
|
marcobiscaro2112
JWizard
Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline
|
Isso porque a concatenação em PHP não se dá através do sinal de mais, e sim através do ponto. Usando o sinal de mais, ele considera uma soma. E o valor dessas strings na soma é sempre zero. Logo, aquilo seria o mesmo que escrever:
|
Marco Biscaro.
Seja livre!
Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?
Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2009 20:05:33
|
marcobiscaro2112
JWizard
Membro desde: 01/12/2008 11:56:04
Mensagens: 2408
Localização: São Paulo - SP
Offline
|
Tanto que a forma correta funciona como esperado:
O código acima não imprime nada.
|
Marco Biscaro.
Seja livre!
Você sabia que provavelmente há milhares de arquivos duplicados no seu computador?
Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/06/2009 20:29:58
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
aeciovc wrote:
por isso tonyam use Java sempre, pra que vc não desenvolva uma aplicação e ela acabe confundindo 2 aves + 1 Pessoa = 3 Frangos... kkkkkk
Melhor que sempre usar Java, use sempre o seu cérebro para entender como funciona a ferramenta antes de usar-la pra valer.
This message was edited 1 time. Last update was at 17/06/2009 20:30:27
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 11:52:37
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
Melhor que sempre usar Java, use sempre o seu cérebro para entender como funciona a ferramenta antes de usar-la pra valer.
vc sabe de PHP Rubem Azenha???
parece que não!! pq se soubesse um pouco saberia que essa explicação
1. <?php
2. if ("linguagem" + " não " + "tipada" == "loucura total") {
3. echo "mude para o java!";
4. }
5. ?>
Isso porque a concatenação em PHP não se dá através do sinal de mais, e sim através do ponto. Usando o sinal de mais, ele considera uma soma. E o valor dessas strings na soma é sempre zero. Logo, aquilo seria o mesmo que escrever:
é diferente da que foi perguntada.... que no caso é essa: (não que essa não se aplique, é verdade, mas não nesse caso!)
<?php
if (('1 galinha' + '2 pardais') == '3 aves') {
echo 'são iguais!!!';
}
?>
o que não se aplica a explicação do colega tonyam... pois se vc colocar números na frente de uma String ele somará sim.
como por exemplo:
'1 Idiota' + '2 Idiotas' == '4 Idiotas' ???
NÃO!! o PHP é inteligente... agora se vc fizer:
'1 Idiota' + '2 Idiotas' == '3 Idiotas' ???
isso sim é igual, pq ele pega os números da String e soma mesmo! pq??? talvez por não ser tipada!!
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 12:01:18
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
mas... enfim... isso se explica pela falta de tipagem mesmo!!
pq em outras linguagens vc não conseguiria somar duas Strings... pq teria que convertê-las...e na conversão:
Não seria um valor inteiro válido!!
no caso do PHP ele soma pelo fato de dentro da String na 1º posição ter um inteiro... ai ele presume que tem que converter pra somar!!
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 12:08:14
|
Felagund
GUJ Master
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline
|
Ruby também não tem tipagem e não acontece essas coisas.
Você mesmo respondeu a questão, e não tem nada a ver com tipagem.
Tem a ver como foi implementada a concatenação de strings no PHP. Se tá errado, é falha da implementação não da tipagem.
|
att
Rafael Felix
Rolling With Code
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 12:40:20
|
tchandy
JavaChild
![[Avatar]](/images/avatar/cad22bbf0e122b133c9ce941b80831e9.jpg)
Membro desde: 12/03/2007 21:18:49
Mensagens: 114
Localização: Jaraguá do Sul - SC
Offline
|
Felagund wrote:Ruby também não tem tipagem e não acontece essas coisas.
Você mesmo respondeu a questão, e não tem nada a ver com tipagem.
Tem a ver como foi implementada a concatenação de strings no PHP. Se tá errado, é falha da implementação não da tipagem.
Só uma correção, ruby tem tipagem dinâmica e forte: http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/
|
Você pode ter todo dinheiro do mundo, mas há algo que jamais poderá comprar... Um Dinossauro!
(Homer J. Simpson)
http://thiagopradi.net | http://github.com/tchandy |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 12:42:00
|
elomarns
JavaGuru
![[Avatar]](/images/avatar/e044fb795495fd22d8146e50b961e852.jpeg)
Membro desde: 21/04/2006 11:36:58
Mensagens: 241
Localização: Duque de Caxias/RJ
Offline
|
O PHP é tipado sim, só que ele tem tipagem dinâmica, ao contrário de linguagens como Java e C/C++, que possuem tipagem estática. De forma vulgar, uma linguagem com tipagem dinâmica permite que uma variável referencie objetos de várias classes ao longo do tempo. Por exemplo:
No caso acima, a variável local elomar referenciou dois objetos de classes diferentes, o que não seria possível com uma linguagem estaticamente tipada, já que a referida variável teria que ser declarada como pertencente a um tipo específico.
This message was edited 1 time. Last update was at 18/06/2009 12:42:39
|
Elomar Nascimento dos Santos.
Não clique aqui
Nem aqui |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 15:47:07
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
Tem a ver como foi implementada a concatenação de strings no PHP
é pq no PHP a concatenação não é com + e sim com .
até ai blz!mas..
ter tipagem dinâmica naum quer dizer muita coisa, pq naum eh uma tipagem que vc controla e sim a linguagem controla e controla do jeito que ela achar interessante... como nesse caso dizer que '1 galinha' + '2 pardais') == '3 aves'.
pq em Linguagens tipadas isso não poderia ser feito.
o Ruby eh ou não tipado?? (não considere Tipagem dinâmica como Tipagem (estática) que se fala normalmente... pq todos nós sabemos que mais cedo ou mais tarde ele vai converter a variavel...)!
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 15:55:54
|
elomarns
JavaGuru
![[Avatar]](/images/avatar/e044fb795495fd22d8146e50b961e852.jpeg)
Membro desde: 21/04/2006 11:36:58
Mensagens: 241
Localização: Duque de Caxias/RJ
Offline
|
aeciovc wrote:
Tem a ver como foi implementada a concatenação de strings no PHP
é pq no PHP a concatenação não é com + e sim com .
até ai blz!mas..
ter tipagem dinâmica naum quer dizer muita coisa, pq naum eh uma tipagem que vc controla e sim a linguagem controla e controla do jeito que ela achar interessante... como nesse caso dizer que '1 galinha' + '2 pardais') == '3 aves'.
pq em Linguagens tipadas isso não poderia ser feito.
o Ruby eh ou não tipado?? (não considere Tipagem dinâmica como Tipagem (estática) que se fala normalmente... pq todos nós sabemos que mais cedo ou mais tarde ele vai converter a variavel...)!
O Ruby é tipado, assim como todas as linguagens de programação que eu conheço, uma vez que possui um sistema de tipos, sendo este dinâmico (uma variável não precisa ter um tipo declarado) e forte (operações como "1" + 1 geram exceções).
|
Elomar Nascimento dos Santos.
Não clique aqui
Nem aqui |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 16:00:41
|
Felagund
GUJ Master
![[Avatar]](/images/avatar/d8d855c465198499868fb2b566ebee8d.jpg)
Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline
|
Ruby tem tipagem dinamica.
porém vc não pode fazer
pessoa = "X"
pessoa = Pessoa.new
você não define um tipo para pessoa, mas não pode mudar para tipos incompativeis
por exemplo
i = 0
j = "1"
i = j //erro
i = j.to_i //ok
Essa é magica que o PHP não possui.
|
att
Rafael Felix
Rolling With Code
Twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 16:13:58
|
elomarns
JavaGuru
![[Avatar]](/images/avatar/e044fb795495fd22d8146e50b961e852.jpeg)
Membro desde: 21/04/2006 11:36:58
Mensagens: 241
Localização: Duque de Caxias/RJ
Offline
|
Felagund wrote:Ruby tem tipagem dinamica.
porém vc não pode fazer
pessoa = "X"
pessoa = Pessoa.new
você não define um tipo para pessoa, mas não pode mudar para tipos incompativeis
por exemplo
i = 0
j = "1"
i = j //erro
i = j.to_i //ok
Essa é magica que o PHP não possui.
Na verdade você pode fazer usando o Ruby tudo isso que você disse que não pode, até porque essa é basicamente a definição de tipagem dinâmica. Ou seja, uma linguagem com tipagem dinâmica não precisa ter um tipo declarado para as suas variáveis, portanto, você pode atribuir a uma variável referências a objetos de diversas classes, que é basicamente o que você disse que não é possível fazer.
Você pode checar isso através do irb, ou observar abaixo a saída dos comandos que você indicou:
Enfim, não existe tipos inconpatíveis no que diz respeito a atribuir referências à variáveis no Ruby, e nem nas demais linguagens dinâmicas, até porque isso é o que define uma linguagem dinâmica. As incompatibilidades só existem quando você for, por exemplo, somar "1" com 1, o que, no Ruby, gerará uma exceção, mas não por ser uma linguagem dinamicamente tipada, e sim por ser fortemente tipada.
|
Elomar Nascimento dos Santos.
Não clique aqui
Nem aqui |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/06/2009 16:51:00
|
aeciovc
Java Ninja
Membro desde: 28/02/2008 21:15:34
Mensagens: 267
Localização: Recife
Offline
|
mas... se o Ruby eh fortemente Tipada... o que dizer do Java então???
ALTAMENTE EXTRA FORTEMENTE TIPADA?????
o Ruby consegue fazer isso??
o PHP consegue... então o conceito de Tipagem dinâmica eh diferente para as duas linguagens!
pq no PHP vc pode fazer uma variavel multável (aliais, td eh mutável!)! ou seja uma hora ela eh uma Pessoa logo depois eh um numero! certo??
|
Aécio Costa
www.aeciocosta.com.br
|
|
|
 |
|
|