Funções vs Classes
Em JavaScript, funções e classes são duas formas diferentes de se criar estruturas de c ódigo reutilizáveis.
disclaimer: esse texto é mais voltado para o estudo de classes em JavaScript
Diferenças:
-
Sintaxe: A sintaxe para criar funções e classes são diferentes. Funções são definidas usando a palavra-chave
function, enquanto classes são definidas usando a palavra-chaveclass.ex.1
function nomeDaFuncao(parametro1, parametro2) {// bloco de código da funçãoreturn resultado;}ex.2
class NomeDaClasse {constructor(parametro1, parametro2) {// bloco de código do construtor}metodo1() {// bloco de código do método}metodo2() {// bloco de código do método}} -
Construtores: As classes tem um método especial chamado
construtor, que é chamado quando uma nova instância da classe é criada. Funções não tem um métodoconstrutorpadrão, mas podem ter argumentos que são usados para inicializar a função.ex.
// Criando uma classe de usuárioclass Usuario {constructor(nome, idade, email) {this.nome = nome;this.idade = idade;this.email = email;}// Método para exibir informações do usuárioexibirInfo() {console.log(`Nome: ${this.nome}, Idade: ${this.idade}, Email: ${this.email}`,);}}// Criando um objeto usuário com o construtor da classeconst usuario1 = new Usuario('João', 30, 'joao@example.com');// Chamando o método para exibir informações do usuáriousuario1.exibirInfo(); -
Heranças: As classes permitem a criação de hierarquias de classes, onde uma classe pode ser definida como extenção de outra classe existente, e herdar seus métodos e propriedades. Funções não tem um recurso de herança integrado.
ex.
// Definindo uma classe "Pessoa" como classe baseclass Pessoa {constructor(nome, idade) {this.nome = nome;this.idade = idade;}apresentar() {console.log(`Olá, meu nome é ${this.nome} e eu tenho ${this.idade} anos.`,);}}// Definindo uma classe "Usuario" que herda da classe "Pessoa"class Usuario extends Pessoa {constructor(nome, idade, email, senha) {super(nome, idade); // Chama o construtor da classe base para definir o nome e a idadethis.email = email;this.senha = senha;}logar() {console.log(`Usuário ${this.email} fez login.`);}// Sobrescreve o método "apresentar" da classe baseapresentar() {console.log(`Olá, meu nome é ${this.nome} e eu tenho ${this.idade} anos. Meu e-mail é ${this.email}.`,);}}// Criando um novo objeto da classe "Usuario"const usuario1 = new Usuario('João', 30, 'joao@mail.com', '12345');// Chamando o método "apresentar" do objetousuario1.apresentar(); // Olá, meu nome é João e eu tenho 30 anos. Meu e-mail é joao@mail.com.// Chamando o método "logar" do objetousuario1.logar(); // Usuário joao@mail.com fez login. -
Instâncias: As classes são usadas para criar instâncias de objetos, enquanto as funções geralmente são usadas como blocos de código reutilizáveis que podem ser chamados várias vezes.
ex.
//Suponha que temos a classe User com as propriedades name e email, e o método sendEmail(), que envia um e-mail para o usuário:class User {constructor(name, email) {this.name = name;this.email = email;}sendEmail() {// Código para enviar um e-mailconsole.log(`E-mail enviado para ${this.name} (${this.email})`);}}//Podemos criar uma instância da classe User da seguinte maneira:const user1 = new User('João', 'joao@email.com');//Neste exemplo, estamos criando uma instância da classe User chamada user1 com as propriedades name igual a "João" e email igual a "joao@email.com".//Para chamar o método sendEmail() da instância user1, podemos fazer o seguinte:user1.sendEmail(); // imprime "E-mail enviado para João (joao@email.com)"//Desta forma, estamos chamando o método sendEmail() na instância user1, que imprimirá a mensagem "E-mail enviado para João (joao@email.com)" no console. -
Métodos: As classes geralmente tem métodos que são usados para definir comportamentos específicos do objeto. As funções também podem ter métodos, mas geralmente são utilizados para definir comportamentos mais gerais e genéricos.