Mind Bending

JavaScript é uma das poucas linguagens que podem ser consideradas como lingua franca, isto é, que todo programador deveria saber e que uma hora vai acabar lidando com ela.

Hoje no Hack ‘n’ Cast, com a ajuda do Diego "Boot" (Twitter e Facebook) e do Átila Camurça (Twitter e GitHub), falaremos de uma das linguagens utilizadas e incompreendidas, o JavaScript! Desde seu nome (que apesar da referência textual, não possui correlação com Java), áreas de aplicação e funcionamento, esta linguagem sempre foi tratada como um brinquedo ou "ferramenta menor" que serve para criar "pequenos efeitos" em sites.

Hack 'n' Cast v0.8 - JavaScript

Para não perder nenhum episódio siga-nos nas redes sociais (Twitter e Facebook) ou inscreva-se (Feed, Podflix, iTunes e Pocket Casts). Você quer colaborar com o Hack ‘n’ Cast? Sugira um tema, nos ajude a produzir uma pauta ou participe conosco! Basta entrar em contato por E-mail, Facebook ou Twitter. E agora temos a nossa lista de discussão no Google Groups!

Introdução

Sabemos que linguagem de programação é quase o mesmo que religião, partido político ou time de futebol, cada um tem uma opinião, uma preferida, um preconceito ou uma rixa. Mas poucas linguagens são tratadas como onipresente e onipotente. Pois a vemos sendo utilizada na web (tanto front-end quanto back-end), em aplicativos moveis, em aplicativos desktops, na comunicação entre sistemas e diversas outras áreas. Esta é uma das poucas linguagens que podem ser consideradas uma “língua franca”. Sim, estamos falando de JavaScript!

O que é?

O JavaScript é uma linguagem de programação multiparadigmas, dinâmica, interpretada e com sintaxe inspirada no C e Java. Ela é comumente é confundida como parte integrante da suíte Java. Entretanto, JavaScript está para Java como "Car" esta para "Carpet", ou seja, não possui nenhuma relação! Por essas e outras ela é uma das linguagens mais incompreendidas do mundo.

Apesar desta linguagem ser tratada como uma linguagem menor ou de pouco importância você está em contato com ela linguagem todo dia e ela facilita muito o seu interfaceamento com o internet. Ela é uma linguagem aberta por natureza, uma vez que você não consegue ocultar o código fonte, aparentemente "simples" mas com recursos poderosos. O conhecimento mais profundo desta tecnologia é uma habilidade importante para qualquer desenvolvedor web ou mobile.

Entretanto, é uma linguagem com comportamentos bem adversos, como a palestra WAT do Destroy All Software demonstra.

História

A linguagem JavaScript foi criada em 1995 por Brendan Eich, um engenheiro de software da Netscape. Sua primeira release foi no início de 1996. Brendan afirma que levou apenas 10 dias para pensar e criar um protótipo que rodasse no Netscape.

Originalmente a linguagem tinha o nome LiveScript, mas foi trocado para JavaScript, tendo como objetivo uma jogada de marketing devido à crescente popularidade do Java na época. Pouco depois a Microsoft lança uma versão similar para competir com a Netscape. Temendo uma fragmentação e a criação de um monopólio por parte da Microsoft, como já estava ocorrendo com o HTML e o CSS, a Netscape submeteu a linguagem a uma entidade, a ECMA International. Em 1997 foi criado o padrão ECMAScript.

Mais:

Características

Uma das características mais destacadas no JavaScript é o suporte a Multi-Paradigmas e as First-class Functions, ou seja, a capacidade de tratar funções como objetos nativos da linguagem, podendo, por exemplo, serem passadas como como parâmetros de outras funções. Além disto, esta linguagem possui uma ótima implementação de paralelismo e comportamento assíncrono, além de operar no Client Side, reduzindo assim o consumo de recursos no servidor.

Esta linguagem muitas vezes é criticada por não possuir "classes" expressamente ditas, porém esta funcionalidade é entregue por uma outra funcionalidade chamada object prototypes. Apesar de sua principal aplicação ser na Web, ela possui usos fora deste universo, conforme listado aqui.

A linguagem suporta os seguintes tipos nativos:

  • Number;
  • String;
  • Boolean;
  • Object;
  • Function;
  • Array;
  • Date;
  • RegExp;
  • Null;
  • NaN;
  • Undefined;

