SlideShare uma empresa Scribd logo
1 de 27
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 os demais
conceitos do .Net
+Conceitos
Sumário
• Lições práticas
• Código estrito
• Laços
• Reflection
• A natureza do Javascript
• Arquitetando o código
• Bibliotecas
+Conceitos
‘use strict’
• Javascript é popular por permitir um código muito
aberto
• Significa que suas técnicas são mais propensas à bugs
• Para isso existe o modo estrito
//Javascript
(function() {
'use strict';
var x = 'funciona normalmente';
y = 'não procegue';
})();
//qualquer coisa é permitida aqui
+Conceitos
‘use strict’
• O que é desabilitado
• Variáveis não declaradas
• Propriedades duplicadas
• Editar propriedades readonly
• Parâmetros duplicados
• Modificar ‘arguments’
• Deletar variáveis
• Palavras reservadas para
uso futuro
y = 'algum valor'
var x = { name: 'c1', name: 'c2' };
var array = [1, 2, 3, 4, 5];
array.length = 8;
delete array;
implements interface
package private
protected public
static yield
class enum
function(p1, p2, p1) {
arguments = [];
}
+Conceitos
Iterações
• Foreach do C# não é como o for..in do Javascript
• Um objeto nada mais é do que um “dictionary” de
propriedades.
//C#
var array = new[] {"um", "dois", "três"};
foreach (var s in array)
{
//s seria cada string
}
//Javascript
var array = ['um', 'dois', 'três'];
for (var s in array) {
log(s) //0, 1, 2, ??
log(array[s]) //'um', 'dois‘
}
+Conceitos
Reflection
• Enumera todas as propriedades do objeto
• Sua forma mais simples é a iteração for..in
E se eu fizer isso
com o window ou
document ?var cliente = {
nome: 'Juvenal',
cpf: '192.168.10.1',
ativo: true,
'animal de estimação': { especie: 'coelho' },
cancelarAssinatura: function () { }
}
for (var prop in cliente) {
"prop: " + prop;
cliente[prop];
typeof cliente[prop];
}
for(var prop in obj){
}
• Faça uma function que receba um objeto e logue para cada uma das
propriedades dele:
• Nome da propriedade
• Valor
• Tipo do valor
• Valor como String
• Valor como Numero
• Valor como Boleano
• Se uma das propriedades for objeto, as propriedades deste devem
ser logadas também
Exercícios
Reflection
+Conceitos
Natureza do Javascript
• No .Net parâmetros são muito bem definidos
• Passar objetos por parâmetro é algo trivial
//C#
var server = new SmtpClient();
//Parametro em construtor
var msg = new MailMessage("from@mail.com","to@mail.com");
msg.Body = "Hello";
msg.Subject = "Test Message";
//Chamando método
server.Send(msg);
+Conceitos
Natureza do Javascript
• No Javascript, é possível passar um parâmetro “aberto”
• DuckTyping te permite construir objetos em qualquer lugar
//Javascript
var server = new SmtpClient();
//Construtor
var msg = {
to: 'to@email.com',
from: 'from@email.com',
body: 'Hello',
subject: 'Test msg'
};
//Chamando
server.send({
});
server.send(msg);
Exercícios
Validações
• Implemente a classe SmtpClient e o método Send
• Este método recebe um objeto com as seguintes propriedades: to, from, body, subject.
• Dentro do método, verifique a validade de cada uma dessas propriedades e retorne true ou false
• Caso to ou from forem vazios ou e-mails inválidos, retorne false (“string”.indexOf(‘@’)>=0)
• Se body e subject forem vazias, devem ser substituídas por “No Body” e “No Subject”
respectivamente
• Passe também um callback para logar a mensagem;
• Se tudo estiver preenchido, invoque o callback passando a mensagem;
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
msg.subject = msg.subject || defaults.subject;
msg.body = msg.body || defaults.body;
};
+Conceitos
Natureza do Javascript
• No Javascript
Tratando propriedades inválidas
Implementando defaults
SmtpClient.send = function(msg) {
if (msg.subject == null || msg.subject == undefined)
msg.subject = "No Subject";
if (msg.body == null || msg.body == undefined)
msg.body = "No Body";
var defaults = {
subject: 'No Subject',
body: 'No Body'
};
if (!msg.subject) msg.subject = defaults.subject;
if (!msg.body) msg.body = defaults.body;
msg.subject = msg.subject ? msg.subject : defaults.subject;
msg.body = msg.body ? msg.body : defaults.body;
msg.subject = msg.subject || defaults.subject;
msg.body = msg.body || defaults.body;
extend(msg, defaults);
};
function extend (obj, defaults){
for(var prop in defaults){
obj[prop] = obj[prop] || defaults[prop];
}
};
+Conceitos
Arquitetando código
• Em C#, o Assembly delimita o Package
• Javascript é baseado em arquivos, que devem ser referenciados na ordem correta
• É possível separar logicamente isolando em namespaces, corrigindo esse possível problema
<html>
...
<script src="first.js"></script>
<script src="seccond.js"></script>
</html>
//first.js
var y = 5;
//seccond.js
log(y);
//first.js
var namespace=window.namespace|| {}
(function(ns) {
ns.Cliente = function() {
this.nome = "";
};
})(window.namespace=window.namespace|| {});
//seccond.js
var namespace=window.namespace|| {}
(function(ns) {
ns.Animal = function() {
this.comida = “nada";
};
})(window.namespace=window.namespace|| {});
+Conceitos
Referenciando
• Assim como se usa ‘using’ em C# para referenciar
bibliotecas de terceiros
• Basta usar uma tag script para fazer o mesmo
• E sair usando
<html>
<script src="toastr.js"></script>
</html>
Quiz
• “use strict” é equivalente ao “unsafe” do C#
• True
• False
• Em “for (var p in produtos)” o sendo que
‘produtos’ é um array, ‘p’ é:
• Um produto
• O index do produto
• Em “for (var p in produto)” o sendo que
‘produto’ é um objeto, ‘p’ é:
• O index do produto
• Uma propriedade do produto
• O nome de uma propriedade
Quiz
• “use strict” é equivalente ao “unsafe” do C#
• True
• False
• Em “for (var p in produtos)” o sendo que
‘produtos’ é um array, ‘p’ é:
• Um produto
• O index do produto
• Em “for (var p in produto)” o sendo que
‘produto’ é um objeto, ‘p’ é:
• O index do produto
• Uma propriedade do produto
• O nome de uma propriedade
Resumo
• A qualidade do código pode ser melhorada com ‘use strict’
• Passar argumentos como
• objetos inteiros dentro de functions
• Functions por functions
• Functions invocadas e já pegando o resultado
• Para usar bibliotecas, basta referenciar e chamar
• Reflection é sempre um bom recurso para fazer algo mais legal
• Faça um montador de objetos dinâmico
Javascript para CSharpers
Javascript para desenvolvedores acostumados com os demais
conceitos do .Net

