Skip to content

Instantly share code, notes, and snippets.

@Ronnasayd
Last active May 10, 2024 20:38
Show Gist options
  • Save Ronnasayd/3b4f54e786ac882bc6bc233213b93c51 to your computer and use it in GitHub Desktop.
Save Ronnasayd/3b4f54e786ac882bc6bc233213b93c51 to your computer and use it in GitHub Desktop.
Conceitos fundamentais de linguagens de programação

Conceitos fundamentais de linguagens de programação

Este documento tem a intenção de apresentar alguns dos conceitos fundamentais que permeiam as linguagens de programação. A ideia é mostrar algumas das principais características e diferenças que existem entre elas, para que dessa forma você possa determinar em que momento é melhor escolher uma dada linguagem em detrimento das outras.

Tradução

Compilador

Uma linguagem compilada é aquela no qual um programa chamado compilador irá fazer uma análise sintática, léxica e semântica de toda a estrutura de um código fonte e o converterá em um novo formato conhecido como código objeto que poderá ser identificado pelo computador.

// Go é um exemplo de linguagem compilada
package main

func main(){
  println("Hello world!")
}

Interpretador

Em uma linguagem interpretada por outro lado a verificação e execução é feita a cada linha do código fonte.

# Python é um exemplo de linguagem interpretada
print("hello world!")

Tipagem

Estática

Linguagens com tipagem estática não permitem ao desenvolvedor alterar o tipo da variável depois de declarada. Geralmente a verificação de tipo é feita em tempo de compilação.

// Exemplo de código em Go
package main

func main() {
	var a int
	a = "Hello World!" // cannot use "Hello World!" (type untyped string) as type int in assignment
	println(a)
}

NOTA: A atribuição de uma string a uma variável que foi previamente declarada como inteiro resultará em um erro de compilação devido a Go ser uma linguagem estaticamente tipada.

Dinâmica

A tipagem dinâmica está ligado a habilidade da linguagem de programação em escolher o tipo de dado de acordo com o valor atribuído à variável em tempo de execução.

# Exemplor de código em python
a = 2
print(type(a)) #<class 'int'>

NOTA: Como python é uma linguagem dinamicamente tipada o tipo de dado é escolhido em tempo de execução pelo interpretador.

Fraca

A tipagem fraca está ligada a característica da linguagem de realizar conversões automaticamente entre tipos diferentes de dados.

// Exemplo de código em Javascript
var nome = "Elton Fonseca"; //string

var idade = 28; //number

console.log(nome + " " + idade); //Elton Fonseca 28

Forte

Linguagens fortemente tipadas não realizam conversões automaticamente.

# Exemplo de código em Python
nome = "Elton Fonseca" #str
idade = 28 #int

print(nome + " " + idade) #TypeError: can only concatenate str (not "int") to str

Funções

Funções de primeira classe (First Class Functions)

Entende-se que uma linguagem de programação tem Funções de primeira classe quando suas funções são tratadas como qualquer outra variável. Por exemplo, numa linguagem desse tipo, a função pode ser passada como argumento para outras funções, ser retornada por outra função e pode ser atribuída como um valor à uma variável.

# Exemplo de código em Python
maximum = max
maximum([2,3,4]) # 4
type(maximum) # <class 'builtin_function_or_method'>

Funções de alta ordem (High Order Functions)

Funções de alta ordem são funções que recebem outras funções como parâmetro e também podem retornar funções.

// Exemplo de código em Javascript
const array = [1, 2, 3, 4, 5];
array.filter((element) => element > 2); // [3,4,5]

Parâmetros

Valor

Na passagem por valor é passada uma cópia do valor da variável.

# Exemplo de código em python
def changeValue(x): # x é uma cópia do valor
  x = 2

y = 3
changeValue(y)
print(y) # 3

Referência

Na passagem por referência é passada uma referência a própria variável.

// Exemplo de código em Go
package main

func changeValue(x *int) {
	*x = 2
}
func main() {
	y := 3
	changeValue(&y)
	println(y) // 2
}

Paradigmas

Paradigma é um conceito das ciências e da epistemologia (a teoria do conhecimento) que define um exemplo típico ou modelo de algo. É a representação de um padrão a ser seguido.

