SlideShare una empresa de Scribd logo
1 de 51
Javascript para
Desenvolvedores C#
Sobre o curso
Javascript
Comparação
Parte 1:
Functions
Parte 2:
Conceitos
Parte 3:
POO
Parte 4:
Javascript para CSharpers
Javascript para desenvolvedores acostumados com as estruturas do .Net
• Functions são o coração do Javascript
• Parâmetros
• Retornos
• Functions como objetos
• Functions como delegates
• “this”
• Callbacks
• Promises
• Namespaces
Functions
Parâmetros
• Como no C#sqn
function fn(um, dois, tres) {
console.log('1: ' + um);
console.log('2: ' + dois);
console.log('3: ' + tres);
}
fn(1, "2", !!'tres');
fn(true);
fn(1, 2, 3, 4, 4, 5);
 Sobrecarga?
function foo(fst) {
console.log("Primeiro");
}
function foo(fst,sec) {
console.log("Segundo");
}
foo(1); //Segundo
Functions
Arguments
• Nomear parâmetros servem apenas para mapear argumentos
function bar(fst, sec, thr) {
console.log(arguments.length);
}
bar(1); //1
bar(1,2,3,4,5); //5
function bar() {
console.log(arguments[1]);
}
bar("primeiro", "segundo"); //segundo
Functions
Return
• Todas as functions retornam um valor
• Se não for definido, será undefined
function foo() {
return;
return "";
return
"";
}
Var x = foo() //undefined
Var x = foo() //string
Functions
Apenas um objeto qualquer
• É possível acessar e adicionar propriedades à uma function
como qualquer objeto
function fn(a, b, c, d) {
console.log('im fn body');
}
console.log(fn.length); //4
console.log(fn.name); //"fn"
console.log(fn); //"function(){console.log('im fn body');} "
fn.outraFunction = function() {
console.log("im inside fn's body");
};
fn.outraFunction(); // "im inside fn's body"
Functions
Closures e Escopos
//C#
var a = "hi";
if (true)
{
var b = a; //ok
}
var c = b; //não compila
//Javasctipt
var a = "hi";
if (true) {
var b = a; //ok
}
var c = b; //ok
//Javasctipt
var a = "hi";
function fn() {
if (true) {
var b = a; //ok
}
}
var c = b; //Não mais
Exercícios
Functions
• Faça uma function que simule chamadas ajax
• Ela recebe dois argumentos do tipo string: tipo e o url da chamada, ex:
“GET”, “POST”, “DELETE”;
• E simplesmente loga o dado de acordo com o tipo da chamada
Ex: Fazendo um POST para http://www.sega.com
• Pendure na function outras functions que sirvam de atalhos para as
chamadas acima
• Ex: chamarAjax.get() ao ser invocado, chamara a própria function já
passando “GET”
• Altere a function para realizar todas as chamadas que são passadas
independentemente da quantidade de argumentos
• Ex: chamarAjax(“get”,”sega.com”,”ndd.com”,”moc.com”)
This
• No C# representa a instancia da classe
class Foo {
private string _name;
void Run(string newName)
{
this._name = newName;
}
}
• No Javascript, representa o contexto do proprietário da função.
• É possível mudar este contexto com os métodos .apply() e .call()
var obj = {
name: "algum obj",
myFunc: function () {
log(this.name);
}
};
obj.myFunc(); //algum obj
function Person() {
this.Nome = "Apenas um Teste";
console.log(this.Nome);
console.log(this.Rg);
}
var g = new Person();
h = Person.apply({Rg:'1234'});
This
This
apply() e call()
• Metodos pertencentes a todo objeto “function”.
• Utilizados para alterar o contexto do this
Call recebe o this como contexto e
sequencialmente os parâmetros (como
params[] no C#)
Apply recebe o this como contexto e um
array com os parametros
function Person(nome, rg) {
this.Nome = nome;
this.Rg = rg;
};
var p = {};
Person.call(p, "nome", "14324");
var args = ["nome", "14324"]
Person.apply(p, args);
Callbacks
• São parâmetros de um método que representam uma
instancia de uma função a ser chamada posteriormente.
• Similares aos Delegates em .Net.
• Função nomeadas ou anônimas.
• Podem ser “engatilhadas” para serem executadas em
condições específicas
Callbacks
Função nomeada
• Cria um novo escopo de execução
• Atribui o valor de “this” para a janela
de execução do browser
Callbacks
Função anônima
• Assume o contexto aonde foi criada
• A referência “this” passa a ser o objeto
atual em que a função foi declarada
function request(callback) {
callback();
}
request(executeAfterRequest);
function executeAfterRequest() {
}
function request(callback) {
callback();
}
request(function () {
});
Exercícios
Callbacks
• Adicione na function que faz chamadas ajax um argumento de
callback que determine como o request será logado:
• document.write();
• console.log();
• alert();
• Também recebe um callback de erro, caso a url não contenha
“https://” ele loga uma mensagem nada agradavel;
Promises
• São objetos utilizados para coisas demoradas ou que
saem do escopo da aplicação
• Chamadas para API
• Animações
• Processos “paralelos”
• Simula programação async
• Similar ao objeto Task<T>
• Depois de criado deve ser invocado
com .then();
- --
- -
- -
Promises
• São objetos utilizados para coisas demoradas ou que
saem do escopo da aplicação
• Chamadas para API
• Animações
• Processos “paralelos”
• Simula programação async
• Similar ao objeto Task<T>
• Depois de criado deve ser invocado
com .then();
- -
- - -
- -
Promises
• São objetos utilizados para coisas demoradas ou que
saem do escopo da aplicação
• Chamadas para API
• Animações
• Processos “paralelos”
• Simula programação async
• Similar ao objeto Task<T>
• Depois de criado deve ser invocado
com .then();
- -
- - -
- -
Promises
• Utiliza a função Promise
• Esta recebe no construtor um callback com 2 parâmetros
• Resolve
• Callback utilizado para finalizar a Promise com sucesso
• Reject
• Callback para finalizar a Promise com erro
- -
- - -
- -
- -
Promises
var promise = new Promise(function(resolve, reject) {
// processamento “assíncrono”
if (/* teste se o processamento foi satisfatório */) {
resolve("Sucesso");
}
else {
reject(Error("Falha")));
}
});
Promises
• Utiliza o método “then” para invocar o Promise.
• O método “then” recebe 2 parâmetros (ambos
opcionais):
• Um callback para as situações de sucesso.
• Utilizando o método “resolve”.
• Um callback para as situações de erro.
• Utilizando o método “reject”.
• Pode ser criado uma corrente de chamadas “then”.
JavaScript - Promises
Consumo
var promise = new Promise(function(resolve, reject) {
....
});
promise.then(
function (result) {
console.log(result); // "Sucesso"
},
function (err) {
console.log(err); // Error: "Falha"
}
);
JavaScript - Promises
Consumo – Cadeia de chamadas
var promise = new Promise(function (resolve, reject) {
resolve(1);
});
promise
.then(function (val) {
console.log(val); // 1
return val + 2;
})
.then(function (val) {
console.log(val); // 3
});
JavaScript - Promises
Consumo – Cadeia de chamadas
- -
-
- -
- -
- -
- -
- -
- -
- -
.then()
.catch()
.then()
.catch()
.then()
.catch()
JavaScript - Promises
Consumo – Tratamento de erros
• Pode ser utilizado o método “catch” ao invés do segundo callback no
“then”.
• É um atalho para o equivalente à “.then(undefined, func)”.
• Utilizando os 2 callbacks, somente 1 será chamado.
• Utilizando “then” seguido de “catch” ambos são chamados se a
promise for rejeitada.
JavaScript - Promises
Consumo – Tratamento de erros
promise
.then(function (val) {
console.log("Sucesso", val);
})
.catch(function (error) {
console.log("Falha", error);
});
promise
.then(function (val) {
console.log("Sucesso", val);
})
.then(undefined, function (error) {
console.log("Falha", error);
});
Exercícios
Promises
• Faça a classe AjaxWithPromise que retorna uma promise com o
resultado da operação
Functions
Namespace
• Problema: Colisão de nomes em aplicativos de grande porte
• Solução: Simular Namespaces do C# usando IIFEs (Immediately Invoked Function Expression)
(function() {
var appName = 'foo';
var compileTime = new Date();
function printAppInfo() {
return appName + " : " + compileTime;
}
})();
console.log(printAppInfo()); //nope
Functions
Namespace
• Javascript não tem namespaces reais
• Podem ser criados como objetos
var Enterprise = Enterprise || {};
Enterprise.currentTime = function() {
return new Date();
};
Enterprise.Models = Enterprise.Models || {};
Enterprise.Models.Aluno = function() { };
Functions
Namespace
• Diminuindo a poluição global e encapsulando cada
funcionalidade
(function(ns) {
var currentTime = new Date();
ns.currentTime = function() {
return currentTime;
};
})(NDDigial = NDDigial || {});
Quiz
• É possível fazer sobrecarga de métodos no Javascript.
• Verdadeiro
• Falso
• Você deve colocar ao menos um return em cada function
• Verdadeiro
• Falso
Quiz
• É possível fazer sobrecarga de métodos no Javascript.
• Verdadeiro
• Falso
• Você deve colocar ao menos um return em cada function
• Verdadeiro
• Falso
Quiz
• Promises são functions configuradas para executarem imediatamente
• Verdadeiro
• Falso
• Invocar catch(success,error) é o mesmo que then(undefined, error)
• Verdadeiro
• Falso
Quiz
• Promises são functions configuradas para executarem imediatamente
• Verdadeiro
• Falso
• Invocar catch(success,error) é o mesmo que then(undefined, error)
• Verdadeiro
• Falso
Quiz
• O que é o this no javascript?
• window
• document
• A própria function
• Quem chama a function
Quiz
• O que é o this no javascript?
• window
• document
• A própria function
• Quem chama a function
• Todas ou nenhuma das anteriores
Quiz
O que é o código vai logar?
var a = 0;
if (a) {
while (a === 0) {
var b = a - 1;
a += 1;
}
}
console.log(b);
• 0
• 1
• -1
• undefined
Quiz
O que é o código vai logar?
var a = 0;
if (a) {
while (a === 0) {
var b = a - 1;
a += 1;
}
}
console.log(b);
• 0
• 1
• -1
• Undefined (não chegou a executar)
Quiz
• Por que devemos separar código em namespaces?
Quiz
• Por que devemos separar código em namespaces?
• I – Facilita encontrar erros em grandes aplicações
• II – Evita conflitos com nomes de variáveis
• III – Evita problemas de precisar de módulos ainda não
inicializados
• IV – Organiza o código
• V – Protege nosso código de bibliotecas externas
Revisão
• Let me function that for you
• Parâmetros são totalmente flexíveis
• Não existe sobrecarga
• Functions são objetos
• Callbacks que vão e voltam
• O futuro é uma Promise
• O “this” pode ser alterado
• Apenas functions definem escopos
• Que podem ser usados para proteger
namespaces
Javascript para CSharpers
Javascript para desenvolvedores acostumados com as estruturas do .Net