Como afirmado anteriormente, todo o padrão e comportamento da linguagem é padronizado pelo ECMA International, diversas empresas ou organizações possuem suas implementações da máquina virtual (também chamado de "motor" JavaScript). Alguns exemplos são:

  • V8, implementado pelo Google;
  • SpiderMonkey e asm.js, implementado pela Mozilla/Netscape;
  • Rhino, OpenSource mas coordenado pela Mozilla;
  • JavaScriptCore (ou Nitro), implementado pela Apple;
  • KJS, implementado pelo Projeto KDE;
  • Chakra, implementado pela Microsoft para o Explorer 9;
  • Nashorm, implementado pela Oracle.

Para mais informações sobre todo esse "mundo do JavaScript", recomendamos a leitura do artigo The World of ECMAScript, por John Resig.

Em breve será lançado o ECMAScript 6, que trará as seguintes melhoras:

  • Suporte a classes;
  • Maps e Sets;
  • Valores default na passagem de parâmetros;
  • Módulos;
  • Funções anônimas;
  • Melhor comportamento do NaN;

Ferramentas, Bibliotecas, IDEs e Frameworks

Bilbiotecas:

Minimizadores:

Linguagens que compilam para JavaScript:

IDEs:

  • NetBeans;
  • Atom;
  • Brackets;
  • Sublime Text, VIM & EMACS;
  • WebStorms JetBrain (Não livre, mas possui licença de estudante);

Hardware:

Ferramentas:

Frameworks:

Exemplos de Códigos

O típico Hello World.

console.log("Hello World");

Um exemplo de manipulação de listas.

var list = [1, 2, 3, 4, 5];
for (var i = 0; i < list.length; i++) {
        console.log(i);
}

Utilização de "Objetos".

var flight = {
        airline: "Oceanic",
        number: 815,
        departure: {
                IATA: "SYD",
                time: "2004-09-22 14:55",
                city: "Sydney"
        },
        arrival: {
                IATA: "LAX",
                time: "2004-09-23 10:42",
                city: "Los Angeles"
        }
};
console.log(flight.departure.IATA);

Uso de funções e seus "valores padrões" atuais.

function add(a, b) {
        return a + b;
}

var factorial = function factorial(i, a) {
        a = a || 1;
        if (i < 2) {
                return a;
        }
        return factorial(i - 1, a * i);
};
console.log(factorial(4)); // 24

Trecho de código retirado do UnderscoreJS que demonstra todo o poder do JavaScript.

// The cornerstone, an `each` implementation, aka `forEach`.
// Handles raw objects in addition to array-likes. Treats all
// sparse array-likes as if they were dense.
_.each = _.forEach = function(obj, iteratee, context) {
        if (obj == null) return obj;
        iteratee = createCallback(iteratee, context);
        var i, length = obj.length;
        if (length === +length) {
                for (i = 0; i < length; i++) {
                iteratee(obj[i], i, obj);
                }
        } else {
                var keys = _.keys(obj);
                for (i = 0, length = keys.length; i < length; i++) {
                iteratee(obj[keys[i]], keys[i], obj);
                }
        }
        return obj;
};

Fontes de Aprendizado

Sites, Blogs e Twitters:

Cursos:

Livros

Na compra de qualquer livro na Novatec utilize o código MINDBENDING para conseguir 20% de desconto.

Trilha Sonora

A trilha sonora deste episódio foi escolhida pelo Diego "Boot" e é uma homenagem ao Dr. Sin.

Dr. Sin (1993)
  • Emotional Catastrophe
  • Stone Cold Dead
  • Howlin’ In The Shadows
  • Lonely World
  • Scream & Shout
Brutal (1995)
  • Karma
  • Isolated
  • Fire
  • Child of Sin
Insinity (1997)
  • Sometimes
  • Futebol, Mulher e Rock’n Roll
  • Zero
Dr. Sin II (2000)
  • Time After Time
Magnun

Magnun

Engenheiro de telecomunicações por formação, mas trabalha com suporte à infraestrutura GNU/Linux, e nas horas vagas é Programador OpenSource (Python e C) desenhista e escritor do Mind Bending Blog.


Comments

comments powered by Disqus