Introdução à programação e aos algoritmos
2.5 Pseudocódigo
A ideia aqui é usar uma linguagem mais formal, mas sem o rigor de uma linguagem de programação real. Podemos usar algo próximo ao português, escolhendo poucas palavras que indicam comandos simples e diretos, como nas linguagens formais de programação. Alguns chamam isso de “portugol”, um português algorítmico. Este nome é derivado de uma das primeiras linguagens de programação, a Algol (ALGOrithmic Language), hoje abandonada, que deu origem à sintaxe de diversas linguagens de programação atuais. Pessoalmente não gosto da palavra portugol, prefiro chamar de pseudocódigo. Fica ao gosto de leitor usar qualquer dos nomes, o importante é saber sobre o que estamos falando. No decorrer do livro usarei apenas pseudocódigo.
O algoritmo de busca de palavras apresentado na Seção 2.3 é um exemplo de pseudocódigo,
apesar de ainda não estar formalizado.
Uma vez escolhido o formato de apresentação de algoritmos, vamos definir quais tipos de
abstrações o algoritmo deve processar.
2.6 IDENTIFICADORES
Vamos começar com um problema numérico simples. Digamos que você precise fazer um programa que calcule a área de um triângulo. Você sabe a fórmula. Para calcular a área de um triângulo você precisa do valor de sua base e de sua altura. Com estes dados, você é capaz de calcular a área.
Isso nos leva ao primeiro conceito importante.
Um algoritmo manipula dados, ou seja, informações, mas devemos formalizar como é possível
representar uma informação no seu algoritmo. Lembre-se de que eu disse que dados são abstrações. Você é quem deve dizer ao computador o que essas abstrações significam. Cada dado manipulado será representado por um nome que chamamos de identificador. Assim, um identificador é um nome que identifica de forma inequívoca as abstrações que você cria dentro de um algoritmo.
Figura 2.4 Cálculo da área de um triângulo.
Todo objeto manipulado por seu programa, ou seja, todas as abstrações que você criar, precisam
possuir um identificador único. Esses objetos podem ser variáveis, constantes, funções e até mesmo o próprio algoritmo.
Variáveis são entidades que armazenam dados e esses dados podem mudar de valor durante a
execução de um programa. A cada instante uma variável só pode assumir um valor.
Constantes, como o nome indica, são entidades que não mudam de valor durante a execução do
algoritmo. Por exemplo, para calcular a área de um círculo você deve criar uma constante com o valor de p.
Os novatos têm sempre a tentação de escolher nomes para os identificadores com apenas uma
letra. Dessa forma, as variáveis são chamadas a, b, c, x, y.... Essa não é uma boa prática. Os identificadores devem ser escolhidos de maneira que representem a função que os objetos desempenham no programa. Veja o exemplo seguinte de uma expressão aritmética.
Na expressão da equação 2.1, o símbolo d significa que o valor do cálculo da expressão à direita
será atribuído à variável à esquerda. A forma geral de uma atribuição é:
em que identificador é um nome de variável, e expressão é um valor literal, um cálculo, uma chamada a funções ou qualquer combinação desses elementos que você possa imaginar.
O que essa expressão e esses nomes significam? Nesse caso, os nomes das variáveis não têm
muito significado, são apenas letras. Sabemos que atribuímos à variável a o valor da divisão por 2 do resultado da multiplicação de b por c. Fora do contexto do cálculo da área do triângulo, esses nomes dizem muito pouco. Mas, e se escrevêssemos a mesma expressão com outros nomes de variáveis?
Agora tudo mudou! É verdade que escrevemos bem mais, porém nossa compreensão do que esta
expressão representa aumentou consideravelmente. Para qualquer pessoa que leia esta expressão, mesmo fora de contexto, fica evidente que a expressão faz o cálculo da área de um triângulo, e mais, sabemos exatamente como esse cálculo é feito a partir da base e da altura do triângulo.
Como estamos limitados aos caracteres ASCII, alguns símbolos não poderão ser digitados no
teclado do seu computador. Portanto, devemos fazer algumas simplificações na equação 2.3 para podermos digitar: o símbolo de atribuição d será substituído pelo símbolo de igual (=), o símbolo de multiplicação × pelo asterisco (*), e o símbolo de divisão ÷ pela barra inclinada (/), de modo que a equação fique assim:
Com relação aos nomes usados pelos identificadores, na verdade, o mais importante é que você
escolha nomes que sejam compreensíveis e fáceis de ler. Isto não necessariamente implica um nome grande e completo. Você pode usar nomes mais curtos, desde que seu significado seja evidente dentro do contexto de seu programa. Assim, a expressão acima seria muito bem substituída pela expressão mais sucinta:
areaTriang = (base* altura) / 2.
Podemos perceber algumas características que diferenciam este nome das palavras em português.
A primeira característica evidente é que juntamos as palavras. Quando definimos identificadores não podemos usar espaços em branco. Seria confuso decifrar se uma sequência de palavras representa uma ou diversas variáveis.
Também não usamos acentuação. A maioria das linguagens de computador trabalha com um
conjunto limitado de caracteres, a partir da tabela ASCII (veja Seção 1.7). O conjunto de caracteres ASCII não possui caracteres acentuados nem cedilha; por isso ficamos limitados na nossa escolha de nomes.
Algumas regras devem ser, portanto, respeitadas no momento da escolha de nomes usados pelos
identificadores para um algoritmo ou programa:
1. O nome de uma variável pode conter letras maiúsculas ou minúsculas, números e alguns símbolos. 2. Não pode começar com número.
Não pode conter espaços ou símbolos que possam representar uma operação sobre os dados.
3. Alguns símbolos são permitidos, porém algumas linguagens reservam certos símbolos e deste
modo você não deve usá-los nos nomes de variáveis.
Alguns exemplos de nomes válidos:
1. base
2. altura
3. _altura
4. altura1
5. parede3lados
6. parede_reta
7. ParedeReta04
Os seguintes nomes não seriam válidos como identificadores:
1. 3base (começa com dígito)
2. altura principal (espaço em branco no meio do nome) 3. altura1+ (usa sinal de operação)
4. triângulo (usa caractere acentuado)
Dica 2.5 – Uma atribuição não é o mesmo que a igualdade na Matemática.
Você está acostumado a usar o símbolo de igualdade em expressões matemáticas. Em um algoritmo ou programa de computador,
o funcionamento do símbolo = é diferente. Por exemplo, você pode se deparar com uma expressão do tipo:
x = x + 1
Se fosse uma expressão matemática, fazendo as manipulações algébricas comuns, você chegaria à conclusão absurda de que
0 = 1! Não é este o caso. Em um programa, o símbolo de igualdade signi ca uma atribuição da expressão que está do lado direito à
variável que está do lado esquerdo.
Na expressão acima, devemos compreender o x do lado direito como o valor de x no momento atual de execução do
programa, e o x da esquerda como o valor que este vai assumir depois de feito o cálculo da expressão da direita. Assim, se o valor
de x fosse 5 no momento anterior à execução, após o cálculo seu valor passaria a ser 6.
Para você se acostumar com este tipo de notação, em vez de ler a expressão “x = x + 1” como se fosse uma expressão
matemática (“xis é igual a xis mais um”), leia o comando do algoritmo como “xis recebe o valor de xis mais um”. Isto irá ajudá-lo a
não confundir expressões computacionais com expressões matemáticas.
Dica 2.6 – Facilite a leitura, não a escrita.
Você escreve um programa uma vez, mas o programa será lido diversas vezes. Em vez de facilitar a escrita de programas, pense em
facilitar sua leitura. Além das regras citadas anteriormente, podemos seguir algumas convenções que facilitarão a leitura de
programas.
O que você acha do seguinte nome de variável?
umnomedevariavellongoedificildeler
e se o nome fosse:
umNomeDeVariavelLongoMasFacilDeLer
ou talvez:
um_nome_de_variavel_longo_mas_facil_de_ler
Há diversas maneiras de se escrever o nome de uma variável para torná-lo mais fácil de ler. Com
um nome composto, você pode separar cada palavra pelo caractere sublinha, ou pode usar a chamada notação camel case. O nome vem do inglês e faz uma analogia com a corcova do camelo, cada letra maiúscula lembrando uma corcova. Aparentemente o pessoal da Computação gosta de animais: a convenção de usar sublinhas para separar palavras é chamada de snake case, uma analogia com cobras. O camel case pode ser usado de duas formas, com a primeira letra do nome minúscula, quando é chamado de lowerCamelCase, ou maiúscula, quando é chamado de UpperCamelCase. A
Tabela 2.2 resume esses métodos.
Tabela 2.2 Tipos de convenções para nomes
Nome Exemplo
lowerCamelCase umNomeComposto
UpperCamelCase UmNomeComposto
snake um_nome_composto
Alguns nomes de variáveis não estão errados, mas como algumas linguagens de programação vão
usá-los para fins especiais, devemos evitá-los. Como estamos escrevendo em português, dificilmente um nome que você escolha será algum nome reservado pelas linguagens de programação, pois a quase totalidade baseia-se no inglês. Também é preciso ler a especificação da linguagem para saber quais caracteres não são permitidos em nomes de variáveis.
Dica 2.7 – Seja coerente.