Fala galera, tudo certo?
Hoje vou falar sobre uma biblioteca que estou utilizando em meus projetos em Node.js, e que sem dúvidas está facilitando, e muito, o desenvolvimento!
O nome da biblioteca é devbox-linq. Você pode saber mais sobre ela olhando lá no site do npm: https://www.npmjs.com/package/devbox-linq e também pode mandar sugestões e correções de bugs por aqui é só dar um fork e mandar um pull request 😀
E o que nós podemos fazer com ela?
Vamos lá então! Eu desenvolvo com C# há um bom tempo, e me acostumei a usar expressões lambda. Que são maneiras simples de filtrar e manipular listas, como exemplo: “Preciso trazer apenas clientes que tenham mais de 20 anos e sejam do sexo masculino”, a consulta ficaria desse jeito:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public IEnumerable<Cliente> ClientesMasculinosComMaisDeVinteAnos(IEnumerable<Cliente> clientes) | |
{ | |
//Reparem no uso da expressão Lambda | |
return clientes.Where(c => c.Idade > 20 && c.Sexo == "Masculino"); | |
} |
E conseguimos fazer várias coisas com ele além de filtrar, como ordenar, retirar elementos iguais (distinct), adicionar, verificar se determinado elemento existe na lista, somar, contar, executar funções de agrupamento, enfim, podemos fazer várias operações com nossa lista. E senti necessidade de utilizar algo parecido no Node.js.
Quem me salvou foi o Gustavo Maritan que também trabalhou com C# e está brincando com Node.js.
É possível ‘imitarmos’ a sintaxe das expressões lambda, mantendo um código limpo e declarativo graças ao EcmaScript 6 que nos disponibilizou as Arrow Functions.
E como eu uso esse cara?
Fácil! Vou colocar alguns exemplos aqui, mas vocês também podem consultar a documentação que está bem simples e prática!
Para utilizar em seu projeto web, por exemplo, basta instalar o pacote via npm, utilizando o comando:
npm install devbox-linq --save
Chega de falação e vamos ao código!
Abaixo deixei alguns exemplos de uso, espero que seja proveitoso!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require('devbox-linq'); | |
var listaNumeros = [1, 6, 2, 5, 9, 6]; | |
var listaNumerosMaioresQueCinco = listaNumeros.Where(x => x > 5); | |
var listaOrdenada = listaNumeros.OrderBy(x => x).ToList(); | |
var listaOrdenadaDecrescente = listaNumeros.OrderByDesc(x => x).ToList(); | |
var soma = listaNumeros.Sum(x => x); | |
var distinct = listaNumeros.Distinct(x => x); | |
var possuiAlgumNumeroCinco = listaNumeros.Any(x => x == 5); | |
var todosOsNumerosSaoCinco = listaNumeros.All(x => x == 5); | |
console.log('listaNumerosMaioresQueCinco'); | |
console.log(listaNumerosMaioresQueCinco); | |
console.log('listaOrdenada'); | |
console.log(listaOrdenada); | |
console.log('listaOrdenadaDecrescente'); | |
console.log(listaOrdenadaDecrescente); | |
console.log('soma'); | |
console.log(soma); | |
console.log('distinct'); | |
console.log(distinct); | |
console.log('possuiAlgumNumeroCinco'); | |
console.log(possuiAlgumNumeroCinco); | |
console.log('todosOsNumerosSaoCinco'); | |
console.log(todosOsNumerosSaoCinco); |
Executando isso no console, o resultado é o seguinte:
Nos exemplos utilizei uma lista de números pra ficar bem didático, porém, podemos utilizar objetos bem mais complexos, com objetos dentro de objetos, listas, e tudo que o seu coração mandar!
Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀
Muito bom, ajuda muito estas expressoes 😀
GostarGostar