ArithmeticExpression

Uma coleção de funções e operações aritméticas que outros elementos do formato de mostrador do relógio usam para resolver valores de atributos em tempo real e efeitos giroscópicos.

Introduzido no Wear OS 4.

Exemplo

Um exemplo de expressão para fazer a rotação de até 5 graus em qualquer direção, com base no valor $ x $ do acelerômetro do dispositivo Wear OS:

(5/90)*clamp([ACCELEROMETER_ANGLE_X],0,90) + (-5/90)*clamp([ACCELEROMETER_ANGLE_X],-90,0)

…que é equivalente à seguinte expressão matemática, em que $ \theta_x $ representa o ângulo do acelerômetro na direção $ x $:

$$ \frac{5}{90} * max(min(\theta_x, 90), -90) $$

Funções

O formato do mostrador do relógio reconhece os seguintes valores de string como funções:

round()
Converte o valor de entrada em um valor de ponto flutuante e, em seguida, executa a operação matemática round() padrão.
floor()
Executa a operação matemática floor() padrão.
ceil()
Executa a operação matemática ceil() padrão.
fract()
Retorna a parte fracionária do valor de entrada, ou seja, a parte do valor de ponto flutuante que aparece à direita do ponto decimal.
sin()
Executa a operação trigonométrica sin() padrão.
cos()
Executa a operação trigonométrica cos() padrão.
tan()
Executa a operação trigonométrica tan() padrão.
asin()
Executa a operação trigonométrica asin() padrão. O valor retornado está sempre no intervalo $ [-\frac{\pi}{2}, \frac{\pi}{2}] $.
acos()
Executa a operação trigonométrica acos() padrão. O valor retornado está sempre no intervalo $ [0.0, \pi] $.
atan()
Executa a operação trigonométrica atan() padrão. O valor retornado está sempre no intervalo $ [-\frac{\pi}{2}, \frac{\pi}{2}] $.
abs()
Converte o valor de entrada em um valor de ponto flutuante e, em seguida, executa a operação matemática abs() padrão.
clamp(,,)
Converte os valores de entrada em valores de ponto flutuante e executa a operação clamp() do Jetpack para ajustar o primeiro valor ao intervalo definido pelo segundo e terceiro.
rand(,)

Gera um valor de ponto flutuante aleatório que atende às seguintes condições ao mesmo tempo:

  • Maior ou igual ao primeiro valor.
  • Menor ou igual ao segundo valor.

Pressupõe que o primeiro valor é menor ou igual ao segundo.

log()

Executa a operação matemática padrão de base $ e $ log().

log2()

Simula um logaritmo de base 2. Esse valor é calculado dividindo o logaritmo de base 10 (log10 do valor de entrada) pelo logaritmo de base 10 de $ 2 $.

log10()

Realiza a operação matemática log10 padrão de base 10.

sqrt()

Executa a operação matemática sqrt() padrão.

cbrt()

Executa a operação matemática cbrt() padrão.

exp()

Executa a operação matemática exp() padrão.

expm1()

Chama diretamente a operação matemática expm1() se o valor de entrada for $ 1 $. Para qualquer outro valor de entrada, simula a função executando a operação matemática exp() padrão e subtraindo 1.

deg()

Executa a operação matemática toDegrees() padrão. $ \frac{\pi}{2} $ é definido como 90 graus, e $ \pi $ é definido como 180 graus.

rad()

Executa a operação matemática toRadians() padrão. 90 graus é definido como $ \frac{\pi}{2} $ e 180 graus é definido como $ \pi $.

pow(,)

Executa a operação matemática pow() padrão. O valor de saída é sempre um número de ponto flutuante.

numberFormat(,)

Aplica o formato numérico do primeiro valor ao segundo.

O primeiro valor pode conter os seguintes caracteres:

  • #: representa um dígito numérico.
  • ,: representa uma vírgula como separador em números grandes.
  • .: representa um ponto decimal.
icuText()

Converte a string de formato da data de entrada em um padrão que corresponde ao formato de localidade esperado. Se o elemento pai PartText incluir um elemento Localization, o formato dessa localidade será usado. Caso contrário, a localidade atual do dispositivo Wear OS será usada.

Por exemplo, se o dispositivo estiver sendo usado nos Estados Unidos, um valor de entrada de EE, MMM d, yyyy h:mm a vai produzir a seguinte saída: Tue, Mar 14, 2023 1:59 PM

