Conceito de Linguagens de Programação - 1 Arthur Jovita, Thalles Silva November 1, 2011
1 Natureza das linguagens de Programação Linguagens Estáticas e Dinâmicas 2 Tipificação 3 4
Linguagens Estáticas e Dinâmicas Uma linguagem de programação é uma linguagem que possui sintaxe (formato) e semântica (significado), e é usada para expressar uma sequência de ações computacionais que formam um programa.
Linguagens Estáticas e Dinâmicas Linguagens Estáticas e Dinâmicas As linguagens de programação podem ser classificadas de acordo com o tipo de sistema que elas usam, ele define como são os métodos e as variáveis da linguagem. Em uma linguagem de tipo estático, o compilador deve conhecer o tipo de uma variável ou método antes da execução do programa (por isso, o tipo de uma variável normalmente é explicitamente declarado). Em uma linguagem de tipo dinâmico, tipo de uma variável ou método é desconhecido até a execução do programa.
Linguagens Estáticas e Dinâmicas Exemplos de linguagens de tipo estático: Java, Pascal, C, C# e C++. Exemplos de linguagens de tipo dinâmico: Python, Javascript, Perl e Ruby.
Linguagens Estáticas e Dinâmicas
Tipificação Natureza das linguagens de Programação Tipificação A definição de fortemente ou fracamente tipada tem relação com quão profundamente um sistema verifica as operações que podem ser feitas sobre uma estrutura de dados.
Tipificação Em linguagens fortemente tipadas: as operações são aplicadas para estruturas de dados bem definidas e cada operação define os tipos de dados que deve receber. tendem a ter mais código para suas aplicações e sua curva de aprendizado pode ser maior. o compilador tem garantias sobre o comportamento do programa.
Tipificação Em linguagens fracamente tipadas: As operações são aplicadas para qualquer estrutura de dados, porém essas operações podem falhar em tempo de execução caso a estrutura não suporte a operação. São mais simples em sua implementação, porém é mais difícil encontrar o erro. o compilador não tem garantia sobre o comportamento do programa porque uma estrutura de dados pode receber novas funcionalidades em tempo de execução.
Tipificação Em Java: float soma(float a, int b) { return a + b; } Os tipos de dados que a operação soma suporta estão bem definidos: a é float e b é int e o tipo de dado que a operação devolve também é definido float.
Tipificação Em Ruby: def soma (a, b) return a + b end A função soma pode receber quaisquer tipos de dados para a e b, e a operação será aplicada sobre esses tipos, devolvendo um resultado de tipo desconhecido: Se a e b forem String, o resultado será uma String concatenada de a e b; Se a e b forem inteiros, o resultado será um inteiro que representa a soma a+b; Se a for um float e b um inteiro, o resultado será um float que representa a soma a+b.
Tipificação Vale a pena observar que em linguagens fracamente tipadas, a possibilidade de erros em tempo de execução é muito maior. Por isso, é muito recomendável o uso de testes para verificar erros antes de colocar um sistema em produção. Exemplos de linguagens fortemente tipadas: Java, Pascal, C e C++. Exemplos de linguagens fracamente tipadas: Perl e Ruby.
Listas Natureza das linguagens de Programação Em Haskell, listas são estruturas de dados homogêneas. Ou seja, podemos ter uma lista com inteiros ou uma lista de caracteres, porém não podemos ter uma lista com inteiros e alguns caracteres. Por exemplo:
Como você pode ver, listas são caracterizadas por utilizar colchetes e os valores nas listas são separados por vírgulas. Se nós tentarmos uma lista como [1,2, a,3, b, c,4], o Haskell irá reclamar que os caracteres (que são, alias, demarcados entre aspas simples) não são números.
Falando em caracteres, strings são simplesmente listas de caracteres. hello é só um açúcar sintático para [ h, e, l, l, o ]. Como strings são listas, nós podemos utilizar funções de listas nelas, o que é realmente útil. Uma prática comum é colocar duas listas juntas. Fazemos isso utilizando o operador ++, que concatena valores no final da lista.
Observe que o : recebe um número e uma lista de números ou um caractere e uma lista de caracteres, enquanto o ++ recebe duas listas. Mesmo que você esteja adicionando um elemento ao final de uma lista com ++, você terá que demarcá-la com colchetes para que se torne lista. Utilizando o operador : (também chamado de contra operador) Nota: [], [ [] ] e [ [], [], [] ] são coisas diferentes. O primeiro é uma lista vazia, o segundo é uma lista que contém uma lista vazia, o terceiro é uma lista que contém três listas vazias.
Se você deseja obter um elemento de uma lista pelo seu índice, utilize!!. O índice inicia a partir de 0.
Listas também podem conter listas. Elas também podem conter listas que contêm listas que contêm listas...
O que mais você pode fazer com listas? Abaixo seguem outras funções para manipulação de listas: head recebe uma lista e retorna o cabeça de lista tail recebe uma lista e retorna a sua cauda. last recebe uma lista e retorna o seu último elemento. init recebe uma lista e retorna tudo com exceção do último elemento.
r Natureza das linguagens de Programação
Agora usaremos o GHCI para descobrir os tipos de algumas expressões. Faremos isso usando o comando :t que, seguido de qualquer expressão válida, retorna o seu tipo. Vamos dar uma olhada.
Sebesta, Robert W Conceitos de Linguagem de Programação. Editora Bookman, Porto Alegre: 2000