Diferencia entre revisiones de «Operadores estándares»

De Wiki~eWa
Ir a la navegaciónIr a la búsqueda
Línea 169: Línea 169:
  
 
Hay que tener en cuenta que tanto el [[operador]] con un solo "'''&'''" o con una sola "'''^'''" son diferentes a nivel [[semántico]] que los [[operadores]] condicionales. Respectivamente sirven para concatenar cadenas y para calcular potencias.
 
Hay que tener en cuenta que tanto el [[operador]] con un solo "'''&'''" o con una sola "'''^'''" son diferentes a nivel [[semántico]] que los [[operadores]] condicionales. Respectivamente sirven para concatenar cadenas y para calcular potencias.
 +
 +
==== '''No''' ("!b:B") ====
 +
''b '''negado'''''
 +
* "'''b'''": un [[objeto]] del [[tipo]] [[booleano]].
 +
* '''Devuelve''': devuelve ''cierto'' (1) si ambos el [[objeto]] "b" tienen el valor [[booleano]] ''falso''. Si el [[objeto]] "b" está definido pero sin inicializar (es un '''#DEFINED'''), devuelve ''undefined''. En caso contrario, devuelve ''falso''.
  
 
==== '''Y''' ("b1:B && b2:B") ====
 
==== '''Y''' ("b1:B && b2:B") ====

Revisión del 02:18 15 mar 2012

Operadores matemáticos

Dentro del Paradigma eWa, se define un conjunto de operadores estándares que son utilizados de igual manera para cualquiera de los Lenguajes de Programación eWa. Algunos de ellos son los mismos que se utilizan en otros lenguajes de programación (incluso tradicionales), pero existen numerosos operadores propios y algunos que, con la misma sintaxis, producen diferentes resultados.

Generalmente se dividen en grupos dependiendo de su cometido. A su vez, cada grupo se subdivide generalmente en dos, diferenciando los operadores atómicos y los operadores vectoriales que se aplican, respectivamente, a objetos atómicos u conjuntos.

Al crear una clase, se pueden sobrescribir los procedimientos heredados de los operadores estándares.

Operadores de asignación

Igual a ("a:A = b:B")

a igual a b

  • "a": un objeto del tipo "A".
  • "b": un objeto del tipo "B". El tipo "B" puede ser el propio tipo "A".
  • Acción: asigna, campo a campo, el valor del objeto "b" al objeto "a".
    • Si una propiedad de "b" no existe en "a", no se asigna. Si una propiedad de "a" no existía en "b", se deja como está, es decir, con el valor anterior o el valor por defecto del tipo "A".
    • Si se detecta que el objeto "a" es el mismo objeto que el objeto "b" (porque sea el mismo o porque sea un alias), el estándar especifica que se debe ignorar este operador de asignación en tiempo de compilación.
    • Si el objeto "a" no existe pero está definido (es una estructura #DEFINED), se crea previamente el objeto "a" de tipo "A".
  • Devuelve: devuelve el propio objeto "a" ya modificado.

Idéntico a ("a2:A <=> a1:A")

a2 idéntico a a1

Esta operación se puede considerar equivalente a que "a2" pase a ser un alias de "a1".

Clonación de ("a2:A >=< a1:A")

a2 clonación de a1

  • "a2": un objeto del tipo "A".
  • "a1": un objeto del tipo "A".
  • Acción: crea un objeto de tipo "A" que asigna con el alias "a2", para luego hacer que "a2" sea igual a "a1", consiguiendo que finalmente el objeto "a2" sea una copia (clon) independiente del objeto "a1".
    • Hay que destacar que el objeto "a2" original no se destruye; por lo tanto, si los dos objetos fueran el mismo (x >=< x) y no tuvieran ningún alias, se perdería la referencia generando basura inorgánica.
  • Devuelve: devuelve el propio objeto "a2".

Asignaciones aritméticas

Estos operadores se centran en asignar el resultado de realizar operaciones aritméticas elementales entre un objeto numérico y el propio objeto donde se va a almacenar el resultado. Todos utilizan:

  • "x": un objeto del tipo "A", generalmente numérico.
  • "y": un objeto del tipo "B", generalmente numérico.
  • Devuelve: devuelve el propio objeto de tipo numérico "x".

Igual a la parte entera de ("x:A =/ y:B")

x igual a la parte entera de y

  • Acción: equivalente en cuanto a tratamiento físico de los objetos al operador de igualdad. Asigna al objeto "x" de tipo numérico la parte entera del objeto de tipo numérico "y".

Incrementado en ("x:A += y:B")

x incrementado en y

  • Acción: suma al valor del objeto "x" el valor del objeto "y".

Decrementado en ("x -= y")

x decrementado en y

  • Acción: resta al valor del objeto "x" el valor del objeto "y".

Multiplicado con ("x *= y")

x multiplicado con y

  • Acción: multiplica al valor del objeto "x" por el valor del objeto "y".

Dividido con ("x /= y")

x dividido con y

  • Acción: divide al valor del objeto "x" entre el valor del objeto "y".

Elevado con ("x ^= y")

x elevado con y

  • Acción: eleva al valor del objeto "x" al exponente "y".

Asignaciones aritméticas utilizando la parte entera

Como se verá con los demás operadores aritméticos, se puede utilizar el operador correspondiente de parte entera para realizar las asignaciones aritméticas:

x +/= y | x -/= y | x */= y | x //= y | x ^/= y

Asignación condicional

Existen operadores de condición que permiten realizar operaciones booleanas sobre objetos booleanos. Estas operaciones se pueden representar también como asignación nuclear añadiendo el símbolo "=" al final del operador doble de condición:

b1 &&= b2 | b1 ||= b2 | b1 ^^= b2

Concatenándole ("v:V &= e:E")

a concatenándole b

Operadores aritméticos

Los operadores aritméticos están estandarizados para ser utilizados como interfaz de los objetos de tipo numérico. Son operadores destinados a realizar operaciones entre números o datos que se puedan considerar o tratar como tales.

Aritmética elemental

Estos operadores se centran en las operaciones aritméticas elementales. Todos utilizan:

  • "x": un objeto del tipo "A", generalmente numérico.
  • "y": un objeto del tipo "B", generalmente numérico.

Más ("x:A + y:B")

x más y

  • Devuelve: un nuevo objeto numérico que contenga el valor de sumar "x" con "y".

Menos ("x:A - y:B")

x menos y

  • Devuelve: un nuevo objeto numérico que contenga la diferencia de "y" a "x".

Multiplicado por ("x:A * y:B")

x multiplicado por y

  • Devuelve: un nuevo objeto numérico que contenga el producto de "x" por "y".

Dividido entre ("x:A / y:B")

x dividido entre y

  • Devuelve: un nuevo objeto numérico que contenga el cociente de "x" entre "y". El estándar suele trabajar con precisión infinita, por lo tanto, se suele utilizar internamente una organización en forma de quebrados para no perder la precisión.

Elevado a ("x:A ^ y:B")

x elevado a y

  • Devuelve: un nuevo objeto numérico que contenga la potencia de base "x" y exponente "y". El estándar suele trabajar con precisión infinita, por lo tanto, se suele utilizar internamente una organización en forma de potencias para no perder la precisión.

Aritmética entera

Generalmente la división entera es una operación que en la informática tradicional se utiliza habitualmente. La idea de las aritmética entera está muy presente en la estandarización de las operaciones aritméticas del Proyecto eWa.

Suma entera con ("x:A +/ y:B")

x suma entera con y

  • Devuelve: un nuevo objeto numérico entero que contenga el valor de sumar "x" con "y".

Resta entera con ("x:A -/ y:B")

x resta entera con y

  • Devuelve: un nuevo objeto numérico entero que contenga la diferencia de "y" a "x".

Multiplicación entera con ("x:A */ y:B")

x multiplicación entera con y

  • Devuelve: un nuevo objeto numérico entero que contenga el producto de "x" por "y".

División entera con ("x:A // y:B")

x división entera con y

  • Devuelve: un nuevo objeto numérico entero que contenga el cociente de "x" entre "y".

Potencia entera de ("x:A ^/ y:B")

x potencia entera de y

  • Devuelve: un nuevo objeto numérico que contenga la parte entera del valor resultante de elevar la base "x" al exponente "y".

Operadores de comparación

Los operadores de comparación están estandarizados para ofrecer métodos cotidianos para comparar (ordenar, verificar, discriminar...) objetos. Todos ellos devuelven un valor booleano:

Por semejanza

Es igual a ("a:A == b:B")

a es igual a b

  • "a": un objeto del tipo "A".
  • "b": un objeto del tipo "B". El tipo "B" puede ser el propio tipo "A".
  • Devuelve: devuelve cierto (1) si el objeto "A" es igual campo a campo que el objeto "b". Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

Es completamente igual a ("a:A === b:B")

a es completamente igual a b

  • "a": un objeto del tipo "A".
  • "b": un objeto del tipo "B". El tipo "B" puede ser el propio tipo "A".
  • Devuelve: devuelve cierto (1) si el objeto "A" es igual campo a campo que el objeto "b" y además es del mismo tipo. Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

Es idéntico a ("a:A <==> b:B")

a es idéntico a b

  • "a": un objeto del tipo "A".
  • "b": un objeto del tipo "B". El tipo "B" puede ser el propio tipo "A".
  • Devuelve: devuelve cierto (1) si el objeto "A" es un alias del objeto "b". Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

Inversos

Existen también los operadores de comparación por semejanza inversos. Es decir, aquellos que devuelven cierto cuando su contrario devuelve falso y viceversa. Ambos devuelven undefined en los mismos casos. Su sintaxis es la misma pero cambiando el primer signo igual ("=") por el signo de exclamación ("!"):

a != b | a !=== b | a <!=> b

Operadores de condición

Los operadores de condición están estandarizados para realizar operaciones booleanas entre objetos de tipo booleano. Todos ellos devuelven un valor booleano que se puede volver a utilizar.

Hay que tener en cuenta que tanto el operador con un solo "&" o con una sola "^" son diferentes a nivel semántico que los operadores condicionales. Respectivamente sirven para concatenar cadenas y para calcular potencias.

No ("!b:B")

b negado

  • "b": un objeto del tipo booleano.
  • Devuelve: devuelve cierto (1) si ambos el objeto "b" tienen el valor booleano falso. Si el objeto "b" está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

Y ("b1:B && b2:B")

b1 y b2

  • "b1": un objeto del tipo booleano.
  • "b2": un objeto del tipo booleano.
  • Devuelve: devuelve cierto (1) si ambos objetos tienen el valor booleano cierto. Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

O ("b1:B || b2:B")

b1 o b2

  • "b1": un objeto del tipo booleano.
  • "b2": un objeto del tipo booleano.
  • Devuelve: devuelve cierto (1) si al menos uno de los dos objetos tiene el valor booleano cierto. Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

XOR("b1:B ^^ b2:B")

b1 o esclusivo b2

  • "b1": un objeto del tipo booleano.
  • "b2": un objeto del tipo booleano.
  • Devuelve: devuelve cierto (1) si ambos objetos tienen el valor booleano cierto. Si al menos uno de los dos objetos está definido pero sin inicializar (es un #DEFINED), devuelve undefined. En caso contrario, devuelve falso.

Operadores vectoriales

Los operadores vectoriales son operadores es orientados a facilitar el trabajo con objetos de tipo conjunto.

Elemento de ("v:V[i]")

elemento i-ésimo de v

Elemento de ("v:V[i,l]")

l elementos de v desde el i-ésimo