Ir para conteúdo
Fórum Script Brasil
  • 0

Tipagem


Denis Bittencourt Muniz

Pergunta

Fala galera!

Queria saber qual é a vantagem da tipagem forte.

Queria saber se o caso abaixo é tipico da tipagem pato:

Me.FormBorderStyle = 1   'Essa instrução está correta, pois o VB.net tem tipagem pato, certo?

No caso acima, se fosse C#, daria erro, pois C# tem tipagem forte, certo?

P.S: Uma vez li um tutorial do Graymalkin, mas não me lembro que ele falou das vantagens da tipagem forte. Enfim, gostaria de uma explicação sobre a vantagem da tipagem forte, pois já está me irritando o conceito de tipagem forte.

Falows!

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Existem ao todo quatro combinação de tipagem:

Tipagem Forte × Tipagem Fraca

Em uma linguagem fracamente tipada, as variáveis podem ser interpretadas de forma diferente, dependendo do contexto. Em C, por exemplo, é possível somar duas letras (chars) e atribuir a um float! Em uma linguagem fortemente tipada, como Java, cada variável é sempre interpretada de uma única forma, a menos que o novo comportamento seja explicitamente definido, através de um cast. Caso o comportamento seja incompatível com o tipo selecionado, é acusado um erro durante a compilação.

Exemplo em C:

char a, b;
float c;

c = a + b;
Exemplo em Java:
int i = 2.5; // Erro!
int j = (int) 2.5; // Ok.
Tipagem Estática × Tipagem Dinâmica Algumas linguagens, como Java e C, forçam os usuários a declarar as variáveis antes de serem utilizadas. Outras, como PHP e Ruby, não exigem declarações, e são capazes de escolher que tipo utilizar dinamicamente. É interessante notar que, quase sempre, as linguagens fracamente tipadas são estáticas (como C), e as linguagens fortemente tipadas são dinâmicas (como Ruby). Há, claro as outras combinações: linguagens fracamente tipadas e dinâmicas (como PHP) e as fortemente tipadas e estáticas (como Java). Vamos analizar Ruby, por exemplo:
i = 2000
i = i * i * i
j = "Ola mundo" + i ## Erro! Uma string não pode se misturar a um inteiro. 

Se, por um lado, a tipagem dinâmica pode parecer confusa, ela é também extremamente útil. No exemplo citado, veja que i³ é grande demais para uma variável do tipo int. A linguagem, então, em tempo de execução, converte a variável para um tipo que suporte valores maiores.

A principal crítica quanto à tipagem dinâmica é que você não sabe exatamente o que uma variável é. A qualquer momento, ela pode mudar de tipo, e assumir um comportamento totalmente diferente. Mas enfim, nada que uma boa documentação não resolva.

Concluindo, é complicado dizer quem ganha essa disputa. Cada vantagem pode ser vista como uma desvantagem terrível por outra pessoa. Geralmente quem programa scripts gosta mais de tipagem fraca/dinâmica. Já pra quem quer fazer um sistema operacional, tipagem estática é quase essencial. O ideal é você testar diversas linguagens e ver a que prefere. Não vá usar um estilo só porque alguém disse que era melhor. wink.gif

Mais comparações:

http://rubygarden.org/ruby/ruby%3Faction%3...cVsStaticTyping

http://www.loudthinking.com/arc/000074.html

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

valeu iSoron! Explicação muito interessante, mas agora queria saber o seguinte então: Qual é a principal vantagem das linguagens fortemente tipadas?

Outra também: tipagem pato e tipagem fraca são sinônimos?

Veja se eu estou certo: Então pode se concluir que o Visual Basic 6 tem tipagem fraca/dinâmica, certo?

Espero respostas! Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Fala galera!

Queria saber qual é a vantagem da tipagem forte.

Queria saber se o caso abaixo é tipico da tipagem pato:

Me.FormBorderStyle = 1   'Essa instrução está correta, pois o VB.net tem tipagem pato, certo?

No caso acima, se fosse C#, daria erro, pois C# tem tipagem forte, certo?

Na verdade aí é um caso de conversão implícita. Enums têm seus elementos representando valores inteiros (ou outros tipos). VB.NET não faz essa distinção, sendo possível atribuir o valor ou o elemento da Enum (já que no fundo são a mesma coisa). Já C# faz.

P.S: Uma vez li um tutorial do Graymalkin, mas não me lembro que ele falou das vantagens da tipagem forte. Enfim, gostaria de uma explicação sobre a vantagem da tipagem forte, pois já está me irritando o conceito de tipagem forte.

Por isso que eu prefiro o VB.NET ao C#. Ter a possibilidade de uma tipagem forte e com opção de late-binding (tipagem pato), sem ter que fazer uma pá de casts é bastante atraente, a meu ver.

valeu iSoron! Explicação muito interessante,

Realmente, está de parabéns! biggrin.gif

mas agora queria saber o seguinte então: Qual é a principal vantagem das linguagens fortemente tipadas?

A segurança que um tipo não pode ser interpretado como outro.

Outra também: tipagem pato e tipagem fraca são sinônimos?

Não. A tipagem pato (duck-typing) é uma tipagem dinâmica na qual o tipo do objeto não é verificado em tempo de compilação, sendo somente em tempo de execução. A tipagem fraca já pode ser vista pela ótica do iSoron, de que um tipo não tem características que o caracterizem completamente, ou pela ausência de tipos (como é o caso de VBScript, por exemplo).

Veja se eu estou certo: Então pode se concluir que o Visual Basic 6 tem tipagem fraca/dinâmica, certo?

Não, VB6 é fortemente tipada (possuindo algumas conversões ímplicitas) e tem um tipo chamado Variant que pode acomodar qualquer outro. A presença desse tipo, e a característica de que qualquer variável não declarada tem esse tipo, dão a sensação de tipagem dinâmica (ainda mais porque os operadores são definidos para funcionarem do mesmo jeito que seriam com os tipos reais). O recurso de late-binding também contribui para isso.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

valeu Graymalkin! Dúvidas exclarecidas!

Interessante! Então o VB6 é fortemente tipado.. o tipo Variant que dá a sensação de tipagem fraca..

+ uma: Em C, posso somar 2 'chars' e atribuí-los a um 'int', certo? Mas no VBScript não posso fazer isso.. então existe um 'nível' de tipagem? Assim como acontece em O.O, pois "tal" linguagem é mais orientada que a "outra" linguagem...

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

valeu Graymalkin! Dúvidas exclarecidas!

Interessante! Então o VB6 é fortemente tipado.. o tipo Variant que dá a sensação de tipagem fraca..

Exato. smile.gif

+ uma: Em C, posso somar 2 'chars' e atribuí-los a um 'int', certo? Mas no VBScript não posso fazer isso.. então existe um 'nível' de tipagem? Assim como acontece em O.O, pois "tal" linguagem é mais orientada que a "outra" linguagem...

No VBScript não tem como você criar dois chars e um int (não existem tipos, lembra? Aliás, só existe um tipo, que é o Variant), então não dá pra comparar desta maneira. O char em C é apenas um int com uma representação diferente, portanto somar dois chars é um comportamento natural. De qualquer forma, concordo com a idéia de que uma linguagem pode ser mais fortemente (ou fracamente) tipada do que outra, não necessariamente desmerecendo o título de fortemente (ou fracamente) tipada.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Uma ultima:

Fala galera!

Queria saber qual é a vantagem da tipagem forte.

Queria saber se o caso abaixo é tipico da tipagem pato:

CODE

Me.FormBorderStyle = 1  'Essa instrução está correta, pois o VB.net tem tipagem pato, certo?

No caso acima, se fosse C#, daria erro, pois C# tem tipagem forte, certo?

Na verdade aí é um caso de conversão implícita. Enums têm seus elementos representando valores inteiros (ou outros tipos). VB.NET não faz essa distinção, sendo possível atribuir o valor ou o elemento da Enum (já que no fundo são a mesma coisa). Já C# faz.

Toda linguagem que suporta conversão implicita pode ser considerada com tipagem fraca ou forte? Ou depende da linguagem em questão?

Link para o comentário
Compartilhar em outros sites

  • 0
Uma ultima:
Fala galera!

Queria saber qual é a vantagem da tipagem forte.

Queria saber se o caso abaixo é tipico da tipagem pato:

CODE

Me.FormBorderStyle = 1  'Essa instrução está correta, pois o VB.net tem tipagem pato, certo?

No caso acima, se fosse C#, daria erro, pois C# tem tipagem forte, certo?

Na verdade aí é um caso de conversão implícita. Enums têm seus elementos representando valores inteiros (ou outros tipos). VB.NET não faz essa distinção, sendo possível atribuir o valor ou o elemento da Enum (já que no fundo são a mesma coisa). Já C# faz.

Toda linguagem que suporta conversão implicita pode ser considerada com tipagem fraca ou forte? Ou depende da linguagem em questão?

Depende muito. Além disso, a conversão implícita sempre tem certas regras e só vai aceitar tipos compatíveis:

        Dim i As Integer
        i = 2.5  'Double
        i = 5D   'Decimal
        i = True 'Boolean
        i = 2L   'Long
Todas estas conversões são válidas, pois todas resultam em valores numéricos que cabem em um Integer. A tipagem continua sendo forte (Integer), desde que você atribua valores que cabem em um Integer. Já coisas como...
        Dim i As Integer
        i = "palavra"
        i = "a"c
        i = #12/8/2005#

... não são válidas, porque não resultam em valores que um Integer aceitaria.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ok galera! Vamos por partes (afinal de contas, eu pago os meus impostos... o que isso tem haver com a discusão? XD):

Toda linguagem tem tipagem fraca OU tipagem forte E tipagem estática OU tipagem dinâmica, certo?

No VBScript não tem como você criar dois chars e um int (não existem tipos, lembra? Aliás, só existe um tipo, que é o Variant), então não dá pra comparar desta maneira.

Não Graymalkin, eu sei que no VBScript só existe Variant, mas você não pode fazer isso: x = 10 + "Denis".. Certo?

Se eu estiver certo, em relação ao segundo parágrafo, VBScript possui as tipagens Forte/Dinâmica, certo?

Aguardo respostas! Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Ok galera! Vamos por partes (afinal de contas, eu pago os meus impostos... o que isso tem haver com a discusão? XD):

Toda linguagem tem tipagem fraca OU tipagem forte E tipagem estática OU tipagem dinâmica, certo?

Acredito que sim (não consegui imaginar uma linguagem que pudesse fugir de um ou de outro... todavia é possível que exista).

No VBScript não tem como você criar dois chars e um int (não existem tipos, lembra? Aliás, só existe um tipo, que é o Variant), então não dá pra comparar desta maneira.

Não Graymalkin, eu sei que no VBScript só existe Variant, mas você não pode fazer isso: x = 10 + "Denis".. Certo?

Se eu estiver certo, em relação ao segundo parágrafo, VBScript possui as tipagens Forte/Dinâmica, certo?

Isso é bem relativo. Curiosamente o exemplo abaixo funciona...

x = 10 + "1"

... e o resultado é o equivalente de 10+1, porém não é isso que está escrito ali. É certo que Variant tem sub-tipos (integer, string, etc.). Se estes sub-tipos são tão característicos, ela é fortemente tipada. Porém, o exemplo acima não demonstra exatamente isto.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...