From 97021d3554ef307acffa7bc693d56b6e56d5ead1 Mon Sep 17 00:00:00 2001 From: Douglas Date: Sun, 19 Nov 2023 14:24:57 -0300 Subject: [PATCH] Objetos e classes em JS --- .vscode/settings.json | 3 + .../desafio/trilha-css-desafio-01 | 1 + JavaScript/FuncoesJS/aula1.js | 22 +++++++ .../exerciciosGuiados/escrevameunome.js | 61 +++++++++++++++++++ JavaScript/ObjetosClasses/Classes.js | 42 +++++++++++++ .../ObjetosClasses/ExerciciosGuiados/Carro.js | 27 ++++++++ .../ExerciciosGuiados/Pessoa.js | 51 ++++++++++++++++ JavaScript/ObjetosClasses/Objetos.js | 29 +++++++++ 8 files changed, 236 insertions(+) create mode 100644 .vscode/settings.json create mode 160000 Fundamentos de CSS/desafio/trilha-css-desafio-01 create mode 100644 JavaScript/FuncoesJS/aula1.js create mode 100644 JavaScript/FuncoesJS/exerciciosGuiados/escrevameunome.js create mode 100644 JavaScript/ObjetosClasses/Classes.js create mode 100644 JavaScript/ObjetosClasses/ExerciciosGuiados/Carro.js create mode 100644 JavaScript/ObjetosClasses/ExerciciosGuiados/Pessoa.js create mode 100644 JavaScript/ObjetosClasses/Objetos.js diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6f3a291 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "liveServer.settings.port": 5501 +} \ No newline at end of file diff --git a/Fundamentos de CSS/desafio/trilha-css-desafio-01 b/Fundamentos de CSS/desafio/trilha-css-desafio-01 new file mode 160000 index 0000000..03ede5e --- /dev/null +++ b/Fundamentos de CSS/desafio/trilha-css-desafio-01 @@ -0,0 +1 @@ +Subproject commit 03ede5eefd39b05d9fa355bc84a608bede90e222 diff --git a/JavaScript/FuncoesJS/aula1.js b/JavaScript/FuncoesJS/aula1.js new file mode 100644 index 0000000..1c1f2da --- /dev/null +++ b/JavaScript/FuncoesJS/aula1.js @@ -0,0 +1,22 @@ +// Funções são objetos +function main() { + return 'say my name'; +} +console.log(main); + +const main2 = main; +console.log(main2()); + +const princ = function() { + console.error("pane no sistema"); +} + +princ(); + +// Funções invocadas imediatamente +(function () { + console.log("SAY MY NAME"); +})(); + + +// Funções que não devolvem nada são chamadas de procedimentos diff --git a/JavaScript/FuncoesJS/exerciciosGuiados/escrevameunome.js b/JavaScript/FuncoesJS/exerciciosGuiados/escrevameunome.js new file mode 100644 index 0000000..e2be3ac --- /dev/null +++ b/JavaScript/FuncoesJS/exerciciosGuiados/escrevameunome.js @@ -0,0 +1,61 @@ +function EscrevaMeuNome(nome) { + return 'Olá! ' + nome; +} + +EscrevaMeuNome("Douglas"); + +// Função sobre função +function serMaior(idade) { + if (idade >= 18) { + return "Maior de idade"; + } else { + return "Menor de idade"; + } +} + +serMaior(10); + + +// Misto +function cumprimentos(nome, idade) { + console.log(EscrevaMeuNome(nome) + ' você é ' + serMaior(idade)); +} + +cumprimentos("Douglas", 18); + +// Calcular preço +function precoEtiqueta(formaPagamento, preco) { + switch (formaPagamento) { + case 1: + return preco - (preco * 0.1); + case 2: + return preco - (preco * 0.15); + case 3: + return preco; + case 4: + return preco + (preco * 0.1); + default: + return undefined; + } +} + +function formaPagamento(formaPagamento) { + switch (formaPagamento){ + case 1: + return "Débito"; + case 2: + return "Dinheiro/Pix"; + case 3: + return "Dividido em 2 vezes"; + case 4: + return "Dividido em mais de 2 vezes"; + default: + return undefined; + } +} + +const formPgmt = 5; +const preco = 10; + +console.log("Pagando através do " + formaPagamento(formPgmt, preco) + " com o produto por R$" + preco); +console.log("O preço fica R$" + precoEtiqueta(formPgmt, preco)); \ No newline at end of file diff --git a/JavaScript/ObjetosClasses/Classes.js b/JavaScript/ObjetosClasses/Classes.js new file mode 100644 index 0000000..fe3e387 --- /dev/null +++ b/JavaScript/ObjetosClasses/Classes.js @@ -0,0 +1,42 @@ +// E se eu quiser criar várias pessoas? -> Cria uma classe + +// Classe - modelo de como deveria ser (Isso não seria interface?) +// Instância - Aplicação da classe (Ocorrência da classe) + +class Pessoa { + nome; + idade; + anoDeNascimento; + + // Construtor é o que vai definir quando a classe é instanciada + // Chamadas de contratos + constructor (nome, idade){ + this.nome = nome; + this.idade = idade; + const anoHoje = new Date; + this.anoDeNascimento = anoHoje.getFullYear() - idade; + } + + // Não se faz nescessário escrever function dentro de uma classe + descrever (){ + console.log(`Meu nome é ${this.nome} e tenho ${this.idade} anos de idade e nasci no ano de ${this.anoDeNascimento}`); + } +} + +const douglas = new Pessoa('Douglas', 20); +douglas.descrever(); + +const lusca = new Pessoa('Lusca', 34); +lusca.descrever(); + +function compararPessoa(p1, p2) { + if (p1.idade > p2.idade) { + console.log(`${p1.nome} é mais velho(a) do que ${p2.nome}`); + } else if (p1.idade < p2.idade) { + console.log(`${p2.nome} é mais velho(a) do que ${p1.nome}`); + } else { + console.log(`${p2.nome} e ${p1.nome} tem a mesma idade`); + } +} + +compararPessoa(douglas, new Pessoa('Felca', 20)); \ No newline at end of file diff --git a/JavaScript/ObjetosClasses/ExerciciosGuiados/Carro.js b/JavaScript/ObjetosClasses/ExerciciosGuiados/Carro.js new file mode 100644 index 0000000..8ee2a2f --- /dev/null +++ b/JavaScript/ObjetosClasses/ExerciciosGuiados/Carro.js @@ -0,0 +1,27 @@ +class Carro { + marca; + cor; + gastoCombustivelMedio; // KM/litro + tipoCombustivel; + + constructor(marca, cor, gastoCombustivelMedio, tipoCombustivel = 'Gasolina'){ + this.marca = marca; + this.cor = cor; + this.gastoCombustivelMedio = (gastoCombustivelMedio).toFixed(5); + this.tipoCombustivel = tipoCombustivel + } + + dinheiroNaViagem (qntKM, precoCombustivel){ + let litros = this.gastoCombustivelMedio * qntKM; + return (precoCombustivel * litros).toFixed(2); + } + + descrever () { + console.log(`Carro da marca ${this.marca} e a cor ${this.cor} e roda ${this.gastoCombustivelMedio} KM por litro, sendo ${this.tipoCombustivel} o combustível dele.`); + } +} + +let chervrolet = new Carro('Chevrolet', 'Prata', 1/12, 'Alcool'); +chervrolet.descrever(); +console.log(`Você vai gastar R$${chervrolet.dinheiroNaViagem(70, 5)}`); + diff --git a/JavaScript/ObjetosClasses/ExerciciosGuiados/Pessoa.js b/JavaScript/ObjetosClasses/ExerciciosGuiados/Pessoa.js new file mode 100644 index 0000000..9296c04 --- /dev/null +++ b/JavaScript/ObjetosClasses/ExerciciosGuiados/Pessoa.js @@ -0,0 +1,51 @@ +class Pessoa{ + nome; + peso; + altura; + + constructor(nome, peso, altura){ + this.nome = nome; + this.peso = peso; + this.altura = altura; + } + + calcularIMC(){ + return (this.peso / Math.pow(this.altura, 2)).toFixed(2); + } + + classificarIMC(){ + let imc = this.calcularIMC(); + let classificacao = ''; + + if (imc < 18.5 ) { + classificacao = 'Abaixo do peso'; + } else if (imc > 18.5 && imc < 24.9) { + classificacao = 'Peso normal'; + } else if (imc > 25 && imc < 29.9){ + classificacao = 'Sobrepeso'; + } else if (imc > 30 && imc < 34.9){ + classificacao = 'Obesidade grau I'; + } else if (imc > 35 && imc < 39.9){ + classificacao = 'Obesidade grau II (Severa)'; + } else if (imc > 40){ + classificacao = 'Obesidade grau III (Mórbida)'; + } + + return classificacao; + } + + descrever (){ + console.log(`Nome: ${this.nome} \nAltura: ${this.altura} cm\nPeso: ${this.peso} kg`); + console.log(`${this.nome} tem ${this.calcularIMC()} de IMC e está ${this.classificarIMC()}`); + } +} + + +const jose = new Pessoa('José', 70, 1.75 ); +jose.descrever(); +// IMC abaixo de 18,5: Abaixo do peso +// IMC entre 18,5 e 24,9: Peso normal +// IMC entre 25,0 e 29,9: Sobrepeso +// IMC entre 30,0 e 34,9: Obesidade grau I +// IMC entre 35,0 e 39,9: Obesidade grau II (severa) +// IMC 40,0 ou superior: Obesidade grau III (mórbida) \ No newline at end of file diff --git a/JavaScript/ObjetosClasses/Objetos.js b/JavaScript/ObjetosClasses/Objetos.js new file mode 100644 index 0000000..df34f76 --- /dev/null +++ b/JavaScript/ObjetosClasses/Objetos.js @@ -0,0 +1,29 @@ +// Alusão a um map + +// Função dentro de um objeto = método +const pessoa = { + nome: 'Douglas', + idade: 20, + + // Pq não posso utilizar função anonima? + // Pois função anônima só herda os própios atributos, ou seja, ele não reconhece o 'nome' da função anterior + // Poderia ser utilizado caso as variáveis fossem usadas no escopo da arrow function. + descrever : () => console.log(`Seu nome é ${this.nome} e sua idade é ${this.idade}`) +}; + +// -- Adicionando valores +// pessoa.altura = 1.90; +// console.log(pessoa); + +// -- Deletando valores +// delete pessoa.nome; +// console.log(pessoa); + +// -- Chamando métodos +// pessoa.descrever(); + +// -- Acessar dinamicamente os atributos +// console.log(pessoa['nome']); +// pessoa['nome'] = 'Lusca'; +// console.log(pessoa['nome']); +// A outra forma é estática.