Executando verificação de segurança...
6

Extension Methods em C# e Prototypes em JavaScript: Olha essa similaridade INCRÍVEL!

Bora falar sobre uma técnica poderosa (acho que nem tanto, mas é legal) de programação? Hoje o assunto é Extension Methods no C# e Prototypes no JavaScript.

Extension Methods em C#

No C#, os Extension Methods permitem adicionar métodos a tipos já existentes sem alterar o código original. Olha este exemplo:

var text = "C# Extension methods";
text.log();

public static class InjectString {
    public static void log(this string content) {
        Console.WriteLine(content);
    }
}

Se quiser testar: dotnetfiddle.net

Aqui, log() vira um método de string, sem precisar alterar a classe string. Isso funciona para quase qualquer tipo (bem, dynamic não!)

Prototypes em JavaScript

Já no JavaScript, podemos usar Prototypes para fazer algo parecido. Olha pra tu vê 😁:

String.prototype.log = function() {
    console.log(this.valueOf());
}

var text = "JavaScript Extension methods";
text.log();

Se quiser testar: playcode.io

Agora, qualquer string também tem o método log(). 🔥

E no TypeScript? 🤔

No TypeScript, usar Prototypes é meio merda, porque você vai ter que abrir mão de tipagem, e muitas vezes vai ser preciso lançar um as any. Então, não é tão direto como no C#, mas é possível.

Resumo Final

  • C#: Flexível e seguro — funciona para quase qualquer tipo, exceto dynamic.
  • JavaScript: Prototypes são poderosos, mas em TypeScript, exigem um pouco de "gambiarra" (a de lei né pai 😁).

Esse é um post beeem melhor construído, de um post que fiz no linkedin, mas caso queira, pode acomapnha-lo aqui: Linkedin: Extension Methods e Prototype

Abaixo se quiser (só se quiser!) me apoiar, meu projeto precisa desse alcance pra quando for lançado. Então vou deixar abaixo minhas redes, obrigado! 😁

Caso queira acompanhar o projeto Dicionário do bebê - Implementando API do Stripe em V
Caso queira saber sobre o WebHulkTest (Hulk esmaga!!) WebHulkTest
Abaixo as minhas redes, se quiser ver eu postando algo mais... E eu não tenho nenhuma experiência com isso.

Linkedin: André Luiz
Youtube: @Ddiidev
Github: @Ddiidev
X: @luizdidev

Carregando publicação patrocinada...
2

Extension methods é uma funcionalidade bem legal mesmo. Apesar de eu não usar C#, já tirei proveito disso em Kotlin.

Em TypeScript, para adicionar propriedades ao prototype de algum objeto global sem abrir mão da tipagem, vc pode usar uma interface. Por exemplo:

interface String {
  log(): void;
}

String.prototype.log = function () {
  console.log(this);
};

const text = "JavaScript Extension methods";
text.log();

O ideal é mover a declaração da interface para um arquivo *.d.ts para que a definição esteja disponível em qualquer módulo.

1

Puts!!
Genial, eu não sabia massa que a cada dia o camarada aprende uma coisa nova!

Mas Kotlin tem como fazer também? Não sabia!
Outra coisa, java tem como fazer algo similar, já procurei a um tempo atrás quando precisei uma época atrás.

Muito obrigado pela dica mestre!

1