TypeScript: Union

Dando continuidade a minha serie de artigos sobre TypeScript, hoje eu irei apresentar o Union.

O Union é um dos tipos do TS que nos permite combinar um ou mais tipos de types. Sua sintaxe é um pouco diferente do que eu demonstrei nos últimos artigos, ele utiliza um barra vertical para passar os tipos que ele irá aceitar.

Sintaxe:

(tipo1| tipo2 ...)

Para ficar mais claro, vamos criar alguns exemplos práticos:

let exemploVariavel: (string | number);
exemploVariavel = 123;
console.log(exemploVariavel); //123
exemploVariavel = "ABC";
console.log(exemploVariavel); //ABC

Note que a variável exemploVariavel aceitou os dois valores: 123 (number) e “ABC” string.

Mas ai vem aquela dúvida, ele só aceita dois types? Não, nós podemos passar mais de um type para ele.

let exemploVariavel: (string | number | boolean);
exemploVariavel = 123;
console.log(exemploVariavel); //123
exemploVariavel = "ABC";
console.log(exemploVariavel); //ABC
exemploVariavel = true;
console.log(exemploVariavel); //true

Nós podemos utilizar ele também como parâmetro de função.

function deleteTeste(usuario: string | string[]) {
    if (typeof usuario == "string") {
        console.log(usuario, "deletado");
        //função para deletar um registro
    } else {
        var i;
        for (i = 0; i < usuario.length; i++) {
            //função para deletar mais de um registro
            console.log(usuario[i], "deletado");
        }
    }
}

Nesse exemplo nós podemos passar um registro para o nosso método deleteTeste ou passar um array de registros para serem deletados.

E para finalizar esse artigo, nós podemos utilizar ele também com Arrays.

var arr: (number[] | string[]);
var i: number;
arr = [1, 2, 4]

for (i = 0; i < arr.length; i++) {
    console.log(arr[i])
}

arr = ["A", "B", "C", "D"]

for (i = 0; i < arr.length; i++) {
    console.log(arr[i])
}

Resultado:

Image for post
Resultado union TypeScript

Bom, a ideia desse artigo era apresentar mais um dos types do TS 😉 Espero que tenham gostado e até um próximo artigo pessoal.

Referência: https://medium.com/xp-inc/typescript-union-4c6899ccf408

Comparando os termos utilizados no NoSQL com SQL

SQL

SQL é a sigla utilizada para “Structured Query Language” que traduzindo para o português significa: “Linguagem de Consulta Estruturada”.

NoSQL

NoSQL (Not Only SQL) é o termo utilizado para banco de dados não relacionais. Ele foi desenvolvido para ter uma performance melhor e uma escalabilidade mais horizontal para suprir necessidades onde os bancos relacionais não são muito eficazes.

  • Colunas: Os dados são armazenados em linhas dentro de tabela no disco. Um exemplo de banco de dados neste formato é o Cassandra
  • Grafos: Os dados são armazenados em forma de grafos (vértices e arestas). Um exemplo de banco de dados neste formato é o Neo4j
  • Chave-valor: Em algumas pesquisas e testes realizados pela internet, esta família de banco NoSQL é a que mais aguenta carga de dados, pois o seu conceito é que um determinado valor seja acessado através de uma chave identificadora única. Um exemplo de banco de dados neste formato é o Redis.

Image for post

Image for post
Comparando SQL com NoSQL fonte: (codersera)

Os termos utilizados em cada um deles:

Image for post
Conhecendo os termos entre SQL e NoSQL
Image for post
Comparando as instruções de inserção e consulta no SQL com NoSQL

Referência: https://medium.com/xp-inc/comparando-os-termos-utilizados-no-nosql-com-sql-e862788e2374

O trabalho remoto pós-covid

2020 foi um ano diferente para todos e, com essa pandemia, uma das soluções adotadas foi o trabalho remoto. Muitas empresas foram forçadas a permitir suas equipes trabalhando à distância, para manter a empresa funcionando e seus colaboradores saudáveis. Agora é um momento de reflexão e, sabendo disso, muitas empresas podem manter o trabalho remoto no mundo pós-covid, porém, algumas velhas formas de pensar das empresas podem surgir. Aqui irão algumas dicas importantes para você que deseja trabalhar remotamente pós-pandemia, passando um tempo a mais com sua família.

Dica nª 1: Procure empresas remotas:

