# Qual sua linguagem favorita?
Escuto tanto esta pergunta que já me acostumei a responder na ponta da língua: a que paga o meu salário. Não significa que não tenho preferências. Definitivamente quero distância de coisas mais antigas da microsoft como Visual Basic, SQL Server ou .NET.
Entretanto, a ideia aqui não é resmungar ou ser clubista. Quero propor a ideia de que existe um “sotaque” em programação. Na minha caminhada, observei esse “fenômeno” acontecer muitas vezes em circunstâncias parecidas:
- quando a pessoa trabalhou muitos anos numa única linguagem e de repente precisou mudar
- quando se usa uma tecnologia que poucas pessoas na equipe tem conhecimento básico
- algumas outras circunstâncias somadas a prazos apertados demais, impossibilitando que os trabalhadores possam estudar os conceitos
# Quando um “javeiro raíz” não pegou a ideia do node
# Injeção de dependência
Observe este pedaço de código:
const { createReadStream } = require('fs')
const { createInterface } = require('readline')
const { sqsPush } = require('../service/sqsPush')
const dependencies = {
sqsPush,
createReadStream,
createInterface,
}
const processaArquivo = async (file) => {
const { sqsPush, createReadStream, createInterface } = Object.assign({}, dependencies)
// ... código que usa as funções sqsPush, createReadStream, createInterface...
}
O autor deste código quis reproduzir um conceito de frameworks MVC (principalmente java) chamado injeção de dependência. Este conceito foi feito para facilitar testes automatizados instanciando objetos automaticamente. Também há o uso curioso do desctruct com o Object.assign({}, ...
que mostra a intenção de copiar os valores das funções importadas no require
para um novo bloco de memória dentro apenas do escopo da função que se deseja implementar.
O que acontece é que o javascript não é uma linguagem fortemente tipada ou mesmo que obrigue todas as variáveis a serem um objeto de uma classe. Funções são um tipo em javascript. Logo, todas as “dependências” que estão ali não precisam ser instanciadas e aplicação deste conceito se torna desnecessária. O código abaixo funciona do mesmo jeito e tem exatamente o mesmo nível de dificuldade de ser testado num jest
da vida:
const { createReadStream } = require('fs')
const { createInterface } = require('readline')
const { sqsPush } = require('../service/sqsPush')
const processaArquivo = async (file) => {
// ... código que usa as funções sqsPush, createReadStream, createInterface...
}
# DAO
Um outro exemplo seria alguém criar um objeto DAO para abstrair chamadas do sequelize ou qualquer outra lib ORM. Esse anti-pattern eu já vi mais vezes do que gostaria e vou poupar o leitor de um exemplo em código.
# A chegada
Num outro lado da moeda, trazer conceito de uma linguagem para outra pode nem sempre ser algo negativo como os exemplos acima. O Coffescript foi inspirado em Ruby
e Python
. E acabou influenciando os rumos do javascript moderno (es6+), com a criaçao das arrow functions. Conceitos do Rust como o enum Option
, que remove a necessidade de um ponteiro nulo podem ser reproduzidos em praticamente qualquer linguagem e facilitar a vida do coleguinha.
No filme A Chegada (2016), é apresentada a tal “Hipótese Sapir-Whorf”, que diz que o idioma que falamos determina a maneira como pensamos. Um exemplo muito citado é o número muito grande de termos diferentes que esquimós têm para neve. Porém, a hipótese é uma afirmação bem extrema e no mínimo controversa. Segundo as ideias do Chomsky citadas no link anterior, que tem muito a ver com linguagens de computação todas as linguagens têm uma base gramatical comum. E a explicação do fenômeno da neve dos esquimós vêm mais do uso, ou seja: a hipótese confunde causa com consequência. De qualquer forma, no filme isso é representado de uma maneira mais prática interessante: a cientista só entende as atitudes aparentemente hostis dos aliens quando ela entende o idioma deles. Talvez aprender outras linguagens diferentes das que estamos acostumados nos ajudem a usar essas perspectivas novas para o bem.