Pular para o conteúdo principal

JS - Introdução a programação funcional

Em resumo, programação funcional é o paradigma de programação baseado em funções e suas características que evita estados ou dados mutáveis. Para trabalhar nesse paradigma a linguagem deve possuir algumas características:

Funções são objetos de primeira classe

As funções são tratadas como objetos, ou seja, tudo que é possível fazer com objetos também pode ser feito com funções.

Um objeto literal

var pessoa = { nome: 'Eduardo', sexo: 'Masculino'}

Uma função literal

function soma(a, b) { return a + b; }

Atribuição de um objeto

var carro = {};

Atribuição de uma função

var func = function func() {};

Uma função pode retornar um objeto

Permite que e as propriedades desse objeto possam ser acessadas a partir da execução da função:

function recuperarCarro() {
  return {
marca: 'Fiat',
modelo: 'Palio'
  }
}

recuperarCarro().marca;

Uma função pode retornar outra função

Permite a execução de uma função após a execução de outra, no exemplo abaixo a função principal recebe um valor que é usado como base pela função retornada:

function calculoBase(valorBase){
  return function(valor) {
     return valorBase + valor;
  };
}

var calcBase = calculoBase(2);
calcBase(3); (retorna 5)
calcBase(4); (retorna 6)
calculoBase(2)(5); (retorna 7)

Uma função pode receber um objeto por parâmetro

var carro = { cor: 'Prata' };
function recuperarCor(c) { return c.cor; };

Uma função pode receber outra função por parâmetro

No exemplo abaixo temos uma função que executa outras funções:

function executarFuncao(func) { return func(); };
executarFuncao( recuperarCarro );
executarFuncao( function() { return 'Teste'; });




Comentários

Mais visitadas

Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker

Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker Neste guia, vamos criar uma aplicação básica que acessa um banco de dados PostgreSQL e realiza operações CRUD (Create, Read, Update, Delete). Vamos usar Flask e executar tudo com Docker. Sem estilos ou extras, apenas o essencial. Estrutura do Projeto crud-app/ |-- app/ | |-- app.py | |-- templates/ | | |-- index.html | | |-- edit.html |-- Dockerfile |-- requirements.txt |-- docker-compose.yml Passo 1: Dependências Crie um arquivo requirements.txt com as seguintes linhas: Flask==2.2.2 Flask-SQLAlchemy==3.0.2 psycopg2-binary==2.9.3 Werkzeug==2.2.2 Passo 2: Aplicação Flask Arquivo app/app.py : from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # Configuração do banco de dados app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@db:5432/crud_db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db...

Listar arquivos existentes em diretório (Delphi)

Mostraremos uma maneira simples e prática para listar o conteúdo de um diretório com a opção de incluir nessa listagem os arquivos de seus subdiretórios. No exemplo abaixo temos um Edit para receber o diretório a ser pesquisado um CheckBox para indicar se os subdiretórios entrarão na pesquisa um botão para efetuar a pesquisa e um Memo para listar os arquivos encontrados, no final um Edit que receberá o cálculo final (em bytes) da soma do tamanho dos arquivos. procedure TForm1.Button1Click(Sender: TObject); begin   tamanhoTotal := 0;   memLista.Lines.Clear;   ListarArquivos(edtDiretorio.Text, chkSub.Checked);   Edit1.Text := IntToStr( tamanhoTotal ); end; procedure TForm1.ListarArquivos(Diretorio: string; Sub:Boolean); var   F: TSearchRec;   Ret: Integer;   TempNome: string; begin   Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);   try     while Ret = 0 do ...

Alterar cores do PageControl (Delphi)

O padrão Windows todo cinza não é muito atraente, por isso quando nos utilizarmos do PageControl podemos alterar suas cores e fontes da seguinte maneira: Em primeiro lugar devemos alterar a propriedade OwnerDraw para TRUE ; Depois implementar seu método DrawTab da seguinte maneira: //pinta a fonte Control.Canvas.Font.Color:=clBlack; // // pinta a paleta / aba Control.Canvas.brush.Color:=clSkyBlue; PageControl1.Canvas.Rectangle(Rect); Control.Canvas.TextOut(Rect.left+5,Rect.top+3,PageControl1.Pages[tabindex].Caption); // pinta a parte interna (tabsheet) PageControl1.Pages[TabIndex].brush.Color := Control.Canvas.brush.Color; PageControl1.Pages[TabIndex].Repaint; Caso a intenção seja manter cada aba com seu próprio estilo basta adicionar um CASE filtrando o índice das abas: case TabIndex of   0: Control.Canvas.Font.Color:=clBlack;   1: Control.Canvas.Font.Color:=clWindow; ...