terça-feira, 14 de fevereiro de 2017

Tipagem de Variáveis

Podemos considerar duas classificações para variáveis, uma baseada na manutenção dos tipos de dados existentes e outra baseada na definição de seus tipos. Para a primeira classificação, podemos distinguir dois tipos de variáveis: forte e fraca. Para a segunda temos outros dois: estática e dinâmica. A tipagem forte ocorre quando a linguagem não permite que uma variável tenha seu valor automaticamente alterado para outro tipo para possibilitar uma operação . A tipagem fraca ocorre quando a linguagem permite que uma variável tenha seu valor automaticamente alterado para outro tipo para possibilitar uma operação. A tipagem estática ocorre quando a linguagem obriga a prévia declaração de tipo de uma variável, sendo que uma vez definida, ela não pode mudar de tipo. A tipagem dinâmica ocorre quando a linguagem não obriga a prévia declaração de tipo de uma variável. O tipo é assumido na atribuição de valor à variável, que pode ser por presunção ou forçado com casting. Além disso, é possível modificar o tipo da variável atribuindo-lhe outro valor. 

Com relação a tipagem forte e fraca, podemos ver um exemplo simples utilizando os modos interativos de PHP e Python. Execute o Python no terminal: 

Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Agora vamos criar duas variáveis. Uma chamada numero1 é um inteiro contendo o número 2. A segunda, chamada numero2 é uma string contendo o texto "3". Em seguida vamos tentar somar o conteúdo das duas variáveis.

>>> numero1 = 2 
>>> numero2 = "3" 
>>> print numero1 + numero2 
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str' 
>>> 

Como você pode ver, ocorreu um erro, pois as variáveis são de tipos diferentes. Ou melhor, não dá para adicionar um tipo inteiro a um string. Agora vamos fazer a mesma coisa em PHP. Primeiro, abra o modo interativo: 

 ~$ php -a 
Interactive mode enabled

php >


Agora tente somar um inteiro com um string: 

php > $numero1 = 2; 
php > $numero2 = '3';
php > print $numero1 + $numero2;

php >

Que interessante. PHP não se voltou para o programador e disse "seu burro, não posso somar um número com um texto!". A partir da operação, ele tomou uma decisão: 'é uma soma aritmética, então os dois operandos tem de ser números. como um deles é texto, vou converter seu conteúdo para inteiro, visto que não o número representado pelo texto não possui casas decimais'. Qual a conclusão que temos? 

Tanto PHP quanto Python possuem tipagem dinâmica. Não precisamos declarar as variáveis, elas assumem um tipo quando recebem um valor. Python, porém, possui tipagem forte. Você não pode executar uma operação se os tipos não forem os especificados pela operação. PHP, por outro lado, tem tipagem fraca. Ele altera o tipo de forma para se ajustar à operação. A tipagem do Python é melhor do que o PHP? Não. É apenas uma questão de abordagem. 

O Python está preocupado em impedir operações indevidas. O PHP, por outro lado, não está sendo conivente com elas, apenas oferece um mecanismo facilitador para o programador, que, se usado de forma indevida, é potencialmente perigoso. Lembre-se de que a mesma faca usada para passar manteiga no pão pode matar uma pessoa. Tudo depende de quem maneja a faca. Um último comentário. Em Python, todas as variáveis contém objetos, ou seja, todos os tipos são classes. Então ao atribuir um valor, a variável referencia um objeto que encapsula aquele valor. PHP, por sua vez, não converte valores automaticamente em objetos. 

Python é melhor do que PHP porque cria objetos pra tudo? Bem, será que você precisa de objetos pra tudo? Não existe melhor linguagem de programação. Existe aquela que é mais adequada para uma determinada aplicação. Utilizar uma única tecnologia para fazer tudo é como usar somente um tipo de material para todas as partes de uma construção. 

Referência: SEBESTA, Robert W. Conceitos de Linguagens de Programação. 5.ed. Porto Alegre. Bookman, 2003.

Nenhum comentário:

Postar um comentário