Como pode acontecer isso no PHP?

"

Com licença que eu vou explicar pra vocês de uma vez por todas o que é linguagem fortemente tipada e fracamente tipada. Fortemente tipada é a linguagem de que eu gosto; fracamente tipada é a linguagem que eu quero esculhambar.

Alguma dúvida?

[quote=rubinelli]Com licença que eu vou explicar pra vocês de uma vez por todas o que é linguagem fortemente tipada e fracamente tipada. Fortemente tipada é a linguagem de que eu gosto; fracamente tipada é a linguagem que eu quero esculhambar.

Alguma dúvida?[/quote]
Foi muito claro, hahahaha… :P:P

[quote=Schuenemann][quote=aeciovc]mas… se o Ruby eh fortemente Tipada… o que dizer do Java então???

ALTAMENTE EXTRA FORTEMENTE TIPADA???
[/quote]
Não. Uma coisa é ser dinâmica ou estaticamente tipada, outra é ser fraca ou fortemente. Uma coisa não tem nada a ver com a outra.
Tipagem forte ou fraca tem a ver com a conversão implícita de tipos.

Isso é uma tipagem fraca (Java):

String s = "a" + 5; // resultado: "a5"

Isso é uma tipagem forte (Python): s = "a" + 5 # TypeError: cannot concatenate 'str' and 'int' objects
Dizer que uma tipagem é “forte” ou “fraca” acho que só tem sentido se comparada a outra. Ex: a tipagem de Ruby e Python são mais fortes que a de Java.

Acho que em metade das apresentações que envolvem Java que assisti, o apresentador disse que Java tem tipagem forte por achar que é o mesmo que tipagem estática… :? [/quote]

Gente, o que é isso? Salada de frutas sabor Java, Ruby e PHP? O que tem a ver Tipagem Forte/Fraca com concatenação? Se java consegue converter para concatenar, ótimo. Acho que o erro é do desenvolvedor acreditar que a linguagem tem que sair ajudando em tudo. Se ele depender disso, então não precisa aprender a programar na linguagem.

[quote=Rubem Azenha][quote=aeciovc]
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
[/quote]

Melhor que sempre usar Java, use sempre o seu cérebro para entender como funciona a ferramenta antes de usar-la pra valer.[/quote]

Eu sei, foi cruel. Mas eu concordei. :slight_smile:

Mas quando se faz “a” + 5 em Java nao eh o compilador que faz as conversoes? Eh diferente de javascript/php onde sao feitos em Runtime acho

Esse conceito de tipagem fraca/forte eh muito confuso e nao tem definicao certa. E acho meio estranho considerar Ruby tipagem forte soh porque o metodo ‘+’ solta excessao se for classes diferentes, isso eh detalhe de API, qualquer um pode sobrescrever esse metodo e fazer ele aceitar qualquer objeto, fazendo as conversoes necessarias

Acho melhor usar os termos tipagem estatica (onde o compilador faz as checagens) e dinamica (onde essas checagens sao feitas em runtime pelo interpretador) e esquecer esse papo de tipagem forte/fraca :stuck_out_tongue:

"

É muito comum ver alguém falar asneira quando vai falar linguagens com tipagem dinâmica. Principalmente se estiverem falando mal de PHP ou Javascript, o que parece que está na moda ultimamente.

[quote=victorcosta]
Esse conceito de tipagem fraca/forte eh muito confuso e nao tem definicao certa. E acho meio estranho considerar Ruby tipagem forte soh porque o metodo ‘+’ solta excessao se for classes diferentes, isso eh detalhe de API, qualquer um pode sobrescrever esse metodo e fazer ele aceitar qualquer objeto, fazendo as conversoes necessarias [/quote]

Quando se diz que uma linguagem tem tipagem forte isso significa que ela é type safe, ou seja, não se pode fazer operações ilegais com um tipo. Por exemplo, em Ruby não se pode somar uma string com um inteiro. Isso não tem nada a ver com detalhe de API, de onde você tirou isso?

Java é fortemente tipada.

Isso é açucar sintático:

Na verdade o que acontece é algo parecido com:

Se você tentar fazer alguma operação com a variável s, como tentar colocá-la em uma lista de inteiros, você vai ter um erro de tipos. Isso é ser fortemente tipada.

Por último, uma dica: pelo amor de Deus, não digam que uma linguagem é ruim porque ela tem tipagem dinâmica ou fraca. Vocês vão passar vergonha se tiver por perto um programador que sabe quais as vantagens e desvantagens de tipagens estáticas/dinâmicas/fracas/fortes.

Na wikipedia tem pelo menos 9 conceitos diferentes q certos autores usam pra definir linguagem de “tipagem forte”, por isso q disse q eh ambiguo

“Fixed and invariable typing of data objects. The type of a given data object does not vary over that object’s lifetime. For example, class instances may not have their class altered.”
Se usar esse conceito aqui entao Ruby/Python nao sao linguagens fortes

