Languages
[Edit]
PT

TypeScript - sobrecargas de construtores / vários construtores / muitos construtores

3 points
Created by:
Alyona
1140

Neste artigo, veremos como sobrecarregar o construtor no TypeScript. No construtor TypeScript, a transfer├¬ncia de arquivos ├ę diferente da do C ++, Java ou C #. A id├ęia principal de sobrecarregar o construtor ├ę criar um construtor comum que verifique qual rei de par├ómetros foi usado e, posteriormente, fa├ža alguma l├│gica. ├Ütil ├ę adicionar defini├ž├Áes de construtores para ajudar outros programadores a saber como usar a classe da maneira correta.

Visão geral simples:

class MyClassName {

    public construtor(a : number);
    public construtor(a : number, b : number);
    public construtor(array : Array<number>);

    public construtor(...args : Array<any>) { // construtor comum

        // checando argumentos e executando cenario adequado
        // or throw new Error('Construtor nao suportado!');
    }
}

// MyClassName usado aqui...

Veja abaixo o exemplo prático:

1. Exemplo prático de múltiplos construtores

A sobrecarga de construtores exige que você escreva alguma lógica para detectar qual construtor foi usado.

public constructor(...args : Array<any>)┬ácont├ęm l├│gica comum onde, dependendo dos argumentos utilizados, deve ser usado um caso especial de cria├ž├úo de objeto.

class Point {
    private coordinates : Array<number>;

    public constructor(x : number, y : number);
    public constructor(x : number, y : number, z : number);
    public constructor(x : number, y : number, z : number, ...coordinates : Array<number>);
    public constructor(coordinates : Array<number>);

    public constructor(...args : Array<any>) { // construtor logico comum
        if(args.length == 0)
            throw new Error('Argumentos nao sao definidos.');
    
        let arg = args[0];

        if(Array.isArray(arg)) {
            if(arg.length < 2)
                throw new Error('Numero minimo de dimensoes ├ę 2.');
        
            this.coordinates = arg;
        } else
            this.coordinates = args;
    }

    public getCoordinate(dimmension : number) : number {
        return this.coordinates[dimmension];
    }

    public toString() : string {
        let result = '{';

        if(this.coordinates.length > 0) {
            result += ' ' + this.coordinates[0];

            for(let i = 1; i < this.coordinates.length; ++i)
                result += ', ' + this.coordinates[i];
        }

        return result + ' }';
    }
}

let a = new Point(1, 2);
let b = new Point(1, 2, 3);
let c = new Point(1, 2, 3, 4);
let d = new Point([1, 2]);
let e = new Point([1, 2, 3]);
let f = new Point([1, 2, 3, 4]);

console.log(a.toString());
console.log(b.toString());
console.log(c.toString());
console.log(d.toString());
console.log(e.toString());
console.log(f.toString());

Resultado:

{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }
{ 1, 2 }
{ 1, 2, 3 }
{ 1, 2, 3, 4 }

Nota: um grande n├║mero de sobrecargas pode levar a uma grande quantidade de erros.┬áPor isso, ├ę melhor evitar essa t├ęcnica.

2. Referências:

  1. Methods Overloading - Microsoft Docs
Native Advertising
­čÜÇ
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - we help you to
solve coding problems.
Ask question.

ÔŁĄ´ŞĆ­čĺ╗ ­čÖé

Join