Más contenido relacionado

La actualidad más candente

Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaHelder da Rocha
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for BeginnersSAPO Sessions
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on RailsJuan Maiz
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaís Lima
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 

La actualidad más candente (20)

Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
JavaScript for Beginners
JavaScript for BeginnersJavaScript for Beginners
JavaScript for Beginners
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Introdução ao Ruby on Rails
Introdução ao Ruby on RailsIntrodução ao Ruby on Rails
Introdução ao Ruby on Rails
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Depuração de software
Depuração de softwareDepuração de software
Depuração de software
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Python 03
Python 03Python 03
Python 03
 

Similar a Javascript para CSharpers 2 - Functions

Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Daniel Sobral
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09Carlos Santos
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scopeCarlos Santos
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoNando Vieira
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicasHelder da Rocha
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produçãothomasdacosta
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Webgoal
 

Similar a Javascript para CSharpers 2 - Functions (20)

Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho Gems para colocar seus testes no trilho
Gems para colocar seus testes no trilho
 

Más de Wesley Lemos

Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryWesley Lemos
 
Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Wesley Lemos
 
Dicas sobre amamentar
Dicas sobre amamentarDicas sobre amamentar
Dicas sobre amamentarWesley Lemos
 
Apresentação VideoSis
Apresentação VideoSisApresentação VideoSis
Apresentação VideoSisWesley Lemos
 
Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!Wesley Lemos
 
