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