Existem empresas onde a totalidade de seus funcionários (ou uma grande maioria) trabalham de forma remota, mantendo funcionários de todas as partes do planeta. Dificilmente essas empresas pedirão que você faça a transição para o escritório, pois ele não existe! Essas empresas possuem ferramentas e processos que facilitarão o trabalho remoto, pois há a necessidade de todos em realizá-lo. O Gitlab é um exemplo de empresa remota.

Dica nº 2: Mostre que você é um funcionário remoto experiente:

Levando em consideração a epidemia, muitas pessoas possuem uma experiência real de trabalho remoto. Você pode acrescentar e enfatizar isso em seu currículo ou apresentação. Explique que você se mantém motivado e produtivo trabalhando em casa, mantendo o trabalho muito eficaz.

Continue lendo “O trabalho remoto pós-covid”

JavaScript OOP: Uma introdução parte 1

Por definição, sabemos que uma linguagem orientada a objetos tem como característica principal o modelo de linguagem baseada em classes. Sabemos que JavaScript não é uma linguagem baseada em classes, mas sim, baseada em protótipos. Uma linguagem baseada em prototypes tem a noção de um objeto protótipo, usado como modelo para se obter as propriedades iniciais de um novo objeto.

Por exemplo:

let carros = {
    carro1: "Gol",
    carro2: "Uno"
}

console.log(carros.carro1);
console.log(carros.hasOwnProperty("carro3"));
//gol
//false

O objeto carros possui duas propriedades: carro1 e carro2, e nenhum outro método.

E o hasOwnProperty? Vem do Objeto Protótipo.

Expandindo o objeto carros no console, vemos que existe uma propriedade __proto__. Expandindo a propriedade __proto__, vemos que o hasOwnProperty está lá!

Todos os objetos têm acesso ao Objeto Prototype. Eles não possuem as propriedades, mas têm acesso concedido às propriedades no protótipo.

A propriedade __proto__:

Ela aponta para o objeto que é usado como protótipo. Esta propriedade em cada objeto, permite acesso ao Object prototype!

Todo objeto, por padrão, possui essa propriedade, exceto quando o __proto__ é apontado para outro protótipo. Podemos também modificar esta propriedade, declarando explicitamente que ela deve se referir a outro protótipo. Os seguintes métodos são usados para conseguir isso:

Object.create():

function ObjetoPessoa(nome, idade){
    let pessoa = Object.create(objetoConstrutor);
    pessoa.nome = nome;
    pessoa.idade = idade;
    return pessoa;
}

let objetoConstrutor = {
    falar: function(){
        return "Olá";
    }
}

let joao = ObjetoPessoa("João", 54);
console.log(joao);

Observe o método falar na propriedade __proto__. O Object.create usa o argumento passado para ele para se tornar o protótipo.

Utilizando o new:

A propriedade __proto__ é direcionada ao protótipo de ObjetoPessoa, mas este é um objeto (par de chave e valor), portanto, ele também possui uma propriedade __proto__ que refere-se ao protótipo global Object. Esta técnica é chamada de PROTOTYPE CHAINING.

O New faz a mesma coisa que o Object.create(), apenas facilitando-o, pois faz algumas coisas automaticamente para você:

function ObjetoPessoa(nome, idade){
    this.nome = nome;
    this.idade = idade;
}

ObjetoPessoa.prototype.falar = function(){
    return "Olá!"
}

let joao = new ObjetoPessoa("João", 45);

CLASS:

O ECMAScript 2015 introduziu a palavra-chave class, fazendo com que o javaScript se pareça com uma linguagem OOP. Mas é apenas um enfeite sobre a técnica de prototipagem existente, pois ele continua utilizando protótipos em segundo plano, apenas fazendo com que o corpo externo do código se pareça com OOP. Vejamos:

class Pessoas {
    constructor(nome, idade, humor){
        this.nome = nome;
        this.idade = idade;
        this.humor = humor;
    }

    cantar(){
        return this.nome + " está cantando!";
    }

    dancar(){
        return this.nome + " está dançando!";
    }
}

let joao = new Pessoas("João", 25, "bem humorado");
console.log(joao);

E esse seria o resultado no console:

Veja que a propriedade __proto__ faz referências ao protótipo Pessoas (que faz referência ao protótipo Object). Podemos ver que o construtor define os principais recursos, enquanto cantar() e dancar() são os protótipos.

O código acima, sem utilizar a palavra-chave class, seria:

function Pessoas(nome, idade, humor){
    this.nome = nome;
    this.idade = idade;
    this.humor = humor;
}

Pessoas.prototype.cantar() = function{
    return this.nome + " está cantando!";
}