icuBestText()

Converte a string de formato da data de entrada na hora atual, cujo padrão corresponde ao formato esperado. Se o elemento pai PartText incluir um elemento Localization, o formato dessa localidade será usado. Caso contrário, a localidade atual do dispositivo Wear OS será usada.

Por exemplo, se o dispositivo estiver sendo usado nos Estados Unidos em 14 de março de 2023, às 13h59, um valor de entrada de yyyy MMM d EE a h:mm vai gerar a seguinte saída: Tue, Mar 14, 2023, 1:59 PM

subText(,,)

Extrai uma substring do primeiro valor. O segundo valor indica o índice baseado em 0 para o primeiro valor em que a substring precisa começar. O terceiro valor indica o índice com base em 0 no primeiro valor em que a extração de substring precisa ser interrompida ("do segundo valor até o terceiro, mas sem incluí-lo").

Exemplos:

  • subText("abc def", 2, 5) é c d
  • subText("abc def", 2, 7) é c def
textLength()

Calcula o comprimento da string de entrada.

Operadores

O formato do mostrador do relógio reconhece os seguintes valores de string como operadores:

+
Unário mais, ou adição de vários valores. Oferece suporte a números inteiros e valores de ponto flutuante.
-
Unário menos, ou subtração de vários valores. Oferece suporte a números inteiros e valores de ponto flutuante.
*
Multiplicação de vários valores inteiros ou de ponto flutuante.
/

Divisão de dois valores inteiros ou de ponto flutuante.

Se a divisão de dois números inteiros resultar em um valor não inteiro, a parte decimal será preservada no resultado de ponto flutuante. Por exemplo, $ \frac{1}{2} = 0,5 $.

Além disso, a expressão $ \frac{x}{0} $ é avaliada como 0, onde $ x $ é qualquer número inteiro.

%

Divisão modular de dois valores inteiros ou de ponto flutuante.

Se ambos operandos forem números inteiros, o resultado será o restante da divisão dos dois valores. Por exemplo, $ 19 \bmod 7 = 5 $.

Se pelo menos um operando for um número de ponto flutuante, o resultado será um equivalente de ponto flutuante do restante. Por exemplo, $ 19,0 \bmod 7 = 5,0 $.

~

Operador "não" bit a bit. Vários exemplos:

  • ~1 é $ -2 $
  • ~0 é $ -1 $
!

Operador lógico "não", que oferece suporte a duplos negativos. Vários exemplos:

  • $ !2 $ é false
  • $ !!0 $ é true
|

Operador "ou" bit a bit. Oferece suporte a mais de dois valores de entrada. Vários exemplos:

  • $ 1 | 0 = 1 $
  • $ 1 | 2 | 4 = 7 $
||
Operador lógico "ou"
&
Operador "e" bit a bit. Oferece suporte a exatamente dois valores de entrada.
&&
Operador lógico "e"
(
Parêntese de abertura. Usado para mudar a ordem padrão de operações, em que a multiplicação e a divisão geralmente têm prioridade sobre adição e subtração.
)
Parêntese de fechamento. Usado para mudar a ordem padrão de operações, em que a multiplicação e a divisão geralmente têm prioridade sobre adição e subtração.
<
O operador de comparação "menor que". Ao comparar um valor inteiro com o ponto flutuante equivalente, o resultado é false.
<=
O operador de comparação "menor ou igual a". Ao comparar um valor inteiro com o ponto flutuante equivalente, o resultado é true.
>
O operador de comparação "maior que". Ao comparar um valor inteiro com o equivalente em ponto flutuante, o resultado é false.
>=
O operador de comparação "maior ou igual a". Ao comparar um valor inteiro com o ponto flutuante equivalente, o resultado é true.
? e :

Oferece suporte a operações ternárias. O formato geral é o seguinte:

condition ? value_if_true : value_if_false

Oferece suporte a operações ternárias aninhadas usando parênteses.

,

Separa valores em funções que recebem mais de um argumento.

"

Quando colocado no início e no final de um valor, indica que o formato do mostrador do relógio precisa interpretar o valor como uma string.

==

Comparar para confirmar se são iguais. Ao comparar um valor inteiro com o ponto flutuante equivalente, o resultado é true.

!=

Comparar para desigualdade. Ao comparar um valor inteiro com o ponto flutuante equivalente, o resultado é false.