Pensamento Computacional 1 - Introdução ao Jshell - Expressões com operadores relacionais e lógicos

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

O jshell

O que é o jshell

Executando o jshell no Codespace

  1. Criar uma conta grátis no github
  2. Acessar o link de repositório preparado pelo Prof.Emerson Mello:
  3. Criar um Codespace a partir do repositório do Prof.Emerson:

Uma ALTERNATIVA ao Codespace é executar o jshell no terminal do Linux.

Fazendo os primeiros snippets com o jshell

  1. No Codespace do Java, ir no prompt do terminal e chamar o jshell:
    PensamentoComputacional-PromptShell.png
  2. No ambiente do jshell faça os seus primeiros snippets:
    jshell> 3+6
    $1 ==> 9
    
    jshell> 2+9
    $2 ==> 11
    

    Em computação, o termo snippet se refere a pedaços de código de programação inseridos em um determinado local/arquivo. No jshell são códigos em Java que pode ser colocados de forma iterativa: o programador insere o código e ele já se executa de imediato. No exemplo acima o comando 3+6 foi inserido, executado e o valor resultante da expressão foi colocado em uma variável $1. Da mesma forma, 2+9 foi inserido e executado e o resultado foi colocado em uma variável $2. Observe que o jshell informa o conteúdo destas variáveis.

  3. Entre com um comando para o jshell listar os snippets. Notar que a "barra" informa que o que se segue é um comando para o jshell. Os snippets são enumerados (id do snippet) e mostrados:
    jshell> /list
    
       1 : 3+6
       2 : 2+9
    
  4. Removendo snippets: remova o primeiro snippet colocado e liste novamente:
    jshell> /drop 1
    |  dropped variable $1
    
    jshell> /list
    
       2 : 2+9
    
  5. Resetando o ambiente (zerando tudo) e saindo do jshell.
    jshell> 7*3
    $3 ==> 21
    jshell> /list
    
       2 : 2+9
       3 : 7*3
    
    jshell> /reset
    |  Resetting state.
    
    jshell> /list
    
    jshell>
    
    jshell> /exit
    

Expressões com Operadores Relacionais no Java

Os operadores relacionais permitem computar o resultado de uma relação de grandeza entre dois operandos. O resultado da expressão resulta em um valor booleano (true ou false). Os operadores possíveis são listados abaixo.

Operadores Relacionais
Operador Significado
> maior que
>= maior ou igual que
< menor que
<= menor ou igual que
== igual a (se o operando a esquerda é igual ao da direita)
!= diferente de (se o operando a esquerda é diferente do da direita)

O Jshell é interessante para testar o resultado destas expressões. Vamos a uma sequência de exemplos para "treinar" o uso destes operadores usando o Jshell.

  1. jshell> int varA, varB;
    varA ==> 0
    varB ==> 0
    
    jshell> varA = 5;
    varA ==> 5
    
    jshell> varB = 6;
    varB ==> 6
    
    jshell> boolean varRes;
    varRes ==> false
    
    jshell> //computação de uma expressão com operadores relacionais
    
    jshell> varRes = varB > varA;
    varRes ==> true
    
  2. jshell> varRes = varA == 5;
    varRes ==> true
    
  3. jshell> varA
    varA ==> 5
    
    jshell> varB
    varB ==> 5
    
    jshell> varB = 100
    varB ==> 100
    
    jshell> varA = 2
    varA ==> 2
    
    jshell> varB = 100
    varB ==> 100
    
    jshell> varRes = 100 * varA > varB
    varRes ==> true
    
    jshell> varRes = 10 * varA > varB
    varRes ==> false
    

Algumas observações sobre o código inserido no jshell:

  • Não é necessário colocar o ponto e vírgula no final do comando;
  • Para ver o valor de uma variável basta entrar com o nome da variável e teclar ENTER
  • O operador relacional tem PRECEDÊNCIA sobre o operador de atribuição e sobre o operador de multiplicação. Por isso, nos exemplos acima não foi colocado parênteses. POr questões de clareza é interessante colocar os parênteses.

Expressões com Operadores Lógicos no Java

Estes operadores se aplicam a dois operandos ( a esquerda e a direita). Veja a tabela dos operadores possíves:

Operadores Lógicos
Operador Significado
&& AND (E)
|| OR (OU)
!e NOT (NÃO)

Vamos a uma sequência de exemplos para "treinar" o uso destes operadores usando o Jshell.

  1. jshell> int varA, varB, varC, varD;
    varA ==> 0
    varB ==> 0
    varC ==> 0
    varD ==> 0
    
    jshell> varA = 7
    varA ==> 7
    
    jshell> varB = 8
    varB ==> 8
    
    jshell> varC = 3
    varC ==> 3
    
    jshell> varD = 1
    varD ==> 1
    
    jshell> boolean varRes;
    varRes ==> false
    
    jshell> varRes = (varA > varB) && (varC > varD)
    varRes ==> false
    
    jshell> varRes = (varB > varA) && (varC > varD)
    varRes ==> true
    
    jshell> varRes = (varB > varA) && (varC < varD)
    varRes ==> false
    
    jshell> varRes = (varB > varA)|| (varC < varD)
    varRes ==> true
    
  2. jshell> varRes = ! (varB > varA)
    varRes ==> false
    
    <syntaxhighlight lang=shell >
    jshell> varRes = ! varRes && (varB > varA)
    varRes ==> true
    

EXERCÍCIO

Para cada uma das expressões abaixo escreva snippets no jshell e confira a solução "teorica" em relação a prática.

Expressões com operadores relacionais e lógicos
Expressão A B C D Valor
(A>B) E (C>D) 10 8 20 15
(A>B) E (C>D) 10 12 15 15
(A<=B) OU (C>10) 5 5 3 5
(A<=B) OU ((C==D) E (D<A)) 3 10 4 4
(A==B) OU (C==D) 3 1 4 4
((A==B) E (B<30)) OU (C>=D) 5 5 10 5

Criando "programas" (sequências de snippets) no jshell

  • Vamos implementar o algoritmo para cálculo de média de 2 números, conforme abaixo:
    ALGORITMO MEDIA
    VARIAVEIS
       NUM1: INTEIRO
       NUM2: INTEIRO
       MEDIA: REAL
    INICIO
       LER NUM1
       LER NUM2
       MEDIA <- (NUM1+NUM2)/2
       MOSTRAR MEDIA
    FIM
    
  • Coloque as instruções uma após a outra, colocando ENTER no final. Observe como as instruções são executadas uma após a outra:
    jshell> int num1,num2;
    num1 ==> 0
    num2 ==> 0
    
    jshell> double media;
    media ==> 0.0
    
    jshell> num1 = 5;
    num1 ==> 5
    
    jshell> num2 = 7;
    num2 ==> 7
    
    jshell> media = (num1 + num2)/2;
    media ==> 6.0
    
    jshell> media
    media ==> 6.0
    
    jshell> /list
    
       1 : int num1,num2;
       2 : int num1,num2;
       3 : double media;
       4 : num1 = 5;
       5 : num2 = 7;
       6 : media = (num1 + num2)/2;
       7 : media
    
    jshell>
    

    Algumas considerações: A leitura de valores para variáveis foi substituída por uma atribuição simples a variável, já que a introdução de comandos é interativa. Da mesma forma, o valor da variável "media" foi simplesmente mostrado usando o nome da variável.