Pessoas.prototype.dancar() = function{
    return this.nome + " está dançando!";
}

let joao = new Pessoas("João", 25, "bem humorado");

Gostou deste artigo? Comente abaixo!

Referências: https://www.freecodecamp.org/news/how-javascript-implements-oop/

JAMStack, o que é?

Construir um aplicativo que seja flexível, iterável e construído em um curto espaço de tempo pode realmente ser desafiador. Soluções em cloud como AWS, Azure e GPC fornecem aplicativos Web escaláveis com custo baixo e em poucas semanas.

Escolhendo um banco de dados, movendo o código do aplicativo para soluções em contâiner como o Docker, implantando funções de Back-End e alterações de código. Assim é o que acontece no desenvolvimento de aplicativos atualmente. Com o JAMSTACK, sites e aplicativos rápidos e seguros são entregues pré-renderizando arquivos e servindo-os diratemente de uma CDN, onde o requisito de gerenciar ou executar servidores Web são removidos.

O Jamstak não é sobre tecnologia específicas. É uma nova maneira de criar sites e aplicativos, oferecendo melhor desempenho, segurança e custo de dimensionamento e uma melhor experiência do desenvolvedor. Sites pré-renderizados podem ser aprimorados com JavaScript e os crescentes recursos de navegadores e serviços disponíveis via APIs. O Jamstack é a junção de JavaScript, APIs e Marcação.

Você provavelmente já trabalhou em um site Jamstack, utilizando Jekyll, Next, Gtasby, entre outros gerenciadores de site estático.
Quando você utiliza um CMS, não está utilizando Jamstack. Por exemplo, se estiver utilizando WordPress, Drupal, Joomla, um aplicativo Web executado por servidor que depende de algum idioma back-end ou um aplicativo de página única que utiliza renderização isomórfica para criar visualizações no servidor em tempo de execução.

Benefícios:

Maior segurança:

Com os processos do lado de servidor abstraídos nas APIs de microsserviço, as áreas de superfície para ataques são reduzidas.

Escala mais barata e fácil:

Quando sua implantação equivale uma pilha de arquivos que podem ser veiculados em qualquer lugar, o dimensionamento é uma questão de veicular esses arquivos em mais locais. As CDNs são perfeitas para isso e incluem dimensionamento em todos os seus planos.

Melhor Experiência do Desenvolvedor:

O baixo acoplamento e separação de controles permitem um desenvolvimento e depuração mais direcionados, e a seleção crescente de opções de CMD para geradores de sites remove a necessidade de manter uma pilha separada de conteúdo e marketing.

Gostou desta notícia? Comente abaixo.

Receba o conteúdo diretamente no seu celular ou PC!

logo

Olá pessoal! O MundoJS possui uma ferramenta bem interessante que possibilita que você receba os nossos conteúdos diretamente na sua barra de notificações. Isso significa que, a cada vez que uma nova postagem for lançada, você receberá diretamente uma notificação no seu smartphone! Essa ferramenta também funciona no seu computador ou laptop, basta você ativar e receberá as notificações no seu computador!

E como eu posso ativar essa ferramenta?

Tudo o que você precisa fazer é clicar no sino que se encontra no canto inferior direito da página, em um botão vermelho!

No computador:

  • Abra o site do MundoJS;
  • Localize o botão vermelho com um sino;
  • Permita que o seu navegador exiba as notificações.

 

No seu Smartphone:

  • Abra o site do MundoJS;
  • Localize o botão vermelho com um sino;
  • Selecione-o;
  • Veja a notificação na sua barra de notificações!

É isso pessoal! Inscrevam-se e aproveitem em primeira mão as nossas novas postagens! Obrigado!

O que são e como criar Promises:

Você sabe o que são promises?

Promises vem do termo “promessa”, que representa um valor que pode estar disponível em algum momento no futuro, no presente, ou nunca estar disponível. Ele é um objeto utilizado em processamento assíncrono. Um promise representa um proxy para um valor não necessariamente conhecido, permitindo uma associação de métodos de tratamento para eventos em uma ação assíncrona na hipótese de sucesso ou falha, permitindo que o método assíncrono retorne uma “promessa” ao valor em algum momento no futuro.

Quais são os estados de um promise?

  • pending (estado: pendente): O promise ainda não foi rejeitada, nem realizada. É o estado inicial;
  •  fulfilled (estado: realizado): O promise obteve sucesso na operação;
  • rejected (estado: rejeitado): O promise falhou na operação;
  • settled (estado: estabelecido): O promise foi estabelecido. Significa que o promise foi realizado ou rejeitado.

