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:

Função Descrição Tipo de retorno Disponibilidade
round() Converte o valor de entrada em um valor de ponto flutuante e, em seguida, executa a operação matemática round() padrão. Número inteiro Versão 1
floor() Executa a operação matemática floor() padrão. Ponto flutuante Versão 1
ceil() Executa a operação matemática ceil() padrão. Ponto flutuante Versão 1
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. Ponto flutuante Versão 1
sin() Executa a operação trigonométrica sin() padrão. Ponto flutuante Versão 1
cos() Executa a operação trigonométrica cos() padrão. Ponto flutuante Versão 1
tan() Executa a operação trigonométrica tan() padrão. Ponto flutuante Versão 1
asin() Executa a operação trigonométrica asin() padrão. O valor retornado está sempre no intervalo $ [-\frac{\pi}{2}, \frac{\pi}{2}] $. Ponto flutuante Versão 1
acos() Executa a operação trigonométrica acos() padrão. O valor retornado está sempre no intervalo $ [0.0, \pi] $. Ponto flutuante Versão 1
atan() Executa a operação trigonométrica atan() padrão. O valor retornado está sempre no intervalo $ [-\frac{\pi}{2}, \frac{\pi}{2}] $. Ponto flutuante Versão 1
abs() Converte o valor de entrada em um valor de ponto flutuante e, em seguida, executa a operação matemática abs() padrão. Ponto flutuante Versão 1
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. Ponto flutuante Versão 1
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.
Ponto flutuante Versão 1
log() Executa a operação matemática padrão de base $ e $ log(). Ponto flutuante Versão 1
log2() Simula um logaritmo de base 2. Esse valor é calculado dividindo a base 10 log() do valor de entrada) pelo logaritmo de base 10 de $ 2 $. Ponto flutuante Versão 1
log10() Realiza a operação matemática log() padrão de base 10. Ponto flutuante Versão 1
sqrt() Executa a operação matemática sqrt() padrão. Ponto flutuante Versão 1
cbrt() Executa a operação matemática cbrt() padrão. Ponto flutuante Versão 1
exp() Executa a operação matemática exp() padrão. Ponto flutuante Versão 1
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. Ponto flutuante Versão 1
deg() Executa a operação matemática toDegrees() padrão. $ \frac{\pi}{2} $ é definido como 90 graus, e $ \pi $ é definido como 180 graus. Ponto flutuante Versão 1
rad() Executa a operação matemática toRadians() padrão. 90 graus é definido como $ \frac{\pi}{2} $ e 180 graus é definido como $ \pi $. Ponto flutuante Versão 1
pow(,) Executa a operação matemática pow() padrão. O valor de saída é sempre um número de ponto flutuante. Ponto flutuante Versão 1
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.
String Versão 1
icuText()

Converte a string de formato da data de entrada em um padrão que corresponde ao formato da 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

String Versão 1
icuText(,)

Converte o primeiro argumento string de formato da data de entrada em um padrão que corresponde ao formato de localidade esperado. O segundo argumento é uma string de carimbo de data/hora em milissegundos.

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.

String Versão 2
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 produzir a seguinte saída: Tue, Mar 14, 2023, 1:59 PM

String Versão 1
icuBestText(,)

Converte o primeiro argumento string de formato da data de entrada na hora atual, cujo padrão corresponde ao formato esperado. O segundo argumento é uma string de carimbo de data/hora em milissegundos.

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.

String Versão 2
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
String Versão 1
textLength()

Calcula o comprimento da string de entrada.

Exemplos:
  • subText("abc def", 2, 5) é c d
  • subText("abc def", 2, 7) é c def
String Versão 1

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.