Olá pessoas ... e bots.
Embora na primeira parte desse tutorial tenha focado apenas em conceitos, é preciso ter um pouco de prática para fixar os conteúdos e entendê-los corretamente.
Vale ressaltar que as linguagens de programação são feitas à partir do inglês (como quase tudo em TI), portanto todos os códigos exibidos terão comentários em inglês, apenas com explicação das partes mais relevantes em português apoś os códigos – portanto você pode perder parte do conteúdo se não souber inglês de antemão.
Para praticar programação é preciso ter ferramentas adequadas, então não poderia começar sem citar a ferramenta que considero a mais adequada para iniciantes.
Ideone
Um certo meme que circulou bastante ano passado dizia que "problemas modernos exigem soluções modernas", vou além: tempos modernos exigem ferramentas modernas. Justamente por isso recomendo essa IDE online perfeita para softwares simples - especialmente para treinar programação - que é compatível com uma extensa lista de linguagens de programação, permite uso sem nenhum cadastro (embora você possa se cadastrar para manter as coisas mais organizadas) e torna tão fácil compartilhar código-fonte quanto é compartilhar um documento no Google Drive.
Então, caso não queira passar por todo o processo de instalar o JDK em seu computador e também um editor/IDE para Java, comece a usar uma ferramenta do século 21 para estudar:
TI Livre
Cada parte do tutorial, incluindo essa, será publicada junto com uma apresentação de slides - ambos com o conteúdo de um capítulo da apostila online. Entretanto mais formatos podem ser adicionados no futuro.
Sendo um projeto Livre, você pode usar e compartilhar à vontade, só lembre de dar créditos quando o fizer.
Mão na massa
Ver no Github Gist
Ver no Ideone
Esse exemplo será explicado passo a passo nos tópicos desta parte, não se preocupe se não entendeu tudo de cara.
Pacotes, classes e objetos
A instrução import permite acessar um item dentro de um pacote (como é o caso o exemplo) ou o pacote inteiro (o que não é recomendável, por razões de desempenho). No caso informamos ao compilador Java que iremos acessar a classe Arrays contida no pacote utils, que por sua vez está contido no pacote java; utilizando vírgulas para separar cada parte do caminho. Como a classe Arrays é uma extensão da linguagem (não faz parte das funcionalidades essenciais do Java), é obrigatório importar ela em todo arquivo onde for usada.
A próxima coisa a ser notada é a declaração de classe na terceira linha: public class Main. Começando pelo fim da linha, é fácil notar vendo o código que as chaves, “{“ na terceira linha e “}” na última, delimitam um bloco de código – o bloco de código da classe.
Main é o nome da classe em si, um nome normalmente usado para exemplos simples de programação (como é o caso) por ser comum chamar o arquivo principal de um projeto de Main – e em Java o arquivo que define uma classe deve ter o mesmo nome dela. A palavra-chave class indica o tipo de unidade de código que estamos declarando: uma classe. Já palavra-chave public será bem explicada na próxima parte, por hora é suficiente saber ela que permite que qualquer classe ou objeto acesse um recurso – incluindo a própria plataforma Java.
O próximo ponto a se destacar vem nas linhas 9 e 19: métodos. Como foi citado antes, os métodos são as funcionalidades contidas em um objeto, entretanto também é possível declarar métodos em classes (através da palavra-chave static), permitindo o utilizar um valor ou funcionalidade sem criar um objeto à partir da classe - exatamente como o método de entrada do programa, main, é chamado pelo Java e como chamamos o método IntAverage no programa.
Após public e static, que serão melhor explicados posteriormente, temos as partes principais da declaração de um método: tipo de retorno, seu nome, seus parâmetros e seu bloco de código – que faz o ele funcionar. Juntos, o nome e os parâmetros de um método são chamados de assinatura: o que distingue um método de outros para o Java.
Tipo de retorno indica que tipo de dados um método/função irá retornar para quem o chama. Ele pode ser um tipo primitivo, o nome de uma classe (para retornar objetos) ou void - o qual indica que nenhum valor será retornado. Após o nome do método são declarados, entre parênteses, seus parâmetros – isto é, valores que devem ser passados para chamar o método (também entre parênteses). Como essas informações estão registradas no próprio código do programa em tempo de compilação, fica fácil encontrar erros ao declarar ou chamar métodos sem precisar sequer executar o programa – o próprio compilador avisa o que há de errado.
Um bom exemplo de quanto isso pode ser útil é o próprio método de entrada da aplicação: ele deve sempre permitir ser chamado por qualquer um (public), pertencer à classe do programa (static), não retornar nenhum valor (void), ter o nome main e receber como parâmetro um vetor de strings (String[]). Qualquer desvio disso gerará uma mensagem de erro no compilador, que apontará qual é o problema.
Embora isso possa passar batido no exemplo para iniciantes, é bom notar que estamos usando objetos no código de duas formas diferentes:
-
Tipo String
Como ressaltado no tópico sobre tipos primitivos, String são objetos no Java – logo temos um vetor de objetos como parâmetro do método main -
System.out
Objeto da classe PrintStream que, por padrão, mostra no console o que for passado de parâmetro para método println()
Variáveis
Note que como é opcional dar valor às variáveis, essa parte da sintaxe foi colocada entre colchetes – um padrão bastante usado nas documentações técnicas de ferramentas e linguagens programação.
Operadores e conversões
-
Matemáticos
- (+) soma
- (-) subtração
- (/) divisão
- (--) decremento
- (=) Atribuição
-
Comparativos
- (>) maior que
- (+) Concatenação de strings
Matemáticos
- (+) Soma
- (-) Subtração
- (*) Multiplicação
- (/) Divisão
- (%) Módulo
Resto da divisão - (++) Incremento
Aumenta valor em 1 - (--) Decremento
Diminui valor em 1
Operadores de Atribuição
- (=) Atribuição
- (+=) Soma e Atribuição
- (-=) Subtração e Atribuição
- (*=) Multiplicação e Atribuição
- (/=) Divisão e Atribuição
- (%=) Módulo e Atribuição
Operadores Lógicos
- (&&) E
- (||) OU
- (!) Negação
Operadores Comparativos
- (==) Igual a
- (!=) Diferente de
- (<) Menor que
- (>) Maior que
- (<=) Menor ou igual
- (>=) Maior ou igual
Com exceção da atribuição pura, os operadores de atribuição servem como uma forma rápida de escrever expressões matemáticas. A soma no exemplo seria assim somente com atribuição simples:
Result = Result + Numbers[Index];
Conversão de tipos
Na última linha de IntAverage, com a instrução return (nome auto-explicativo) podemos ver uma coisa bem interessante: conversão de tipo, passando o resultado da conta que a segue para inteiro – o exato tipo de retorno do método. Como destacado por comentário no código, a conversão de tipo (em inglês type casting) double para int já arredonda o resultado automaticamente.Esse é um recurso importante do Java, pois além de permitir passar valores para outros tipos primitivos (quando o valor está dentro dos limites do tipo para o qual será convertido), também permite representar objetos de maneiras diferentes conforme necessário – outro ponto que será melhor abordado mais para a frente.
Documentação
Cabe ressaltar que além de gerar documentação técnica de forma padronizada, comentários em formato Javadoc também são bastante usados por editores modernos e IDEs para dar dicas e sugestões ao programador enquanto ele edita o código do software, ajudando a economizar tempo e agilizar o desenvolvimento consideravelmente.
Comentários
Postar um comentário