Novembro 2020
Atualmente a tecnologia, e por conseguinte a computação, permeia praticamente todas as atividades cotidianas. Com milhares de linguagens de programação, utilizando milhares de estruturas, sintaxe e semânticas diferentes para produzir milhares de algoritmos e programas diferentes, frequentemente nos parece uma tarefa hercúlea adquirir todo o conhecimento necessário para escrever programas eficientes, corretos e fáceis de compreender.
Apesar desse conhecimento ser vasto, é possível classificar esse conhecimento em programação ao atribuir um papel às variáveis usadas em um programa. Obviamente as variáveis em si tem pouco significado. O que a ideia do papel das variáveis preconiza é de que existe um certo número de objetivos, ou planos (ou papéis), que variáveis e certas estruturas podem atingir que, sozinhos ou compostos com outros papéis, solucionam uma grande parte dos problemas de programação (particularmente para iniciantes).
Pesquisa na área nos diz que é possível categorizar a maioria das variáveis em um programa em algum desses papéis e o conhecimento desses papéis pode facilitar grandemente a construção de soluções algorítmicas para problemas. Os papéis de variáveis mais comuns são:
Papel | Definição | Exemplo |
---|---|---|
Um valor fixo | Uma variável que mantém um determinado valor durante todo o programa | Armazenar o raio de um círculo |
Passo | Um item de dado sistematicamente passando por uma sucessão previsível de valores | Quantos passos um loop vai executar |
O detentor mais recente | Um item de dados contendo o valor mais recente que apareceu ao passar por um determinado grupo, ou simplesmente o último valor obtido como entrada | Uma variável que salva o valor de entrada usado para inicializar (preencher) um array. Essa solicitação de entrada é feita repetidamente ao usuário. |
O detentor mais procurado | Um item de dados contendo o melhor valor ou o valor mais apropriado até o momento. | Uma variável que armazena o menor valor dos dados de entrada contidos em um array. A cada passo da repetição a variável é comparada com o valor corrente e, portanto, seu valor muda se for menor do que o menor até agora. |
Coletor | Um item de dados para acumular todos os valores de outros valores | Uma variável que contém a soma de outras variáveis em uma repetição, e, portanto, seu valor muda após cada execução da repetição |
Seguidor | Um item de dados obtendo seu novo valor sempre a partir do valor antigo de alguma outra variável | Por exemplo, uma variável que aponta o elemento de dados antes daquele em processo ao percorrer um array |
Flag de sentido único | Um item de dados binário que não pode obter seu valor inicial de volta depois que seu valor foi alterado | Um exemplo típico é uma variável que indica se aparece algum número negativo entre as entradas. Assim que um valor negativo for encontrado, seu valor muda de estado e assim permanece até o fim da avaliação |
Temporário | Um item de dados que mantém algum valor por um período muito curto apenas | Um temporário é normalmente usado para trocar dois elementos de dados de um organizador. |
Organizador | Uma estrutura de dados que armazena elementos que podem ser reorganizados após a inicialização | Um array que pode ser ordenado |
Container | Uma estrutura de dados que armazena elementos que podem ser adicionados e removidos | Por exemplo, um array |
Iterador | Um item de dados atravessando uma estrutura de dados | Uma variável que atravessa todos os elementos do array |
Alguns desses papéis são muito simples e possuem representantes no próprio JavaScript:
const
ela já se torna um valor fixo, ou seja, uma constante.Outros podem ser facilmente adaptados com o uso de loops, Higher-order functions e condicionais.
Leiam atentamente as descrições acima de cada um dos papéis de variáveis.
Nesse caso é bem fácil, basta definir exemplos de valores constantes de vários tipos: inteiro, real, string, boolean, etc.
Podemos declarar uma constante em JavaScript utilizando o const
É possível redeclarar uma constante?
É possível redefinir uma constante?
Utilizando loops padrão é possível implementar um passo. Por exemplo, loops que se repetem 5 vezes, 10 vezes, 1000 vezes, etc. Escreva vários exemplos de uso.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Verifique se a sua solução está realmente contanto o número de passos corretamente!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Aqui a ideia é criar um array vazio e cada vez que o usuário inserir um novo elemento adicioná-lo ao array.
Você pode aproveitar essa REPL onde o botão de adicionar uma entrada já está pronto. Veja que todo o mais não está pronto! Você deve criar o código para ler uma entrada (do input HTML) e adicioná-la ao array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Você pode testar se o programa está funcionando mostrando no console o estado do array depois de cada inserção.
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com vários tipos de elementos e várias quantidades de elementos dentro de um array.
Você deve criar uma variável que vai armazenar o menor elemento do array. Veja que essa solução deve ser generalizável e funcionar para qualquer caso!
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Verifique se a variável contém o menor elemento ao fim da procura!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Verifique que deve existir uma variável contendo a soma ao fim do programa!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Imagine que ao percorrer um array, você queira guardar o valor do elemento imediatamente anterior no array. A cada passo da repetição o valor anterior é atualizado.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Devem existir duas variáveis: uma guardando o elemento atual e outra o anterior!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
A ideia é que a variável (flag) é inicializada com um determinado valor (na maioria dos casos, um valor booleano) e quando um elemento (neste caso, negativo) for encontrado o valor dessa flag é alterado (e.g., de false para true).
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Ao fim do programa deve existir uma variável que guarda (true ou false) se existem elementos negativos no array!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Por exemplo, você pode trocar os valores contidos na primeira e na última posição de um array.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Geralmente o papel temporário envolve o uso de uma variável temporária para "segurar" um valor durante uma troca.
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Ordenar um array utilizando HoF é muito simples.
Já utilizando loops nem um pouco: Você vai precisar combinar 3 papeis para implementar o Organizador: Temporário, Seguidor e Flag única. A flag é inicializada acreditando que o array já se encontra ordenado (. O seguidor verifica se o elemento atual é maior do que o anterior. Se não for, troca os dois elementos utilizando o Temporário e seta a flag para
False
. Se ao chegar ao último elemento a flag for False
repete todo o processo novamente: seta a flag para True
e começa a comparar todos os elementos. A ordenação só termina quando todos os elementos forem verificados e a flag continuar True
ao fim da verificação.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array em diferentes tipos de ordenação.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Você pode ter muitas combinações de valores!
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Essa é fácil: só treine declarar arrays :)
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.
Lembre-se que todas as HoF percorrem todos os elementos do array. Sugiro utilizar o map
para imprimir cada elemento do array no console.
Você pode criar exemplos com arrays já preenchidos, mas o conceito é imaginar que possa existir qualquer número de elementos dentro do array.
Escreva exemplos de teste com várias quantidades de elementos dentro de um array.
Será que o programa realmente atinge os objetivos propostos e soluciona o problema?
Você pode usar um visualizador de código para observar o comportamento do programa, ou simular várias execuções do mesmo em uma REPL.