Asus a7 v400 mx se
Asus a7 v400 mx seAsus a7 v400 mx se
Asus a7 v400 mx seWesley Lemos
 
Como fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoComo fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoWesley Lemos
 

Más de Wesley Lemos (11)

Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQuery
 
Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM
 
Dicas sobre amamentar
Dicas sobre amamentarDicas sobre amamentar
Dicas sobre amamentar
 
Apresentação VideoSis
Apresentação VideoSisApresentação VideoSis
Apresentação VideoSis
 
Lição ebd
Lição ebdLição ebd
Lição ebd
 
Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!
 
Go project
Go projectGo project
Go project
 
Criatividade
CriatividadeCriatividade
Criatividade
 
Asus a7 v400 mx se
Asus a7 v400 mx seAsus a7 v400 mx se
Asus a7 v400 mx se
 
Como fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoComo fazer uma apresentação de sucesso
Como fazer uma apresentação de sucesso
 
Hotelaria
HotelariaHotelaria
Hotelaria
 

Javascript para CSharpers 2 - Functions

  • 2. Sobre o curso Javascript Comparação Parte 1: Functions Parte 2: Conceitos Parte 3: POO Parte 4:
  • 3. Javascript para CSharpers Javascript para desenvolvedores acostumados com as estruturas do .Net
  • 4. • Functions são o coração do Javascript • Parâmetros • Retornos • Functions como objetos • Functions como delegates • “this” • Callbacks • Promises • Namespaces
  • 5. Functions Parâmetros • Como no C#sqn function fn(um, dois, tres) { console.log('1: ' + um); console.log('2: ' + dois); console.log('3: ' + tres); } fn(1, "2", !!'tres'); fn(true); fn(1, 2, 3, 4, 4, 5);  Sobrecarga? function foo(fst) { console.log("Primeiro"); } function foo(fst,sec) { console.log("Segundo"); } foo(1); //Segundo
  • 6. Functions Arguments • Nomear parâmetros servem apenas para mapear argumentos function bar(fst, sec, thr) { console.log(arguments.length); } bar(1); //1 bar(1,2,3,4,5); //5 function bar() { console.log(arguments[1]); } bar("primeiro", "segundo"); //segundo
  • 7. Functions Return • Todas as functions retornam um valor • Se não for definido, será undefined function foo() { return; return ""; return ""; } Var x = foo() //undefined Var x = foo() //string
  • 8. Functions Apenas um objeto qualquer • É possível acessar e adicionar propriedades à uma function como qualquer objeto function fn(a, b, c, d) { console.log('im fn body'); } console.log(fn.length); //4 console.log(fn.name); //"fn" console.log(fn); //"function(){console.log('im fn body');} " fn.outraFunction = function() { console.log("im inside fn's body"); }; fn.outraFunction(); // "im inside fn's body"
  • 9. Functions Closures e Escopos //C# var a = "hi"; if (true) { var b = a; //ok } var c = b; //não compila //Javasctipt var a = "hi"; if (true) { var b = a; //ok } var c = b; //ok //Javasctipt var a = "hi"; function fn() { if (true) { var b = a; //ok } } var c = b; //Não mais
  • 10.
  • 11. Exercícios Functions • Faça uma function que simule chamadas ajax • Ela recebe dois argumentos do tipo string: tipo e o url da chamada, ex: “GET”, “POST”, “DELETE”; • E simplesmente loga o dado de acordo com o tipo da chamada Ex: Fazendo um POST para http://www.sega.com • Pendure na function outras functions que sirvam de atalhos para as chamadas acima • Ex: chamarAjax.get() ao ser invocado, chamara a própria function já passando “GET” • Altere a function para realizar todas as chamadas que são passadas independentemente da quantidade de argumentos • Ex: chamarAjax(“get”,”sega.com”,”ndd.com”,”moc.com”)
  • 12.
  • 13. This • No C# representa a instancia da classe class Foo { private string _name; void Run(string newName) { this._name = newName; } }
  • 14. • No Javascript, representa o contexto do proprietário da função. • É possível mudar este contexto com os métodos .apply() e .call() var obj = { name: "algum obj", myFunc: function () { log(this.name); } }; obj.myFunc(); //algum obj function Person() { this.Nome = "Apenas um Teste"; console.log(this.Nome); console.log(this.Rg); } var g = new Person(); h = Person.apply({Rg:'1234'}); This
  • 15. This apply() e call() • Metodos pertencentes a todo objeto “function”. • Utilizados para alterar o contexto do this Call recebe o this como contexto e sequencialmente os parâmetros (como params[] no C#) Apply recebe o this como contexto e um array com os parametros function Person(nome, rg) { this.Nome = nome; this.Rg = rg; }; var p = {}; Person.call(p, "nome", "14324"); var args = ["nome", "14324"] Person.apply(p, args);
  • 16.
  • 17. Callbacks • São parâmetros de um método que representam uma instancia de uma função a ser chamada posteriormente. • Similares aos Delegates em .Net. • Função nomeadas ou anônimas. • Podem ser “engatilhadas” para serem executadas em condições específicas
  • 18. Callbacks Função nomeada • Cria um novo escopo de execução • Atribui o valor de “this” para a janela de execução do browser Callbacks Função anônima • Assume o contexto aonde foi criada • A referência “this” passa a ser o objeto atual em que a função foi declarada function request(callback) { callback(); } request(executeAfterRequest); function executeAfterRequest() { } function request(callback) { callback(); } request(function () { });
  • 19.
  • 20. Exercícios Callbacks • Adicione na function que faz chamadas ajax um argumento de callback que determine como o request será logado: • document.write(); • console.log(); • alert(); • Também recebe um callback de erro, caso a url não contenha “https://” ele loga uma mensagem nada agradavel;
  • 21.
  • 22. Promises • São objetos utilizados para coisas demoradas ou que saem do escopo da aplicação • Chamadas para API • Animações • Processos “paralelos” • Simula programação async • Similar ao objeto Task<T> • Depois de criado deve ser invocado com .then(); - -- - - - -
  • 23. Promises • São objetos utilizados para coisas demoradas ou que saem do escopo da aplicação • Chamadas para API • Animações • Processos “paralelos” • Simula programação async • Similar ao objeto Task<T> • Depois de criado deve ser invocado com .then(); - - - - - - -
  • 24. Promises • São objetos utilizados para coisas demoradas ou que saem do escopo da aplicação • Chamadas para API • Animações • Processos “paralelos” • Simula programação async • Similar ao objeto Task<T> • Depois de criado deve ser invocado com .then(); - - - - - - -
  • 25. Promises • Utiliza a função Promise • Esta recebe no construtor um callback com 2 parâmetros • Resolve • Callback utilizado para finalizar a Promise com sucesso • Reject • Callback para finalizar a Promise com erro - - - - - - - - -
  • 26. Promises var promise = new Promise(function(resolve, reject) { // processamento “assíncrono” if (/* teste se o processamento foi satisfatório */) { resolve("Sucesso"); } else { reject(Error("Falha"))); } });
  • 27. Promises • Utiliza o método “then” para invocar o Promise. • O método “then” recebe 2 parâmetros (ambos opcionais): • Um callback para as situações de sucesso. • Utilizando o método “resolve”. • Um callback para as situações de erro. • Utilizando o método “reject”. • Pode ser criado uma corrente de chamadas “then”.
  • 28. JavaScript - Promises Consumo var promise = new Promise(function(resolve, reject) { .... }); promise.then( function (result) { console.log(result); // "Sucesso" }, function (err) { console.log(err); // Error: "Falha" } );
  • 29. JavaScript - Promises Consumo – Cadeia de chamadas var promise = new Promise(function (resolve, reject) { resolve(1); }); promise .then(function (val) { console.log(val); // 1 return val + 2; }) .then(function (val) { console.log(val); // 3 });
  • 30. JavaScript - Promises Consumo – Cadeia de chamadas - - - - - - - - - - - - - - - - - .then() .catch() .then() .catch() .then() .catch()
  • 31. JavaScript - Promises Consumo – Tratamento de erros • Pode ser utilizado o método “catch” ao invés do segundo callback no “then”. • É um atalho para o equivalente à “.then(undefined, func)”. • Utilizando os 2 callbacks, somente 1 será chamado. • Utilizando “then” seguido de “catch” ambos são chamados se a promise for rejeitada.
  • 32. JavaScript - Promises Consumo – Tratamento de erros promise .then(function (val) { console.log("Sucesso", val); }) .catch(function (error) { console.log("Falha", error); }); promise .then(function (val) { console.log("Sucesso", val); }) .then(undefined, function (error) { console.log("Falha", error); });
  • 33.
  • 34. Exercícios Promises • Faça a classe AjaxWithPromise que retorna uma promise com o resultado da operação
  • 35.
  • 36. Functions Namespace • Problema: Colisão de nomes em aplicativos de grande porte • Solução: Simular Namespaces do C# usando IIFEs (Immediately Invoked Function Expression) (function() { var appName = 'foo'; var compileTime = new Date(); function printAppInfo() { return appName + " : " + compileTime; } })(); console.log(printAppInfo()); //nope
  • 37. Functions Namespace • Javascript não tem namespaces reais • Podem ser criados como objetos var Enterprise = Enterprise || {}; Enterprise.currentTime = function() { return new Date(); }; Enterprise.Models = Enterprise.Models || {}; Enterprise.Models.Aluno = function() { };
  • 38. Functions Namespace • Diminuindo a poluição global e encapsulando cada funcionalidade (function(ns) { var currentTime = new Date(); ns.currentTime = function() { return currentTime; }; })(NDDigial = NDDigial || {});
  • 39.
  • 40. Quiz • É possível fazer sobrecarga de métodos no Javascript. • Verdadeiro • Falso • Você deve colocar ao menos um return em cada function • Verdadeiro • Falso
  • 41. Quiz • É possível fazer sobrecarga de métodos no Javascript. • Verdadeiro • Falso • Você deve colocar ao menos um return em cada function • Verdadeiro • Falso
  • 42. Quiz • Promises são functions configuradas para executarem imediatamente • Verdadeiro • Falso • Invocar catch(success,error) é o mesmo que then(undefined, error) • Verdadeiro • Falso
  • 43. Quiz • Promises são functions configuradas para executarem imediatamente • Verdadeiro • Falso • Invocar catch(success,error) é o mesmo que then(undefined, error) • Verdadeiro • Falso
  • 44. Quiz • O que é o this no javascript? • window • document • A própria function • Quem chama a function
  • 45. Quiz • O que é o this no javascript? • window • document • A própria function • Quem chama a function • Todas ou nenhuma das anteriores
  • 46. Quiz O que é o código vai logar? var a = 0; if (a) { while (a === 0) { var b = a - 1; a += 1; } } console.log(b); • 0 • 1 • -1 • undefined
  • 47. Quiz O que é o código vai logar? var a = 0; if (a) { while (a === 0) { var b = a - 1; a += 1; } } console.log(b); • 0 • 1 • -1 • Undefined (não chegou a executar)
  • 48. Quiz • Por que devemos separar código em namespaces?
  • 49. Quiz • Por que devemos separar código em namespaces? • I – Facilita encontrar erros em grandes aplicações • II – Evita conflitos com nomes de variáveis • III – Evita problemas de precisar de módulos ainda não inicializados • IV – Organiza o código • V – Protege nosso código de bibliotecas externas
  • 50. Revisão • Let me function that for you • Parâmetros são totalmente flexíveis • Não existe sobrecarga • Functions são objetos • Callbacks que vão e voltam • O futuro é uma Promise • O “this” pode ser alterado • Apenas functions definem escopos • Que podem ser usados para proteger namespaces
  • 51. Javascript para CSharpers Javascript para desenvolvedores acostumados com as estruturas do .Net

Notas del editor

  1. Functions são o coração do Javascript Funçõs dentro de funções passando funções como parâmetros de outras que retorna functions
  2. Não há sobrecarga de functions, então quando chamar uma function, você deve enviar todos os parâmetros necessários para garantir de que nenhum deles será undefined
  3. var p = new Promise(function(resolve, reject){ setTimeout(function(){ resolve("Martelo"); },2000); }); p.then(function(res){ console.log(res); return res +=" vermelho"; }).then(function(res){ console.log(res); return res +=" do guerreiro"; }).then(function(res){ console.log(res); return res +=" de fogo"; }).then(function(res){ console.log(res); });