Sintaxe:

new Promise (/* executor */ function (resolve, reject) { … });

O executor é uma função que recebe os argumentos resolve e reject. O executor é chamado antes que o construtor de Promise retorne o objeto criado. As funções resolve e reject, quando chamadas, resolvem ou rejeitam (respectivamente) a promessa. Quando estiver concluído o trabalho assíncrono, o executor chama as funções resolve ou reject para definir o estado da promise.

Uma promise pode se tornar realizada ou rejeitada. Com a ocorrência de algum desses estados, o método them do Promise é chamado, e ele chama o método associado ao estado (resolved ou rejected).

O que é composição?

São métodos encadeados. Isso pode ocorrer com os métodos Promise.prototype.then e Promise.prototype.catch, já que ambos retornam promises que podem ser encadeadas.

Métodos:

  • Promise.all(lista): Retorna uma promise que é resolvida quando todas as promises no argumento forem resolvidas ou rejeitada quando uma das promises do argumento for rejeitada. É um método útil para agregar resultados de múltiplas promises.
  • Promise.race(lista): Retorna uma promise que resolve ou rejeita assim que uma das promises do argumento resolve ou rejeita.
  • Promise.reject(motivo): Retorna um promise que foi rejeitado por algum motivo.
  • Promise.resolve(valor): Retorna um promise que foi resolvido com dado valor. Se o valor for thenable (possuindo um método then), a promise retornada seguirá este metodo. Caso contrário, a promise será realizada com o valor.

Criando uma promise:

// Vejamos se a mãe está feliz. Utilize true para sim e false para não
let maeEstaFeliz = false;

// primeira promise que criaremos
let ganharTelefoneNovo = new Promise(
    (resolve, reject) => {
        if (maeEstaFeliz) {
            let telefone = {
                marca: 'iPhone',
                cor: 'Branco'
            };
            resolve(telefone);
        } else {
            let razao = new Error('Mãe não está feliz');
            reject(razao);
        }

    }
);

// Agora criaremos a segunda promise
async function mostrarTelefoneNovo(telefone) {
    return new Promise(
        (resolve, reject) => {
            var message = 'Hey cara, eu tenho um novo ' +
                telefone.marca + ' ' + telefone.cor;

            resolve(message);
        }
    );
};

// chamando nossa promise
async function perguntarParaMae() {
    try {
        console.log('Antes de perguntar para a mãe');

        let telefone = await ganharTelefoneNovo;
        let message = await mostrarTelefoneNovo(telefone);

        console.log(message);
        console.log('Depois de perguntar para a mãe');
    }
    catch (error) {
        console.log(error.message);
    }
}

(async () => {
    await perguntarParaMae();
})();

Gostou deste artigo? Comente abaixo!

Referências:

 

JavaScript é a linguagem mais demandada

JavaScript é a linguagem mais exigida em 2020, segundo um relatório da DevSkiller, o JavaScript substitui o Java na comparação com o relatório do ano anterior. Sendo que agora o SQL está em segundo lugar e ele caiu de primeiro para terceiro.

O crescimento na popularidade do JavaScript mostra que existe uma grande necessidades dos desenvolvedores de criar aplicativos web em contraste com o declínio de grandes sistemas focados no back-end.

Segue abaixo as 5 linguagens mais procuradas:

  1. JavaScript
  2. SQL
  3. Java
  4. HTML/CSS
  5. .NET/C#

Outras observações que são importantes destacar:

  • 72% das empresas procurando estão procurando por desenvolvedores com conhecimento de JavaScript. Seguido por 55% que estão procurando profissionais com conhecimentos de SQL e 53% de desenvolvedores Java.
  • React, Spring, ASP.NET, MySQL e HTML são as tecnologias mais populares para as linguagens mais populares.
  • Para desenvolvedores Python, análise de dados é o termo mais comum sendo procurado. Seguido por Django e NumPy.

[Dica rápida]TypeScript: map()

Dando continuidade a minha série de artigos sobre TypeScript, hoje eu irei apresentar o map. Caso você tenha interesse em ler os primeiros artigos dessa serie, segue o link de cada um deles abaixo:

Bom, para quem não conhece o Map ele é uma das novidades do ES6, ele nos permite trabalhar com o conceito de coleção com chave e valor. Sua sintaxe é bem simples, basta instanciar ele e utilizar o get e o set para manipular os seus valores. Para ficar mais claro, vamos a alguns exemplos práticos:

