Coffee-Script. Classes

Fala galera, vou postar aqui o código do coffee-script de uma classe Cachorro que estende de Animal. Sim.. podemos fazer isso! Afinal de contas é javascript e coffee-script... Pode tudo!

Por outro lado, fazer em coffee-script é bem melhor e mais enxuto. Vou postar o código coffee e depois o código gerado e javascript. Vejam só.

Aqui eu crio a classe Animal, que recebe no construtor o nome.
O método falar recebe um parâmetro "texto" e concatenará com o nome para gerar um ALERT


class Animal
  constructor:(@nome)->
  falar:(@texto)-> alert @nome + " FALOU "+ @texto

Aqui eu crio a classe Cachorro, que estende de Animal, recebe no construtor o nome, onde esse construtor irá chamar a super classe a passar o nome como parâmetro. Também o método falar, que por sua vez irá chamar o método falar da super classe para gerar o ALERT.

class Cachorro extends Animal
  constructor:(@nome)->
     super @nome
  falar:(txt)->
     super txt

Já aqui, eu inicializo a variável dog apontando para Cachorro e passo o nome como parãmetro.
depois eu chamo o método falar, passando também a fala do animal. Veja abaixo.

dog = new Cachorro("Dog Alemão");
dog.falar("AU AU ");


Pois bem, agora que expliquei e mostrei o código, preciso mostrar ele funcionando né? Vamos lá, segue imagem do alert abaixo.




Agora, analise você mesmo o código gerado pelo compilador do coffee-script para javascript.


var Animal, Cachorro, dog,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Animal = (function() {

  function Animal(nome) {
    this.nome = nome;
  }

  Animal.prototype.falar = function(texto) {
    this.texto = texto;
    return alert(this.nome + " FALOU " + this.texto);
  };

  return Animal;

})();

Cachorro = (function(_super) {

  __extends(Cachorro, _super);

  function Cachorro(nome) {
    this.nome = nome;
    Cachorro.__super__.constructor.call(this, this.nome);
  }

  Cachorro.prototype.falar = function(txt) {
    return Cachorro.__super__.falar.call(this, txt);
  };

  return Cachorro;

})(Animal);


dog = new Cachorro("Dog Alemão");

dog.falar("AU AU ");

É isso ai galera, espero que tenham gostado e até o próximo artigo. Abraço!



Nenhum comentário:

Postar um comentário