segunda-feira, 4 de novembro de 2024

UEFN Verse: Operadores

Operadores são símbolos que representam operações aritméticas, relacionais ou lógicas.


  • Operadores Aritméticos

Os operadores aritméticos efetuam operações matemáticas entre dois valores.

Estes são os principais operadores aritméticos:

Operador Operação
+ Adição
- Subtração
* Multiplicação
/ Divisão


A linha abaixo mostra um exemplo de uso de um operador aritmético. Considere que Damage, AttackHit e ShieldLevel são variáveis. O valor de AttackHit é subtraído pelo valor de ShieldLevel. O resultado é armazenado na variável Damage:

set Damage = AttackHit - ShieldLevel


Os operadores aritméticos podem ser combinados com o operador de atribuição para modificar o valor de uma variável.

Por exemplo, na expressão abaixo, estamos somando o valor inicial da variável Damage com o valor da variável DamageAmplifier e armazenando o resultado na variável Damage:

set Damage = Damage + DamageAmplifier


Esta mesma expressão pode ser reescrita usando o operador += desta forma:

set Damage += DamageAmplifier


Nota 1: Na linguagem Verse existem expressões falíveis. Isto significa que a expressão precisa ser executada em um contexto de falha, como a expressão if.

Nota 2: A divisão entre números inteiros é falível. É preciso usar a função Floor() para obter a parte inteira do resultado ou a função Ceil() para arredondar o resultado para cima.

Nota 3: A linguagem Verse não possui o operador % (módulo) usado para obter o resto de uma divisão entre números inteiros. No lugar você pode usar a função Mod[].


  • Operadores Relacionais

Os operadores relacionais (ou de comparação) são usados para comparar dois valores. O resultado da comparação será sucesso ou falha.

Observe esta diferença importante da linguagem Verse em relação a outras linguagens que usam valores Booleanos (verdadeiro ou falso) como resultado da comparação. A falha é um elemento da linguagem Verse usada no controle do fluxo do programa.

As expressões que usam os operadores relacionais são falíveis.

Estes são os operadores relacionais:

Operador Comparação
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
= Igual
< > Não é igual


O exemplo abaixo verifica se o valor da variável PlayerHealth é menor ou igual a zero. Se a expressão do if tiver sucesso então a função GameOver() será executada.

if (PlayerHealth <= 0): 

    GameOver()


  • Operadores Lógicos

Os operadores lógicos (ou de decisão) efetuam operações com expressões falíveis (o resultado de cada expressão pode ser sucesso ou falha).

Estes são os operadores lógicos:

Operador Decisão
or Sucesso se uma das expressões for sucesso
and Sucesso se ambas as expressões forem sucesso
not Usa somente uma expressão.
O resultado é a situação oposta


Antes de mostrar um exemplo de operador lógico, vamos conhecer mais um operador da linguagem Verse.


  • ? (query)

O operador ? é chamado de query e é usado para verificar se um valor do tipo logic é true resultando em sucesso. A expressão falha se o valor logic for false.

O exemplo abaixo mostra o uso do operador ? e do operador lógico and.  A variável HasKey é do tipo logic e a variável EnemyCount é do tipo int. A expressão do if terá sucesso se HasKey tiver o valor true e EnemyCount for igual a zero.

if (HasKey? and EnemyCount = 0):

    OpenDoor()


  • Precedência dos operadores

Os operadores possuem uma ordem de precedência. Isto significa que os operadores com maior precedência são executados primeiros em uma expressão.

A relação abaixo mostra a precedência dos operadores. 

Maior precedência
?
not
*  /
+  -
=  < >  <  <=  >  >=
and
or
set  =


Quando dois operadores tem a mesma precedência em uma expressão, o operador que está à esquerda será executado primeiro.


  • Agrupamento de expressões

Você pode agrupar expressões usando parênteses ( ) para definir a ordem de execução das expressões. As expressões que estiverem dentro de ( ) tem precedência em relação aos operadores e devem ser executadas antes.

Como exemplo, veja as duas linhas abaixo:

set Result1 = 5 * 2 + 4

set Result2 = 5 * (2 + 4)

Na primeira linha, a variável Result1 receberá o valor de 14. A multiplicação será realizada primeiro porque o operador * tem precedência maior do que o operador +.

Na segunda linha, a variável Result2 receberá o valor de 30. A expressão dentro dos parênteses será executada primeiro. Depois será realizada a multiplicação. 


Vamos criar um dispositivo no UEFN para vermos os operadores em ação.

Em qualquer projeto UEFN, abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.

Em Device Name coloque operator_deviceclique no botão Create Empty.

Copie o código Verse abaixo para o dispositivo operator_device

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

operator_device := class(creative_device):
        
    X : float = 6.0
    Y : float = 2.0

    LogicTrue : logic = true
    LogicFalse : logic = false

    OnBegin<override>()<suspends>:void=

        Print("X = {X} --- Y = {Y}")

        Print("X + Y = {X + Y}")
        Print("X - Y = {X - Y}")
        Print("X * Y = {X * Y}")
        Print("X / Y = {X / Y}")

        Print("X > Y  --- { if(X > Y) then "Success" else "Failure"} ")
        Print("X <= Y --- { if(X <= Y) then "Success" else "Failure"} ")
        Print("X = Y  --- { if(X = Y) then "Success" else "Failure"} ")
        Print("X <> Y --- { if(X <> Y) then "Success" else "Failure"} ")

        Print("LogicTrue? or LogicFalse? --- { 
                if(LogicTrue? or LogicFalse?) then "Success" else "Failure"} ")
                                               
        Print("LogicTrue? and LogicFalse? --- { 
                if(LogicTrue? and LogicFalse?) then "Success" else "Failure"} ")

        Print("not LogicFalse? --- { 
                if(not LogicFalse?) then "Success" else "Failure"} ")


A função Print permite a inclusão de uma expressão dentro dos caracteres { }. O resultado da expressão fará parte do texto que será escrito. 

Nas funções Print que usam operadores relacionais e lógicos foram usados if para testar o sucesso ou falha da expressão e retornar este resultado como texto.

Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN. 

Acesse o Content Drawer e adicione o nosso dispositivo Verse operator_device ao nível.

Clique no botão Launch Session localizado na barra de ferramentas do UEFN para carregar o nível no Fortnite. 

Após iniciar a partida no Fortnite, pressione a tecla Tab e selecione a aba Registro para visualizar o log com as mensagens escritas pelas funções Print



Sumário Verse