Category Archives: Web Development

Early vs Late binding

Nas linguagens de programação o conceito de “Name Binding” é uma abstração que está relacionado a associação de valores com seus identificadores. Um identificador garante ao valor o que é referenciado a esse valor.

Em linguagens fortemente tipadas o binding é estático (“Early Binding”) e suas propriedades são definidas em tempo de compilação e/ou interpretação garantindo a montagem do código de máquina. Isso garante de antemão a inexistência de erros de atribuição e oferece ao ambiente de desenvolvimento um melhor suporte a IntelliSense (a capacidade que dá ao desenvolvedor listar as propriedades de determinado objeto) com os tipos de cada propriedade.

Em linguagens fracamente tipadas o tipo do valor é referenciado em tempo de execução (“Late ou Virtual Binding”) e o compilador/interpretador só conhece esse tipo quando o código faz a checagem e então determina o suporte necessário à propriedade sem ocorrer penalidades.

Linguagens de tipo estático executam menos operações, notadamente pela checagem prévia e oferecem um suporte melhor na garantia da execução mas em contrapartida não possuem a flexibilidade das linguagens dinâmicas.

ECMAScript somente suporta “Late Binding”. O interpretador resolve os tipos de dados na última hora, em tempo de execução, algumas linguagens (como Ruby e Smalltalk) utilizam uma forma particular de Late Binding, a Duck Typing.

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very much complicated matter. Matters, like “coupons for viagra“, are connected numerous types of health problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may turn on erectile dysfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile disfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Desreferenciando objetos

ECMAScript tem um “Garbage Collector” (GC) que evita que voce destrua os objetos explicitamente para liberar memória, quando não existe referência a um objeto é dito que ele está desreferenciado (dereferenced), então quando o GC for executar a rotina de “coleta de lixo” todos os objetos desreferenciados serão destruídos.

O GC executa sempre quando uma function completa seu código, liberando todas as variáveis de seu escopo que sejam locais. É possível liberar um objeto explicitamente, ou seja, o desreferenciando, atribuíndo sua referência igual a null.

var objetoX = new Object;

objetoX = null;

Quando a variável objetoX é atribuído para null, ele perde sua referência criada na primeira linha, isso significa que na próxima vês que o GC for executado esse objeto será destruído.

Essa é sempre uma boa prática para o IE, devido aos seus problemas clássicos de “Memory Leaks”, desreferenciando um objeto evitamos que por motivos de erros ou por deficiência de implementações do GC de alguns Browsers acorram problemas como “Memory Leaks” (despejo de memória).

Overloading e Overriding no Javascript

Overriding é a capacidade de reescrever um método, em uma subclasse, que originalmente foi definido na superclasse. Prover uma diferente implementação para a mesma assinatura.

Overloading é a capacidade de conter duas funções com mesmo nome distinguíveis pelo contexto.

Javascript é fracamente tipado e por padrão não suporta overloading por não conseguir distinguir as assinaturas de métodos com mesmo identificador pelo tipo de dados dos argumentos passados.

Como javascript não suporta overloading, toda construção de métodos com mesmo identificador provoca um overriding seja na própria classe ou em suas subclasses.

Vejamos com a construção do seguinte objeto:

var Objeto = new function(){
    return {
        teste: function(){
            alert("Sem parametros");
        },
        teste: function(x, y){
            alert(x + ' overrindig ' + y);
        }
    }
}();

A execução do metodo teste mesmo que não contenha parâmetros apresentaria:

“undefined overriding undefined”.

Para contornar essa deficiencia voce pode criar um tipo de falso overloading, são vários caminhos de se fazer isso, um deles pode ser da seguinte forma:

var Objeto = new function(){
    return {
        metodo: function(){
            var argumentos = arguments.length;
            switch(argumentos){
                case 0 : alert('Function sem argumentos');
                         break;
                case 1 : alert(arguments[0]);
                         break;
                case 2 : alert(arguments[0] + ' - ' +
                          arguments[1]); break;
            }
        }
    }
}();

Claro que não é nada elegante, mas resolve. A especificação do Javascript (ECMA-262) define na página 39 um objeto chamado “arguments”, que representa um array de todos os argumentos passados para uma função, independente de quantos argumentos são definidos na assinatura dessa função. Por meio desse objeto, você tem como implementar uma resposta adequada dependendo do número de argumentos.