Para criar um novo map basta utilizar o operador new:

let exMap = new Map();

E para popular ele nós devemos utilizar o operador set:

exMap.set("casa", 2);

Agora para resgatar um valor, nós podemos utilizar o get:

exMap.get('casa') // 2

Mas como eu passei acima, o map nos permite trabalhar com coleções. Abaixo você tem um trecho de código com um exemplo de um map com uma coleção.

let languages = new Map();
languages.set("C#", 1);
languages.set("JavaScript", 2);
languages.set("PHP", 3);


languages.forEach((value: string, key: number) => {
    console.log(key, value);
});

Resultado do código acima:

Além dos operadores get e set, map tem outros operadores que nos permitem: deletar uma chave, limpar todos os registros de uma coleção e verificar a quantidade de itens inseridos. Abaixo você tem um trecho de código demonstrando cada um deles:

Bem legal né?

Bom, a ideia desse artigo era demonstrar mais uma das funcionalidades do TS que podem nos ajudar no nosso dia dia 😉

Espero que tenham gostado e até um próximo artigo pessoal.

Fonte: https://medium.com/@programadriano/dica-r%C3%A1pida-typescript-conhecendo-o-ts-ignore

Gostou deste artigo? Deixe seu comentário abaixo!

Apple A13 supera Snapdragon 855 Plus em desempenho

A empresa AnandTech testou o Apple A13 e observou que ele supera o Snapdragon 855 e 855 Plus na pontuação de CPU, chip gráfico e aprendizado de máquina na maior parte dos benchmarks. Além disso, ele se aproxima da performance de processadores da Intel e AMD para desktop.

Como funcionam os testes?

Os testes Speedometer 2.0, JetStream 2 e WebXPRT 3 são rodados no navegador e medem, de formas diferentes, a capacidade de resposta de aplicações web. O WebXPRT se concentra no desempenho em HTML5 e JavaScript, enquanto o JetStream foca em JS e Web Assembly.

E, para medir a performance de inteligência artificial e aprendizado de máquina (ML), existe um benchmark chamado AIMark. O iPhone 11 Pro supera os concorrentes em três dos quatro testes; o Galaxy S10+ com Snapdragon 855 sai na frente em um deles.

No entanto, o S10+ com Exynos 9820 — primeiro chip da Samsung com engine de processamento neural — costuma ficar atrás do Snapdragon 855 e até mesmo de seu antecessor, o Snapdragon 845.

O site utilizou dois testes de comparação (maior é melhor):

  • SPECint2006: 52,82 pontos (Apple A13), 54,28 (Intel Core 9900K), 49,02 (AMD Ryzen 3900X)
  • SPECfp2006: 65,27 pontos (Apple A12), 75,15 (Intel Core 9900K), 73,66 (AMD Ryzen 3900X)

O A13 Bionic teve uma melhora de 20% no desempenho do CPU se comparado ao A12 da geração passada, presente no iPhone XS e XR. Nos benchmarks WebXPRT e Speedometer, o novo chip Apple A13 atinge o dobro da pontuação do Asus ROG Phone II com Snapdragon 855 Plus.

Nos testes de chip gráfico, o A13 Bionic também fica em primeiro lugar na maioria das vezes. Em diferentes testes do GFXBench, o iPhone 11 Pro e Pro Max têm desempenho maior que o Asus ROG Phone II com Snapdragon 855 Plus, enquanto o iPhone 11 supera também o OnePlus 7 Pro com Snapdragon 855.

Isso leva em conta a pontuação máxima e o desempenho sustentado, isto é, atingido após rodar uma série de renderizações por 10 a 15 minutos. Em algum momento, o sistema-em-um-chip é obrigado a reduzir a velocidade para controlar a temperatura e não derreter.

Em outro benchmark, o 3DMark Slingshot 3.1, o iPhone 11 atinge uma pontuação máxima maior que os concorrentes, mas não consegue sustentá-la, perdendo para o ROG Phone II e OnePlus 7 Pro.

AnandTech explica que isso ocorre porque a Apple não deixa seus celulares chegarem a temperaturas tão altas quanto nos Androids; a traseira do iPhone 11, 11 Pro e Pro Max não passou de 41°C.

Você pode conferir mais detalhes dos testes nos seguintes link:

the-apple-iphone-11-pro-and-max-review pt1

the-apple-iphone-11-pro-and-max-review pt2

Fonte: https://tecnoblog.net/311312/iphone-11-apple-a13-supera-snapdragon-855-testes-desempenho/