Mais conteúdo relacionado

Mais procurados

Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016Romualdo Andre
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Marcelo Bohn
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyDiego Rubin
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve reviewLaís Berlatto
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em RubyDaniel Andrade
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objetoDanilo Alves
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 

Mais procurados (18)

Como criar Custom Tags
Como criar Custom TagsComo criar Custom Tags
Como criar Custom Tags
 
Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016
 
Javascript OO
Javascript OOJavascript OO
Javascript OO
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + JavaBDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Treinamento ajax 03
Treinamento ajax   03Treinamento ajax   03
Treinamento ajax 03
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Cucumber: um breve review
Cucumber: um breve reviewCucumber: um breve review
Cucumber: um breve review
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Aula 02 implementação objeto
Aula 02   implementação objetoAula 02   implementação objeto
Aula 02 implementação objeto
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 

Destaque

IPSF DREAMBUS Newsletter 02
IPSF DREAMBUS Newsletter 02IPSF DREAMBUS Newsletter 02
IPSF DREAMBUS Newsletter 02Judith Youn
 
Compes agroindustrial
Compes agroindustrialCompes agroindustrial
Compes agroindustrialFabio Bacca
 
Warhorse pride 130 20130905
Warhorse pride 130 20130905Warhorse pride 130 20130905
Warhorse pride 130 20130905warhorsepao
 
