Jornada Java (6 Part Series)
1 O início da jornada em Java
2 Mas o que diabos é Java?
… 2 more parts…
3 Exercício – Simulando Uma Conta Bancária Através Do Terminal
4 Mais sintaxe básica – Loops e Exceções
5 Desafio de Código 01 – Explorando Serviços de Telefonia
6 Desafio de Projeto 02 – Criando uma aplicação contadora
Ok, decidi que vou aprender Java. Me dediquei mais uma semana no bootcamp que selecionei e fiz anotações. Show. Ótimo.
Mas o que é Java, na real?
Confesso que escrever sobre isso faz com que eu me sinta um pouco bobo, porque a maior parte das pessoas que tem contato com programação tem uma ideia sobre o que é Java, mas vem comigo: O começo dessa viagem pode ser lento, mas prometo que vai ficar melhor mais pra frente.
Java é uma linguagem de alto nível, orientada a objetos, com tipagem forte e estática, que é compilada e interpretada.
Também é conhecida por ter o mascote mais horroroso do mundo.
Mas o que esse monte de palavras quer dizer na prática?
Ela ser orientada a objetos quer dizer que, além de seguir os pilares do paradigma, para qualquer coisa que queira fazer, é necessário definir uma classe.
Ou seja, para escrever o famoso Hello world
, em vez de fazer algo assim:
console.log("Hello world")
Enter fullscreen mode Exit fullscreen mode
É necessário fazer assim:
public class HelloWorld(){
public static void main(String[] args){
System.out.println("Hello world")
}
}
Enter fullscreen mode Exit fullscreen mode
Parece um contrassenso com o que eu disse no primeiro post, de economizar palavras sempre que possível — e é mesmo: uma das coisas que mais me incomodam no Java é essa verbosidade excessiva. Mas vamos ignorar isso por enquanto e focar nas coisas boas da linguagem: a definição de tipos e regras claras e estruturadas para o desenvolvimento.
Enquanto que as variáveis em linguagens com tipagem fraca e dinâmica podem ser alteradas ao bel prazer do desenvolvedor, no caso de linguagens com tipagem forte e estática as variáveis devem ter seus tipos definidos no ato da declaração, e não podem ter esse valor alterado durante o ciclo de vida do algoritmo. Por exemplo, enquanto que no JavaScript isso é perfeitamente válido:
let myString = "Hello";
myString = 10;
Enter fullscreen mode Exit fullscreen mode
Para declarar uma variável em Java, a sintaxe é essa:
String myString = "Henlo fren";
myString = 10 //Required type: String, Provided: int
Enter fullscreen mode Exit fullscreen mode
Esse tipo de alteração de tipos não é permitido e quando algo assim é feito, o compilador do Java reclama e aponta um erro. Esse tipo de verificação estática (o mesmo tipo de verificação que o TypeScript faz, por exemplo) é ótima porque salva o desenvolvedor de cometer erros que só seriam descobertos quando a aplicação estivesse rodando.
Mas o negócio de ser compilado e interpretado deu um nó na minha cabeça. Durante muito tempo eu tinha uma visão mais simples das coisas, que as linguagens se dividiam em “interpretadas” (como JavaScript e Python) e “compiladas” (como Java e C). Mas o lance do Java é que o código-fonte (ou seja, o que o dev escreve) é compilado para um código intermediário, que será lido por uma máquina virtual e interpretado, “traduzindo” para linguagem de máquina.
Mais ou menos isso aí.
Esse ciclo foi o que possibilitou o famoso slogan do Java Write Once, Run Everywhere (Escreva uma vez, rode em todos os lugares). A JVM (Java Virtual Machine) pode ser colocada em qualquer lugar para rodar programas em Java, como caixas eletrônicos, computadores de bordo e até em leitores de Blu-ray.
Mas claro que para poder estar presente em tantos dispositivos assim, o que o desenvolvedor escreve precisa estar bem padronizado para que o processo de compilação ocorra sem problemas — e essa é uma das características do Java: existem muitas regras e convenções que estão lá para tornar o código mais simples e limpo. Por exemplo, as classes precisam ser definidas dentro do diretório src
do projeto. O nome da classe precisa ser o mesmo nome do arquivo .java
. As variáveis e métodos devem seguir camelCase, mas os nomes de classe devem seguir PascalCase.
Muitas regrinhas que parecem bestas, mas quando somadas fazem com que tudo seja mais organizado.
Para fechar o módulo introdutório e sair só da teoria, foi passado um exercício: Criar uma classe para representar uma smart TV, com as seguintes características:
- Ela teve ter as propriedades
ligada
(boolean
),canal
(int
) evolume
(int
); - A TV deve poder ligar e desligar, alterando a propriedade
ligada
; - A TV poderá aumentar e diminuir o volume, em incrementos de 1;
- A TV poderá aumentar e diminuir o canal atual, em incrementos de 1 ou definir um número específico para o canal.
Essa classe (muito criativamente chamada de SmartTv
) deve ser definida em um arquivo SmartTv.java
. Não tenho muito o que falar sobre ela, é uma classe relativamente simples de entender.
/** * The SmartTv class represents a smart TV device. * It allows the user to control the power state, channel number, and volume of the TV. * * @author Lucas Nabesima * @version 1.0 * @since 31/07/2024 */
public class SmartTv {
private boolean isOn;
private int channelNumber;
private int volume;
public SmartTv() {
this.isOn = false;
this.channelNumber = 1;
this.volume = 1;
}
public void turnOn() {
System.out.println("TV is turning on...");
this.isOn = true;
System.out.println("TV is on.");
}
public void turnOff() {
System.out.println("TV is turning off...");
this.isOn = false;
System.out.println("TV is off.");
}
public void channelUp() {
this.channelNumber++;
System.out.println("Channel changed to: " + this.channelNumber);
}
public void channelDown() {
if (this.channelNumber <= 1) {
System.out.println("Can't lower channel number.");
return;
}
this.channelNumber--;
System.out.println("Channel changed to: " + this.channelNumber);
}
public void setChannelNumber(int channelNo) {
this.channelNumber = channelNo;
System.out.println("Channel changed to: " + this.channelNumber);
}
public void volumeUp() {
this.volume++;
System.out.println("Volume changed to: " + this.volume);
}
public void volumeDown() {
if (this.volume <= 0) {
System.out.println("Can't lower volume.");
return;
}
this.volume--;
System.out.println("Volume changed to: " + this.volume);
}
}
Enter fullscreen mode Exit fullscreen mode
“Ain Lucas o que são esses public
e void
?
public
é um modificador de acesso. Isso quer dizer que o que quer que esteja acompanhado por ele é público, então qualquer um pode passar a mão está acessível para outras classes e métodos. Outros modificadores incluem private
, que indica que somente aquela classe tem acesso e protected
. Nesse último caso, somente a classe e seus descendentes têm acesso.
Já o void
nesses métodos indicam que essas funções não tem retorno. Todos os métodos precisam ter uma anotação que informa qual o tipo de seu retorno. Pode ser um dos tipos primitivos da linguagem (int
, byte
, short
, long
, float
, double
, boolean
ou char
), pode ser void
indicando que aquele método não tem retorno, um objeto padrão (como String
) ou outra coisa completamente diferente — como um objeto definido pelo dev.
Para utilizar essa classe, basta instanciar no nosso método main
:
public class Main {
public static void main(String[] args) {
SmartTv tv = new SmartTv();
tv.turnOn();
tv.channelUp();
tv.channelDown();
tv.channelDown();
tv.volumeUp();
tv.volumeDown();
tv.volumeDown();
tv.volumeDown();
tv.setChannelNumber(13);
tv.turnOff();
}
}
Enter fullscreen mode Exit fullscreen mode
E o resultado será esse:
Até a semana que vem, com mais um módulo!
Jornada Java (6 Part Series)
1 O início da jornada em Java
2 Mas o que diabos é Java?
… 2 more parts…
3 Exercício – Simulando Uma Conta Bancária Através Do Terminal
4 Mais sintaxe básica – Loops e Exceções
5 Desafio de Código 01 – Explorando Serviços de Telefonia
6 Desafio de Projeto 02 – Criando uma aplicação contadora
暂无评论内容