ECMAScript 2015: Classes

ES2015 Gotchas é uma série quinzenal sobre as novidades e pegadinhas do ES2015.

JavaScript é uma linguagem orientada à objetos com conceitos funcionais, porém sua implementação não é a clássica baseada em classes, como é feito no Java ou C# por exemplo, mas sim baseada em protótipo.

Todos os conceitos clássicos de orientação à objeto como hierarquia e polimorfismo podem ser implementadas através de protótipos, mas agora na sexta edição do EcmaScript ganhamos uma maquiagem, uma maneira mais organizada e padronizada de escrever seu código utilizando classes, mas que no final das contas continuará utilizando protótipos por baixo dos panos.

class MyArray extends Array {  
  constructor() {
    super(arguments);
    this.myInstanceProp = "hey";
  }
  toString() {
    return "My Own " + super.toString();
  }
  static defaultArray() {
    return new MyArray(6, 6, 6);
  }
}

Como podem ver, agora podemos facilmente estender outros objetos, sobrescrever métodos, criar métodos estáticos e de instância, além de termos fácil acesso aos métodos da classe base.

Muitas pessoas gostaram da novidade, outras nem tanto, na verdade muitos odiaram, e existe um verdadeiro flame war na comunidade internacional sobre essa nova feature. O principal motivo dessa briga é que muitos acreditam que a orientação à objetos através de classes pode induzir à más práticas, como a hiper hierarquia na extensão de classes, sobrescrevendo diversas vezes métodos em vários níveis, ao invés de pensar nas soluções clássicas e já renomadas como mixins.

Alguns acreditam que essas más práticas são inevitáveis e as classes devem ser evitadas a qualquer custo, chegando a colocar regras no lint do projeto que proíbam o seu uso para sempre. Veja mais sobre isso aqui.

Com grandes poderes vem grandes responsabilidades

Os problemas das classes são velhos conhecidos, mas podem ser evitados. Qualquer programador de Java ou C# de longa data irá te dizer: use composição sobre hierarquia.

Se quiser aproveitar dessa nova padronização de código que inegavelmente facilita sua leitura, saiba quando estender ou não outra classe (dica: quase nunca), estude conceitos clássicos de orientação à objeto, ao mesmo tempo entenda como aplicar esses conceitos à linguagens dinâmicas, e como a comunidade de JavaScript solucionou esses problemas até agora.

A adoção dessa nova feature será inevitável, grandes frameworks como ReactJS e Angular 2 já estão abraçando a ideia. Mesmo fugindo, mais cedo ou mais tarde cairemos num projeto que esteja usando, nos resta fazer nossa lição de casa e aprender a fazer um bom uso dela.

Esse foi o último texto da série ES2015 Gotchas, esperamos que tenham gostado, mas fiquem ligados no blog para muitos outros artigos!

William Grasel

Read more posts by this author.