Fete internet antibes 2011 - Recherche sur Internet
Fete internet antibes 2011 - Recherche sur InternetFete internet antibes 2011 - Recherche sur Internet
Fete internet antibes 2011 - Recherche sur InternetNeil Armstrong
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
CURRICULUM VITAE Odeh Shayeb
CURRICULUM VITAE Odeh ShayebCURRICULUM VITAE Odeh Shayeb
CURRICULUM VITAE Odeh ShayebOdeh W.Shayeb
 
Dissertacao ricardo guarnieri
Dissertacao ricardo guarnieriDissertacao ricardo guarnieri
Dissertacao ricardo guarnieriAmanda Regina
 
Presentació Comms Together
Presentació Comms Together Presentació Comms Together
Presentació Comms Together Comms Together
 
The use of social media to enhance the student experience from pre applicatio...
The use of social media to enhance the student experience from pre applicatio...The use of social media to enhance the student experience from pre applicatio...
The use of social media to enhance the student experience from pre applicatio...Paul Smalley
 

Destaque (16)

IPSF DREAMBUS Newsletter 02
IPSF DREAMBUS Newsletter 02IPSF DREAMBUS Newsletter 02
IPSF DREAMBUS Newsletter 02
 
Compes agroindustrial
Compes agroindustrialCompes agroindustrial
Compes agroindustrial
 
Warhorse pride 130 20130905
Warhorse pride 130 20130905Warhorse pride 130 20130905
Warhorse pride 130 20130905
 
Fete internet antibes 2011 - Recherche sur Internet
Fete internet antibes 2011 - Recherche sur InternetFete internet antibes 2011 - Recherche sur Internet
Fete internet antibes 2011 - Recherche sur Internet
 
La Ley De Dependencia
La Ley De DependenciaLa Ley De Dependencia
La Ley De Dependencia
 
Real Hero
Real HeroReal Hero
Real Hero
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
7.4
7.47.4
7.4
 
CURRICULUM VITAE Odeh Shayeb
CURRICULUM VITAE Odeh ShayebCURRICULUM VITAE Odeh Shayeb
CURRICULUM VITAE Odeh Shayeb
 
Dissertacao ricardo guarnieri
Dissertacao ricardo guarnieriDissertacao ricardo guarnieri
Dissertacao ricardo guarnieri
 
Dojrzaloscszkolna
DojrzaloscszkolnaDojrzaloscszkolna
Dojrzaloscszkolna
 
Ekology barnaul olimp
Ekology barnaul olimp  Ekology barnaul olimp
Ekology barnaul olimp
 
Examen nacional diseno_de_proyectos
Examen nacional diseno_de_proyectosExamen nacional diseno_de_proyectos
Examen nacional diseno_de_proyectos
 
Apereo oaai presentation
Apereo oaai presentationApereo oaai presentation
Apereo oaai presentation
 
Presentació Comms Together
Presentació Comms Together Presentació Comms Together
Presentació Comms Together
 
The use of social media to enhance the student experience from pre applicatio...
The use of social media to enhance the student experience from pre applicatio...The use of social media to enhance the student experience from pre applicatio...
The use of social media to enhance the student experience from pre applicatio...
 

Semelhante a Javascript para CSharpers 3 - Conceitos

Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarTiago Antônio da Silva
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
(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
 
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
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascriptLucas Aquiles
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)Carlos Santos
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
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
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09Carlos Santos
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Julio Monteiro
 