No topico tinha gente dizendo q Java nao era “tipagem forte” soh pq o compilador faz essas conversoes no ‘+’ por conveniencia

E eu falei que eh detalhe de API pq apesar do metodo ‘+’ do Ruby checar por tipos diferentes, diversos outros metodos no Ruby nao fazem isso. Arrays em Ruby por exemplo permitem vc adicionar objetos de qualquer tipo nele ao mesmo tempo (o que eh estranho pra quem vem de Java)
Eu posso ate alterar o metodo + de Fixnum pra ele aceitar soma de numeros com String

[code]class Fixnum
alias_method ‘old_+’, ‘+’
def +(value)
send(‘old_+’, value.to_i)
end
end

puts 1 + ‘2’[/code]

o codigo acima imprime 3

[quote=victorcosta]
Eu posso ate alterar o metodo + de Fixnum pra ele aceitar soma de numeros com String

[code]class Fixnum
alias_method ‘old_+’, ‘+’
def +(value)
send(‘old_+’, value.to_i)
end
end

puts 1 + ‘2’[/code]

o codigo acima imprime 3[/quote]
Mas isso não muda a forma como a linguagem restringe operações entre tipos diferentes. Você converteu explicitamente o value ali.

"

apesar de polêmico…

já deu pra entender essas questões de Tipagem! :lol:

Olá rapaziada,

Estava navegando e me deparei com essa heresia no Forum do GUJ, rs

Desculpe-me a intromissão, eu não sou fã de foruns, não tenho habito de ficar debatendo horas e horas sobre linguagens mas não pude deixar de informar aqui a realidade do exempo citado no tópico.

Na verdade esse fato ocorre por causa de uma particularidade de muitas linguagens chamada TYPE CASTING. Isso não é só do PHP, talvez seja somente para este exemplo, mas muitas outras linguagens tem cast.

Ocorre porque o operador ‘+’ no PHP é usado somente para SOMA e nao para CONCATENAÇÃO rs… Como ele tenta SOMAR os operadores, Ele faz o cast da string “1 seila o que” para o unico numerico q ele encontra na string, ou seja, o 1. Soma à string “2 nao sei oqlá” que novamente Casta para 2. DEpois compara com o “3 aves seila” que comparado com o numerico da soma, casta novamente, aproveitando somente o 3 efetuando a igualdade verdadeira. Ele faz isso baseado na propriedade de que quando você instancia variáveis de numeros como string, o cast é feito automaticamente. Fazendo com que seja verdadeira, somas como ‘3’+‘5’…

Lembrando que isso é considerada PARTICULARIDADE da linguagem… Assim como Java tem as suas, C# também, Python, etc…
Eu particularmente sou contra falarem mal da linguagem pois não existe linguagem ruim, existe programador ruim. Dizer que PHP é uma porcaria é assinar embaixo de “Utilizei indevidamente a linguagem para fazer bacalhau. Passou, mas deu merd… lá na frente…”

POG que é POG nao precisa usar o PHP pra fazer cagada… Faz em qualquer uma! Assim como o bom programador faz um codigo seguro usando as particularidades do PHP, sem problema algum.

Desculpe se ofendi alguém, não foi intencional… Só não fiquem bitolados em uma única vertente… mente aberta!.. rs

Abraço a todos

1 ano e 3 meses que esse topico estava morto…

Fiquei até com vergonha de le a merda que falei no começo da discução ahuauhuhauha…

Eu gostei do termo “castar”. O PHP “casta” uma string com o operador “+”.

E para dizer em muitas palavras o que já havia sido dito em poucas palavras lá na primeira página

Gostou?

Verbo devidamente aportuguesado conforme a necessidade… Dá até pra conjugar!!

Abraços

Sua explicação faz sentido mas não invalida argumentos anteriores. O fato de fazer casts arbitrários faz de PHP uma linguagem fracamente tipada. Uma apresentação que pode ajudar:

[]s

Saudações amigo,

Realmente a linguagem envolve uma baixa tipagem e um cast dinâmico.

E não os casts não são arbitrários, você não deve ter se acostumado com eles, ou simplesmente não os deve ter levado a sério como uma regra ou premissa da linguagem.

E definitivamente fazer sentido não, É exatamente o que expliquei.

Compreenda que o fator que me fez responder o tópico é que o mesmo foi fechado com respostas absurdas sobre a dúvida em questão. Em alguns anos de experiência em desenvolvimento, descobri que tem fatores maiores que influenciam muito mais na qualidade do software que a linguagem em si.

Grande abraço, foi bom conhecer vocês.

Gustavo Henrique

[quote=Felagund][quote=GHSilva]

[/quote]

1 ano e 3 meses que esse topico estava morto…

Fiquei até com vergonha de le a merda que falei no começo da discução ahuauhuhauha…[/quote]

Eu ja estava na segunda pagina todo empolgado, ja pensando numa resposta, quando resolvo olhar a data do post :shock: :shock: :lol: :lol: