ArithmeticExpression

Es una colección de funciones y operaciones aritméticas que usan otros elementos de Formato de Caras de Relojes para resolver valores de atributos y efectos giroscópicos en tiempo real.

Se introdujo en Wear OS 4.

Ejemplo

Una expresión de ejemplo para rotar un valor hasta 5 grados en cualquier dirección, según el valor $ x $ del acelerómetro del dispositivo Wear OS:

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

Eso equivale a la siguiente expresión matemática, donde $ \theta_x $ representa el ángulo de acelerómetro en la dirección $ x $:

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

Funciones

El Formato de Caras de Relojes reconoce los siguientes valores de cadena como funciones:

round()
Convierte el valor de entrada en un valor de punto flotante y, luego, realiza la operación matemática estándar round().
floor()
Realiza la operación matemática floor() estándar.
ceil()
Realiza la operación matemática ceil() estándar.
fract()
Muestra la parte fraccionaria del valor de entrada, es decir, la parte del valor de punto flotante que aparece a la derecha del punto decimal.
sin()
Realiza la operación trigonométrica sin() estándar.
cos()
Realiza la operación trigonométrica cos() estándar.
tan()
Realiza la operación trigonométrica tan() estándar.
asin()
Realiza la operación trigonométrica estándar asin(). El valor que se muestra siempre está en el rango $ [-\frac{\pi}{2}, \frac{\pi}{2}] $.
acos()
Realiza la operación trigonométrica estándar acos(). El valor que se muestra siempre está en el rango $ [0.0, \pi] $.
atan()
Realiza la operación trigonométrica estándar atan(). El valor que se muestra siempre está en el rango $ [-\frac{\pi}{2}, \frac{\pi}{2}] $.
abs()
Convierte el valor de entrada en un valor de punto flotante y, luego, realiza la operación matemática estándar abs().
clamp(,,)
Convierte los valores de entrada en valores de punto flotante y, luego, realiza la operación clamp() de Jetpack para que se ajuste al primer valor del rango definido por el segundo y el tercer valor.
rand(,)

Genera un valor de punto flotante aleatorio que cumple con las siguientes condiciones al mismo tiempo:

  • Mayor o igual que el primer valor
  • Menor o igual que el segundo valor

Supone que el primer valor es menor o igual que el segundo.

log()

Realiza la operación matemática estándar base-$ e $ log().

log2()

Simula un logaritmo en base 2. Para calcular este valor, se divide el logaritmo en base 10 (log10 del valor de entrada) por el logaritmo en base 10 de $ 2 $.

log10()

Realiza la operación matemática estándar en base 10 log10.

sqrt()

Realiza la operación matemática estándar de sqrt().

cbrt()

Realiza la operación matemática estándar de cbrt().

exp()

Realiza la operación matemática estándar de exp().

expm1()

Llama directamente a la operación matemática de expm1() si el valor de entrada es $ 1 $. Para cualquier otro valor de entrada, simula la función mediante la operación matemática estándar de exp() y, luego, resta 1.

deg()

Realiza la operación matemática estándar de toDegrees(). $ \frac{\pi}{2} $ se define como 90 grados y $ \pi $ se define como 180 grados.

rad()

Realiza la operación matemática estándar de toRadians(). 90 grados se define como $ \frac{\pi}{2} $ y 180 grados se define como $ \pi $.

pow(,)

Realiza la operación matemática estándar de pow(). El valor de salida siempre es un número de punto flotante.

numberFormat(,)

Aplica el formato de número en el primer valor al segundo valor.

El primer valor puede contener los siguientes caracteres:

  • #: Representa un dígito numérico.
  • ,: Representa un separador de coma en números grandes.
  • .: Representa un punto decimal.
icuText()

Convierte la cadena de formato de fecha de entrada en un patrón que coincida con el formato de configuración regional esperado. Si el elemento PartText superior incluye un elemento Localization, se usa el formato de esa configuración regional. De lo contrario, usa la configuración regional actual del dispositivo Wear OS.

Por ejemplo, si el dispositivo se usa en Estados Unidos, un valor de entrada de EE, MMM d, yyyy h:mm a genera el siguiente resultado: Tue, Mar 14, 2023 1:59 PM

icuBestText()

Convierte la cadena de formato de fecha de entrada a la hora actual cuyo patrón coincide con el formato esperado. Si el elemento PartText superior incluye un elemento Localization, se usa el formato de esa configuración regional. De lo contrario, usa la configuración regional actual del dispositivo Wear OS.

Por ejemplo, si el dispositivo se usa en Estados Unidos el 14 de marzo de 2023 a la 1:59 p.m., un valor de entrada yyyy MMM d EE a h:mm genera el siguiente resultado: Tue, Mar 14, 2023, 1:59 PM

subText(,,)

Extrae una subcadena del primer valor. El segundo valor indica el índice basado en 0 en el primer valor donde debe comenzar la subcadena. El tercer valor indica el índice basado en 0 en el primer valor donde la extracción de subcadena debe detenerse ("desde el segundo valor hasta el tercer valor, pero sin incluirlo").

Ejemplos:

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

Calcula la longitud de la cadena de entrada.

Operadores

El Formato de Caras de Relojes reconoce los siguientes valores de cadena como operadores:

+
Unario más, o bien la adición de varios valores. Admite números enteros y valores de punto flotante.
-
Unario menos, o bien la resta de varios valores. Admite números enteros y valores de punto flotante.
*
Multiplicación de varios valores de número entero o de punto flotante.
/

División de 2 valores de número entero o de punto flotante.

Si la división de 2 números enteros da como resultado un valor que no es un número entero, la parte decimal se conserva en el resultado de punto flotante. Por ejemplo, $ \frac{1}{2} = 0.5 $.

Además, la expresión $ \frac{x}{0} $ se evalúa como 0, donde $ x $ es cualquier número entero.

%

División modular de 2 valores de número entero o de punto flotante.

Si ambos operandos son números enteros, el resultado es el de la división de los 2 valores. Por ejemplo, $ 19 \bmod 7 = 5 $.

Si al menos un operando es un número de punto flotante, el resultado es un equivalente de punto flotante del resto; por ejemplo: $ 19.0 \bmod 7 = 5.0 $.

~

Operador "not" a nivel de bits. Varios ejemplos:

  • ~1 es $ -2 $.
  • ~0 es $ -1 $.
!

Operador lógico "not", que admite la doble negación. Varios ejemplos:

  • $ !2 $ es false.
  • $ !!0 $ es true.
|

Operador "or" a nivel de bits. Admite más de 2 valores de entrada. Varios ejemplos:

  • $ 1 | 0 = 1 $
  • $ 1 | 2 | 4 = 7 $
||
Operador lógico "or".
&
Operador "and" a nivel de bits. Admite exactamente 2 valores de entrada.
&&
Operador lógico "and".
(
Paréntesis de apertura. Se usa para cambiar el orden estándar de las operaciones, en el que la multiplicación y la división suelen tener prioridad sobre la suma y la resta.
)
Paréntesis de cierre. Se usa para cambiar el orden estándar de las operaciones, en el que la multiplicación y la división suelen tener prioridad sobre la suma y la resta.
<
El operador de comparación "menor que". Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es false.
<=
El operador de comparación "menor o igual que". Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es true.
>
El operador de comparación "mayor que". Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es false.
>=
El operador de comparación "mayor o igual que". Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es true.
? y :

Proporciona asistencia para operaciones ternarias. El formato general es el siguiente:

condition ? value_if_true : value_if_false

Admite operaciones ternarias anidadas con paréntesis.

,

Separa los valores en las funciones que tienen más de 1 argumento.

"

Cuando se coloca al principio y al final de un valor, indica que el Formato de Caras de Relojes debe interpretar el valor como una cadena.

==

Realiza una comparación de igualdad. Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es true.

!=

Realiza una comparación de desigualdad. Cuando se compara un valor de número entero con su equivalente de punto flotante, el resultado es false.