terça-feira, 30 de agosto de 2011

Operador ternário: Um pequeno teste de performance em PHP

Existem alguns mitos em programação, um deles é que o operador ternário é mais rápido do que o operador IF/ELSE mais comumente usado em desenvolvimento.O operador ternário é aquele no modelo:

<condição> ? <operação 1> : <operação 2>;

Esse operador é mais usado como forma de economizar  na escrita do código e deixá-lo mais claro. Apesar de alguns profissionais não concordarem com a segunda colocação.  

Na prática essa diferença não é notada em programas em linguagens compiladas como C. Afinal, o mais importante nesse caso será quantas vezes essa iteração ocorrerá. Em algumas linguagens interpretadas, mais especificamente o PHP, essa performance já é comprometida em projetos de médio e grande portes por causa de uma particularidade do interpretador.

Em PHP o operador ternário sempre copia o valor comparado, enquanto a instrução if não o faz. Temos ai dois comandos, o de leitura e gravação (em memória presumimos). O PHP usa uma técnica conhecida como copy-on-write: Ao atribuir um valor à uma variável, ele não cria realmente uma cópia do conteúdo da variável até que seja modificado. Ou seja, se o valor no IF não for modificado ele não é copiado, no operador ternário ele sempre é copiado.

Abaixo temos um pequeno código que mostra esse resultado: 


Pegue o código no Pastebin.

fonte: Fabien Potencier

Nenhum comentário:

Postar um comentário

Enforque-se nas cordas da liberdade.