Estruturada

O paradigma de programação estruturada define que o código deve ser construído a partir de estruturas de fluxo básicas, sendo estas:

  • Sequência: Cada trecho é executado após o outro.
  • Decisão: Após um teste lógico é escolhido que trecho de código será executado.
  • Interação: A partir do teste lógico, um trecho do código pode ser repetido finitas vezes.
// Exemplo de código estruturado em Go
package main

func main() {
	var listaDeIdades = []int{18, 17, 21, 16, 34}
	for _, idade := range listaDeIdades {
		if idade >= 18 {
			println("É maior de idade!")
		}else{
			println("É menor de idade!")
		}
	}
}

NOTA: Na programação estruturada, um programa é tipicamente escrito em uma única rotina (ou função) podendo, é claro, ser quebrado em subrotinas. Mas o fluxo do programa continua o mesmo, como se pudéssemos copiar e colar o código das subrotinas diretamente nas rotinas que as chamam, de tal forma que, no final, só haja uma grande rotina que execute todo o programa.

Orientada a Objetos

A programação orientada a objetos (POO) é ​​um paradigma de programação baseado no conceito de "objetos", que podem conter dados na forma de campos (geralmente conhecidos como atributos ou propriedades) e código, na forma de procedimentos (freqüentemente conhecido como métodos).

As linguagens POO mais populares são baseadas em classes, o que significa que os objetos são instâncias de classes.

O intuito da sua criação foi o de aproximar o manuseio das estruturas de um programa ao manuseio das coisas do mundo real.

# Exemplo de código em python
class Cachorro:
	patas = 4
	nariz = 1
	olhos = 2
	boca = 1

	def latir(self):
		print("Au Au")

doguinho = Cachorro()
doguinho.latir() # Au Au

Procedural

A programação procedural é um paradigma de programação, baseado no conceito de chamadas de procedimentos. Os procedimentos (um tipo de rotina ou sub-rotina) simplesmente contêm uma série de etapas computacionais a serem realizadas. Qualquer procedimento pode ser chamado a qualquer momento durante a execução de um programa, incluindo por outros procedimentos ou por ele mesmo.

NOTA: Uma rotina/sub-rotina é uma sequência de instruções para executar uma tarefa específica, empacotada em forma de unidade. Esta unidade pode então ser usada onde quer que se faça necessária. As sub-rotinas podem ser definidas internamente ou separadamente em bibliotecas. Em diferentes linguagens de programação, uma sub-rotina pode ser chamada de rotina, subprograma, função, método ou procedimento.

Funcional

A programação funcional é um paradigma de programação em que os programas são construídos aplicando e compondo funções. É um paradigma de programação declarativo no qual as definições de função são árvores de expressões em que cada uma retorna um valor, em vez de uma sequência de instruções imperativas que mudam o estado do programa.

Na programação funcional, as funções são tratadas como funções de primeira classe, o que significa que podem ser vinculadas a nomes (incluindo identificadores locais), passados ​​como argumentos e retornados de outras funções, assim como qualquer outro tipo de dados pode. Isso permite que os programas sejam escritos em um estilo declarativo e combinável, onde pequenas funções são combinadas de maneira modular.

# Exemplo de código em python
# y = (x+2)*(x+3)

(lambda x: (lambda x: x + 2)(x)*(lambda x: x + 3)(x))(2) # 20

Imperativa

programação imperativa é um paradigma de programação que descreve a computação como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar.

O nome do paradigma, Imperativo, está ligado ao tempo verbal imperativo, onde o programador diz ao computador: faça isso, depois isso, depois aquilo... Este paradigma de programação se destaca pela simplicidade, uma vez que todo ser humano, ao se programar, o faz imperativamente, baseado na ideia de ações e estados, quase como um programa de computador.

Declarativa

A programação declarativa é um estilo de programação não imperativa, na qual os programas descrevem os resultados desejados sem listar explicitamente os comandos ou etapas que devem ser executados (Fluxo de controle). Linguagens de programação funcionais e lógicas são caracterizadas por um estilo de programação declarativa.

-- Exemplo de Código SQL
SELECT nome from Pessoas
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment