Escolar Documentos
Profissional Documentos
Cultura Documentos
• 1 Historia e conceitos
• 2 Tipos e variáveis
• 3 Operadores
• 4 Estruturas condicionais e de repetição
1 Historia e conceitos
Lançado em setembro de 1995 com nome de mooca juntamente com ba versão beta do net scape
primeiramente chamado de live script e depois java script
a alteração do nome se deu com a sum microsistem
sum foi onde a linguagem surgiu em maio de 1995 James Goslin
Época em que equee add suporte ao java por meio de aplets
ECMA 262. SERVIDO COMO BASE PARA OUTRAS LINGUAGENS DE SCRIPT jcomo java
script, Jscript e action script
comitê TC39 – responsável pela evolução do javascript (manter e atualziar) mantendo padrões
ECMA TR104
ES2018
• Operadores rest/spread
• Iteração assincrona
• Promise.prototype.finally()
ES.Next
Linguagens compiladas são transformadas em linguagens diferentes para serem por exemplo C
e C++ que são compiladas em linguagem assembly para depois serem executadas.
Tipagem dinâmica não precisa explicitar a variável no momento de sua criação, ele saberá o tipo a
partir da atribuição do valor (inferência de tipo)
Além de conseguir add tipos em tempo de desenvolvimento, add funcionalidade que o js não tem
por padrão como por exemplo interfaces
Flow semelhante ao Typescript mas não é SuperSet, versão mais simplificada do Typescript
Significa função pode ser atribuída a uma variável, estrutura de dados ou argumentos e até retornar
outras funções
✔ Closure
(Escopo lexo)
Capacidade de uma função lembrar do ambiente onde ela foi criada.
3 tipos
Antes do ES6 tínhamos Escopo global e de função.
com inclusão de let e const temos agora o escopo de bloco também
initFn3();
o ideal é que a função seja pura ( função que recebe um parâmetro e retorna alguma coisa)
✔ Curryning
Comum em linguagens funcionais, js não é funcional por padrão mas é possível adaptar
Técnica de função de N parâmetros (2,3,4) em apenas uma função que recebe 1 parâmetro e para
cada parâmetro uma nova função.
Ex:
função normal:
reaproveitar o primeiro parametro com Curryning ( em cada parametro uma nova função:
function soma(a) {
return function (b) {
return a+ b;
}
}
soma2(2);
soma2(3);
soma2(4);
soma2(5);
✔ Hoisting
(levantar ou suspender)
function fn() {
console.log(text)
var text = ‘exemplo’;
console.log(text);
}
fn()
neste exemplo o “var text; será içado, porém não definido e ficará como exibido abaixo:
function fn() {
var text;
console.log(text)
text = ‘exemplo’;
console.log(text);
}
no primeiro console.log retornará undefined
no segundo retornará “Exemplo”
function fn() {
log(‘Hoisting de função’);
funcgtion log(value) {
console.log(value);
}
}
fn()
Neste exemplo a função será içada como um todo e ficará como exibido abaixo:
function fn() {
funcgtion log(value) {
console.log(value);
}
log(‘Hoisting de função’);
Ex. Objetos
const user = {
name: ‘Jorge’,
lastName: ‘Donizeti Alves’
};
function getUserWithFullName(user) {
return {
...user,
fullName: `${user.name} ${user.lastName}`
}
}
const userWith\FullNasme = getUserWithFullName(user);
console.log(userWithFullName);
Ex.2 Arrays
const students = [
{
name: ‘Grace’,
grade: 7
},
{
name: ‘Jennifer’,
grade: 4
},
{
name: ‘Paul’,
grade: 10
},
]
function getAprovedStudents(studentsList) {
return studentsList.filter(student => student.grade >=7);
}
console.log(‘Alunos aprovados:’);
console.log( getAprovedStudents(students));
console.log( ‘\nLista de alunos:’)
console.log(students);
var - o pioneiro no js
posteriormente introduzido:
let
const
com eles introduziram o escopo de bloco]
if, whille, etc…. Toda vez que se abre chaves se tem um bloco
console.log(`nameVar: ${nameVar}`);
console.log(`nameLet: ${nameLet}`);
console.log(`nameConst: ${nameConst}`);
// escopo global
{
// Escopo de bloco
}
function test() {
// escopo de função
}
Ser for um objeto, podemos trocar suas propriedades, porém não podemos fazer o objeto “apontar”
para outro lugar
push add
shift deleta
[1] altera
✔ TIPOS E VARIÁVEIS
➢ string
➢ number
➢ boolean true false
➢ null nulo
➢ undefined não de finido
➢ symbol criar valores unicos
6 tipos primitivos
➢ Object
➢ Function também é um objeto mas permite que ele seja chamado
➢ Array também é objeto mas tem relação com filhos e índices
nulll
const nullVariable = null;
number ------
object:
function getProp(prop) {
return user[prop]
}
funções de objetos
newObj.foo = ‘changes’;
delete newObj.foo;
newObj.bar = ‘foo’;
symbol
valores únicos
//Symbols são únicos
console.log(‘symbol é igual a symbol2:’, symbol1 === symbol2);
const user = {
[namSymbol1]: ‘Jorge’,
[namSymbol2]: ‘Outro nome’,
lastName: ‘Donizeti Alves’
}
console.log((user);
//Symbols criam propriedades que não são enumberables
Não são enumeráveis e não é possível acessar com estruturas padrões de repetição
for (const key in user) {
if (user.hasOwnPropriety(key)) {
console.log(`\nValor da chave ${key}: ${user[key]}`);
}
} (não exibirá)
// Criar um enum
const directionsd = {
UP : Symbol( ‘UP’ ),
DOWN : Symbol( ‘DOWN’ ),
LEFT : Symbol( ‘LEFT’ ),
RIGHT : Symbol( ‘RIGHT’ ),
FUNCTIONS E OPERADORES
function fn( ) {
return ‘Code here’;
}
// Receber parâmetros
const logValue = value => console.log(value);
const logFnResult = fnParam => console.log(fnParam());
logFnResult(fn);
function controlFnExec(fnParam) {
return function(allowed) {
if (allowed) {
fnParam( );
}
}
}
(() => {
this.name = ‘arrow-function’;
c this.name;
const getNameArrowFn = ( ) => this.name;
}
function getName( ) {
return this.name;
}
const user = {
name: ‘Nome no objeto de execução’,
getNameArrowFn,
getName
}
console.log(user.getNameArrowFn( ));
console.log(user.getName());
})();
ARRAYS
TAMBÉM É UM OBJETO MAS PERMITE VÁRIAS OUTRAS ESTRUTURAS DE DADOS
DENTRO
const gender = {
MAN: Symbol(‘M’),
WOMAN: sYMBOL(‘W’)
const person = [
{
name: ‘Jorge’,
age: 26,
gender: gender.MAN
},
{
name: ‘Pedro’,
age: 43,
gender: gender.MAN
},
{
name: ‘Jennifer’,
age: 18,
gender: gender.WOMAN
},
];
// Verificar se é array
IMUTABILIDADE
FILTER , MAP E REDUCE ( NÃO ALTERAM A REFERENCIA DO OBJETO(ARRAY),
RETORNAM UM NOVO)
// Filtrar array
const mens = person.filter(person => person.gender === gender.MAN);
console.log(‘\nNova listra apenas com homens:’, mens);
// Retornar um novo array
age += person.age;
return age;
}, 0);
// Juntando operações
console.log(‘\nSoma de idades das pessoas que possuem idade par’, total EvenAges);
✔ Operadores
1. Aritmieticos
2. Atribuição
3. Comparação
4. Condicional
5. Lógicos
6. Spreed
// Operador binário
operando1 operador operando2
1+2
//Operador unário
operando 1 operador
operador operando1
x++
++x
Aritmeticos
// Módulo (%)
// Operador binário. Retorna o inteiro restante da divisão dos dois operandos.
12 % 15 // retorna 2.
const a= ++2; // 3
const b = 2++; // 2
// Operando de exponenciação (*
2 ** 3 // retorna 8
10 ** -1 // retorna 0.1
// Operador de agrupamento ()
2* ( 3+2)
Atribuição
x=y
// Atribuição de adição
x= x+y //ou
x += y
// Atribuição de subtração
x = x - y //ou
x -= y
// Atribuição de multiplicação
x= x*y //ou
x *= y
// Atribuição de divisão
x = x / y //ou
x /= y
// Atribuição de resto
x= x%y //ou
x %= y
Comparação
(gual (==)
// retorna true caso os operandos sejam iguais. 3 == var1
“3” == var1
3 == ‘3’
Operador Condicional
(Operador Ternário)
// OU (OR) lógico ( || )
exp1 || exp2
se a primeira for falsa, retornará a segunda
// True
“ “
1
[‘teste’]
// False
“”
0
[]
// Spreed…
function fn(x, y, z) { }
var args = [0, 1, 2];
fn(...args);
//Deletar algo
delete something;
// Determinar tipo
typeof something;
something in somethingItems
// Arrays
var arvores = new Array(“pau-brasil”, “loreiro”, “cedro”, “carvalho” , “sicômoro”);
0 in arvores; // retorna true pois na array arvores existe o índice 0
3 in arvores; // retorna true
6 in arvores; // retorna false
“cedro” in arvores; // retorna false ( você deve especificar o número do indice)
“length” in arvores; // retorna true (length é uma propriedade de Array)
// Objetos predefinidos
“PI” in Math; // retorna true
var minhaString = new String(“coral”);
“length” in minhaString; // retorna true
// Objetos personalizados
var meucarro = {marca: “Honda”, modelo: “Accord”, ano: 1998);
“marca” in meucarro; // retorna true
“modelo” in meu carro // retorna true
// instanceof
objeto instanceof tipoObjeto
} retorna verdadeiro
Estruturas condicionais
if (condition) {
// code
}
eles if
console.log(‘\nelse if’);
array.forEach( item => {
if ( item % 2 === 0) {
console.log(`O número ${item} é divisível por 2.`);
} eles if ( item % 3 === 0) {
console.log(`O número ${item} é divisivel por 3.`);
} eles if ( item % 5 === 0) {
console.log(`O número ${item} é divisivel por 5.`);
}
});
console.log(‘\nif’);
switth (expressã0) {
case valor1:
[breack;]
case valorN:
[breack;]
default:
[break;]
}
switth (fruit) {
case ‘banana’:
console.log(‘R$ 3,00 /kg’);
breack;
case ‘mamão’:
case ‘pera’:
console.log(‘R$ 2,00 /kg’);
breack ( se retirar o brack apresentará o valor + o default)
default:
console.log(‘Produto não existe no estoque’);
breack;
}
Estruturas de repetição
for
while
do...while
for...in
operadores que manipulam a repetição:
continue : dependendo da contição ele pula e continua
brack: mata o laço
laço for
const array = [‘on’1, ‘two’, ‘theee’]
for (let index = 0; index < array.length; index++) {
const element = array[index];
console.log(‘Element ${index}: ${element}.’);
laço while
enquanto verdadeiro execulte
(começa a ser executado se a primeira condição for verdade)
var n = 0
var x = 0;
while (n <3) {
n++;
x += n; // 1,3,6
}
console.log(x);
laço do while
(execulta pelo menos uma vez)
let i =0;
do {
i += 1;
console.log(i)
} while (i < 5 );
laço for in e laço for of
Orientação a objetos
‘use strict’;
function Animal(qtdePara0 {
this.qtdePatas = qtdePatas;
}
function Cachorro(morde) {
Animal.call(this, 4); (call) permite passar um contxto pra função ser executada)
this.morde = morde; (contexto de objeto novo)
}
console.log(pug)
// Cachorro {qtdePatas: 4, morde: false}
Classes:
ES6
simplificação da herança de protótipos
palavra-chave class
Uma nova sintaxe mas que faz o “prototype por baixo dos panos)
Modificadores de acesso
privado / público.
O # diz que a variavel é privada na versão node.js
pode ser referenciado direto na classe mas sempre com cerquilha.
Encapsulamento
Static
Designer patterns
Objetivos da aula
✔ Definição
✔ Tipos
✔ Patterns mais utilizados
Definição:
Padrões de projetos são soluções generalistas para problemas recorrentes durante o
desenvolvimento de um software. Não se trata de um framework ou código pronto, mas de uma
definiçao de alto nível de como um problema comum pode ser solucionado.
Surgido no livro
A Pattern Language em 1978 por
Christopher Alexander, Srara Ishikawa e Murray Silverstein
253 tipos de problemas/ desafios de projetos.
Formato de um pattern:
✔ Nome
✔ Exemplo
✔ Contexto
✔ Problema
✔ Solução
Alestra em 1987
Kent Beck ( Extreme program e TDD) e Ward Cunnigham
5 padrões de projetos
Libro Designer Patterns: Elements of Reusable Object-Oriented Software
✔ 1994
✔ Gang of four (GoF)
✔ Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides
Classificação:
✔ Tipos
✔ Criação
✔ Estrutural
✔ Comportamental
Padrões de criação
Os padrões de criação são aqueles que abstraem e/ou adiam o processo criação dos objetos. Eles
ajudam a tornar um sistema independente de como seus objetos são criados, compostos e
representados.
Padrões de criação
✔ Abstract Factory
✔ Builder
✔ Factory Method
✔ Prototype
✔ Singleton
Padrões estruturais
Os padrões estruturais se preocupam com a forma como os objetos são compostos para formar
estruturas maiores.
Padrões estruturais
✔ Adapter
✔ Bridge
✔ Composite
✔ Decorator
✔ Facade
✔ Business Delegate
✔ Flymweight
✔ Proxy
Padrões comportamentais
Padrões comportamentais
✔ Chain of Resposibility
✔ Command
✔ Command
✔ Interpreter
✔ Iterator
✔ Mediator
✔ Observer
✔ State
✔ Strategy
✔ Template Method
✔ Visitor
✔ Factory
✔ Singleton
✔ Decorator
✔ Observer
✔ Module
Factory
Todas as funções que retornam um objeto, sem a necessidade de chamá-las com o new, são
consideradas funções factory
Singleton
O objetivo desse pattern é criar uma única intância de uma função construtora e retorná-la toda vez
em que for necessário utilizá-la. Exemplo muit utilizado é o Jquery.
Decorator
Uma função decorator recebe uma outra função como parametro e estende o seu comportamento
sem modificá-la explicitamente.
Observer
É um pattern muito popular no javascript. A instancia (subscriber) mantém uma coleção de objetos
(observers) e notifica todos eles quando ocorrem mudanças no estado.
Module
É um pattern que possibilita organizarmos melhot o nosso código, sem a necesssidade de expor
váriáveis globais.