Uma Breve Introdução a Classes no TypeScript

in #typescript5 years ago

A programação orientada à objetos no JavaScript é originalmente realizada através de funções e herança prototípica. Com o advento do ECMAScript 2015, coloquialmente chamado de “ES6”, foi adicionada a palavra chave class, agora nos permitindo criar classes de maneira similar à linguagens como C++, C#, e Java.

O TypeScript também tem suporte a declaração de classes através da palavra chave class. Vamos ver um exemplo:

class Forma {
  nome: string;

  constructor(oNome: string) {
    this.nome = oNome;
  }
}

O exemplo acima define uma classe chamada de Forma, que tem como atributo a propriedade nome. A função constructor() é chamada quando você construir um objeto baseado na classe e atribui um nome à forma.

O acesso de membros da classe é por padrão public, se nada for definido explicitamente. Entao podemos instanciar um objeto e acessar a propriedade nome diretamente:

let retang: Forma = new Forma("Retangulo");
console.log(`O nome da forma é ${retang.nome}`);

A expressão acima primeiro declara uma variável do tipo Forma e atribui ao seu valor uma nova instância de Forma, com o nome Retangulo. Note que a string Retangulo é passada como argumento para o constructor, que por si atribui o nome do objeto this.nome.

O console.log imprime uma mensagem que inclui acesso ao nome da Forma diretamente, sem passar por um método getter.

Vamos adicionar duas propriedades à classe Forma: largura e altura. Ambas devem ser do tipo number.

class Forma {
  nome: string;
  largura: number;
  altura: number;

  constructor(oNome: string, aLargura: number, aAltura: number) {
    this.nome = oNome;
    this.largura = aLargura;
    this.altura = aAltura;
  }
}

Agora podemos fazer um método para calcular a área da forma:

class Forma {
  // ...
  public obterArea(): number {
    return this.largura * this.altura;
  }
}

Como já mencionado, o acesso dos membros de uma classe em TypeScript é public por padrão, mas o exemplo acima o define explicitamente. Acesso público significa que o membro pode ser referenciado por fora da classe. Isso é o oposto do acesso privado (private), em que é proibido a referência do membro de fora da classe ou instância.

O método não tem nenhum parâmetro porque os valores necessários para calcular a área já são parte dos atributos do objeto.

O tipo do valor de retorno do método obterArea é explicitamente definido como number, mas poderia ser omitido e o compilador deduziria o tipo ao analizar a expressão de retorno.

Vamos testar o método obterArea:

let retang: Forma = new Forma("Retangulo", 3, 4);
console.log(`A area do retângulo é ${retang.obterArea()}`);

Saída:

A area do retângulo é 12

Para não expor os atributos largura e altura do objeto ao mundo de fora, que tal redefinir essas propriedades com acesso privado?

class Forma {
  // ...
  private largura: number;
  private altura: number;
  // ...
}

Dessa maneira, se o usuário do objeto tentar referenciar retang.largura, o compilador irá emitir um erro dizendo que o acesso não é permitido devido a propriedade ser privada:

Property 'largura' is private and only accessible within class 'Forma'.

Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:

Nos vemos lá!

Sort:  

Congratulations @nbkmundotech! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 50 upvotes. Your next target is to reach 100 upvotes.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.21
TRX 0.20
JST 0.034
BTC 98477.90
ETH 3327.94
USDT 1.00
SBD 3.07