Semelhante a Javascript para CSharpers 3 - Conceitos (20)

Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
Curso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como ProgramarCurso JavaScript - Aula de Introdução como Programar
Curso JavaScript - Aula de Introdução como Programar
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
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...
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Java script1
Java script1Java script1
Java script1
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)T11_LM3: Subalgoritmose colisões (2013-2014)
T11_LM3: Subalgoritmose colisões (2013-2014)
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
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
 
Java script
Java scriptJava script
Java script
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)
 

Mais 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
 

Mais 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 3 - Conceitos

  • 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 os demais conceitos do .Net
  • 4. +Conceitos Sumário • Lições práticas • Código estrito • Laços • Reflection • A natureza do Javascript • Arquitetando o código • Bibliotecas
  • 5. +Conceitos ‘use strict’ • Javascript é popular por permitir um código muito aberto • Significa que suas técnicas são mais propensas à bugs • Para isso existe o modo estrito //Javascript (function() { 'use strict'; var x = 'funciona normalmente'; y = 'não procegue'; })(); //qualquer coisa é permitida aqui
  • 6. +Conceitos ‘use strict’ • O que é desabilitado • Variáveis não declaradas • Propriedades duplicadas • Editar propriedades readonly • Parâmetros duplicados • Modificar ‘arguments’ • Deletar variáveis • Palavras reservadas para uso futuro y = 'algum valor' var x = { name: 'c1', name: 'c2' }; var array = [1, 2, 3, 4, 5]; array.length = 8; delete array; implements interface package private protected public static yield class enum function(p1, p2, p1) { arguments = []; }
  • 7. +Conceitos Iterações • Foreach do C# não é como o for..in do Javascript • Um objeto nada mais é do que um “dictionary” de propriedades. //C# var array = new[] {"um", "dois", "três"}; foreach (var s in array) { //s seria cada string } //Javascript var array = ['um', 'dois', 'três']; for (var s in array) { log(s) //0, 1, 2, ?? log(array[s]) //'um', 'dois‘ }
  • 8. +Conceitos Reflection • Enumera todas as propriedades do objeto • Sua forma mais simples é a iteração for..in E se eu fizer isso com o window ou document ?var cliente = { nome: 'Juvenal', cpf: '192.168.10.1', ativo: true, 'animal de estimação': { especie: 'coelho' }, cancelarAssinatura: function () { } } for (var prop in cliente) { "prop: " + prop; cliente[prop]; typeof cliente[prop]; }
  • 9.
  • 10. for(var prop in obj){ } • Faça uma function que receba um objeto e logue para cada uma das propriedades dele: • Nome da propriedade • Valor • Tipo do valor • Valor como String • Valor como Numero • Valor como Boleano • Se uma das propriedades for objeto, as propriedades deste devem ser logadas também Exercícios Reflection
  • 11. +Conceitos Natureza do Javascript • No .Net parâmetros são muito bem definidos • Passar objetos por parâmetro é algo trivial //C# var server = new SmtpClient(); //Parametro em construtor var msg = new MailMessage("from@mail.com","to@mail.com"); msg.Body = "Hello"; msg.Subject = "Test Message"; //Chamando método server.Send(msg);
  • 12. +Conceitos Natureza do Javascript • No Javascript, é possível passar um parâmetro “aberto” • DuckTyping te permite construir objetos em qualquer lugar //Javascript var server = new SmtpClient(); //Construtor var msg = { to: 'to@email.com', from: 'from@email.com', body: 'Hello', subject: 'Test msg' }; //Chamando server.send({ }); server.send(msg);
  • 13.
  • 14. Exercícios Validações • Implemente a classe SmtpClient e o método Send • Este método recebe um objeto com as seguintes propriedades: to, from, body, subject. • Dentro do método, verifique a validade de cada uma dessas propriedades e retorne true ou false • Caso to ou from forem vazios ou e-mails inválidos, retorne false (“string”.indexOf(‘@’)>=0) • Se body e subject forem vazias, devem ser substituídas por “No Body” e “No Subject” respectivamente • Passe também um callback para logar a mensagem; • Se tudo estiver preenchido, invoque o callback passando a mensagem;
  • 15. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; };
  • 16. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; };
  • 17. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; };
  • 18. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; msg.subject = msg.subject || defaults.subject; msg.body = msg.body || defaults.body; };
  • 19. +Conceitos Natureza do Javascript • No Javascript Tratando propriedades inválidas Implementando defaults SmtpClient.send = function(msg) { if (msg.subject == null || msg.subject == undefined) msg.subject = "No Subject"; if (msg.body == null || msg.body == undefined) msg.body = "No Body"; var defaults = { subject: 'No Subject', body: 'No Body' }; if (!msg.subject) msg.subject = defaults.subject; if (!msg.body) msg.body = defaults.body; msg.subject = msg.subject ? msg.subject : defaults.subject; msg.body = msg.body ? msg.body : defaults.body; msg.subject = msg.subject || defaults.subject; msg.body = msg.body || defaults.body; extend(msg, defaults); }; function extend (obj, defaults){ for(var prop in defaults){ obj[prop] = obj[prop] || defaults[prop]; } };
  • 20. +Conceitos Arquitetando código • Em C#, o Assembly delimita o Package • Javascript é baseado em arquivos, que devem ser referenciados na ordem correta • É possível separar logicamente isolando em namespaces, corrigindo esse possível problema <html> ... <script src="first.js"></script> <script src="seccond.js"></script> </html> //first.js var y = 5; //seccond.js log(y); //first.js var namespace=window.namespace|| {} (function(ns) { ns.Cliente = function() { this.nome = ""; }; })(window.namespace=window.namespace|| {}); //seccond.js var namespace=window.namespace|| {} (function(ns) { ns.Animal = function() { this.comida = “nada"; }; })(window.namespace=window.namespace|| {});
  • 21. +Conceitos Referenciando • Assim como se usa ‘using’ em C# para referenciar bibliotecas de terceiros • Basta usar uma tag script para fazer o mesmo • E sair usando <html> <script src="toastr.js"></script> </html>
  • 22.
  • 23. Quiz • “use strict” é equivalente ao “unsafe” do C# • True • False • Em “for (var p in produtos)” o sendo que ‘produtos’ é um array, ‘p’ é: • Um produto • O index do produto • Em “for (var p in produto)” o sendo que ‘produto’ é um objeto, ‘p’ é: • O index do produto • Uma propriedade do produto • O nome de uma propriedade
  • 24. Quiz • “use strict” é equivalente ao “unsafe” do C# • True • False • Em “for (var p in produtos)” o sendo que ‘produtos’ é um array, ‘p’ é: • Um produto • O index do produto • Em “for (var p in produto)” o sendo que ‘produto’ é um objeto, ‘p’ é: • O index do produto • Uma propriedade do produto • O nome de uma propriedade
  • 25. Resumo • A qualidade do código pode ser melhorada com ‘use strict’ • Passar argumentos como • objetos inteiros dentro de functions • Functions por functions • Functions invocadas e já pegando o resultado • Para usar bibliotecas, basta referenciar e chamar • Reflection é sempre um bom recurso para fazer algo mais legal
  • 26. • Faça um montador de objetos dinâmico
  • 27. Javascript para CSharpers Javascript para desenvolvedores acostumados com os demais conceitos do .Net

Notas do Editor

  1. var cliente = {     nome: 'Juvenal',     cpf: '192.168.10.1',     ativo: true,     'animal de estimação': { especie: 'coelho' },     cancelarAssinatura: function () { } } for (var prop in cliente) {     "prop: " + prop;     cliente[prop]     typeof cliente[prop] }