Ten铆a la intenci贸n de escribir 1/2 una publicaci贸n de blog decente sobre las declaraciones de F #, pero luego pens茅, y honestamente, no pod铆a ver demasiadas ventajas en simplemente repetir lo que ya est谩 disponible gratuitamente en MSDN, que enumera TODAS las declaraciones de F #.
Puede encontrar una lista completa de todos los operadores y caracteres de F # en esta p谩gina de MSDN.Si sigue este enlace, lo primero que comprender谩 es que F # tiene muchos operadores y s铆mbolos, demasiados para que yo los incluya en una publicaci贸n de blog. Teniendo esto en cuenta, tom茅 la intenci贸n de crear medio blog decente sobre operadores y decid铆 reducir un poco el alcance para incluir solo una discusi贸n de los operadores m谩s comunes, por lo que creo que se podr铆a decir que esto ser谩 solo 1/4 o 1/8 de una publicaci贸n decente, por lo cual me disculpo humildemente.
Ahora, antes de comenzar, solo quer铆a decir que voy a pasar por los operadores m谩s comunes; Lo m谩s probable es que tenga que estudiar el enlace de MSDN que inclu铆 al principio de esta publicaci贸n cuando realmente comience a usar F #, pero ahora espero que los que nos detenemos sean suficientes para que podamos comenzar.
Operadores aritm茅ticos
+ Suma
Incontrolable. Una posible condici贸n de desbordamiento es cuando se suman los n煤meros y la suma excede el valor absoluto m谩ximo admitido por el tipo.
- Resta
Incontrolable. Posible condici贸n de relleno insuficiente cuando se restan tipos sin signo o cuando los valores de coma flotante son demasiado peque帽os para ser representados por el tipo.
* Multiplicaci贸n
Incontrolable. Una posible condici贸n de desbordamiento si los n煤meros se multiplican y el producto excede el valor absoluto m谩ximo admitido por el tipo.
/ Divisi贸n
La divisi贸n por cero genera una DivideByZeroException para tipos enteros. Para los tipos de coma flotante, dividir por cero le da valores especiales de coma flotante + Infinito o -Infinito. Una condici贸n de relleno insuficiente tambi茅n es posible cuando el n煤mero de coma flotante es demasiado peque帽o para ser representado por un tipo.
% M贸dulo
Devuelve el resto de una operaci贸n de divisi贸n. El signo del resultado es el mismo que el del primer operando.
** Exposici贸n
Posible condici贸n de desbordamiento cuando el resultado excede el valor absoluto m谩ximo para el tipo. El operador de exponenciaci贸n solo funciona con tipos de punto flotante.
Demo
//Arithmetic operators printfn "25 + 25 = %i" (25 + 25) printfn "75 - 25 = %i" (75 - 25) printfn "12 * 12 = %i" (12 * 12) printfn "100 / 4 = %i" (100 / 4) printfn "101 %% 10 = %i" (101
Y aqu铆 est谩 el resultado del lanzamiento:

Operadores binarios
La siguiente tabla muestra los operadores de comparaci贸n binarios disponibles para tipos enteros y tipos de punto flotante. Estos operadores devuelven valores de tipo bool.
= Igual
Este no es un operador de asignaci贸n. Se usa solo para comparaci贸n. Este es un operador universal.
> m谩s que
Este es un operador universal.
<menos de
Este es un operador universal.
> = mayor o igual
Este es un operador universal.
<= mayor o igual
Este es un operador universal.
<> No es igual
Este es un operador universal.
//Binary operators printfn "25 = 25 = %b" (25 = 25) printfn "26 > 25 = %b" (26 > 25) printfn "26 < 25 = %b" (26 < 25) printfn "26 >= 25 = %b" (26 >= 25) printfn "26 <= 25 = %b" (26 <= 25) printfn "'a' <= 'b' = %b" ('a' <> 'b') //how about a more complex example, a tuple printfn "(1,'a') = (2,'a') = %b" ((1,'a') = (2,'a')) printfn "(1,'a') = (1,'a') = %b" ((1,'a') = (1,'a')) printfn "Some(1) = Some(2) = %b" (Some(1) = Some(2)) printfn "Some(2) = Some(2) = %b" (Some(2) = Some(2))

Operadores booleanos
La siguiente tabla enumera los operadores l贸gicos disponibles en F #. El 煤nico tipo admitido por estos operadores es el tipo bool.
no
Negaci贸n booleana
||
O l贸gico
&&
L贸gico y
Aqu铆 hay una peque帽a demostraci贸n de los operadores booleanos mencionados anteriormente.
//Boolean operators printfn "not true = %b" (not true) printfn "true || false = %b" (true || false) printfn "true && true = %b" (true && true) printfn "true && false = %b" (true && false)

Operadores de bits
La siguiente tabla describe los operadores bit a bit que son compatibles con los tipos enteros desempaquetados en F #.
&&&
El operador AND bit a bit. Como resultado, los bits tienen un valor de 1 si y solo si los bits correspondientes en ambos operandos de origen son 1.
|||
El operador OR bit a bit. Como resultado, los bits tienen un valor de 1 si alguno de los bits correspondientes en los operandos de origen es 1.
^^^
El operador exclusivo bit a bit "OR". Como resultado, los bits tienen un valor de 1 si y solo si los bits en los operandos originales tienen valores desiguales.
~~~
Operador de negaci贸n bit a bit. Este es un operador unario que produce un resultado en el que todos los 0 bits del operando original se convierten en 1 bit, y todos los 1 bits se convierten en 0 bits.
<<<
Operador de desplazamiento a la izquierda bit a bit. El resultado es el primer operando con los bits desplazados a la izquierda por el n煤mero de bits en el segundo operando. Los bits desplazados desde la posici贸n m谩s significativa no se convierten en la posici贸n menos significativa. Los bits menos significativos se rellenan con ceros. El tipo del segundo argumento es int32.
>>>
Operador de desplazamiento a la derecha bit a bit. El resultado es un primer operando con bits desplazados a la derecha por el n煤mero de bits en el segundo operando. Los bits desplazados desde la posici贸n menos significativa no se convierten en la posici贸n m谩s significativa. Para los tipos sin signo, los bits m谩s significativos se rellenan con ceros. Para los tipos con signo, los bits m谩s significativos se rellenan con unos. El tipo del segundo argumento es int32.
//Bit shift operators //&&& and printfn "2 &&& 4 (which is 0010 &&& 0100, should be 0) = %X" (2 &&& 4) printfn "2 &&& 3 (which is 0010 &&& 0011, should be 2) = %X" (2 &&& 3) //||| or printfn "2 ||| 4 (which is 0010 ||| 0100, should be 6) = %X" (2 ||| 4) printfn "2 ||| 3 (which is 0010 ||| 0011, should be 3) = %X" (2 ||| 3) //^^^ xor printfn "2 ^^^ 4 (which is 0010 ^^^ 0100, should be 6) = %X" (2 ^^^ 4) printfn "2 ^^^ 3 (which is 0010 ^^^ 0011, should be 1) = %X" (2 ^^^ 3) //^^^ negate printfn "~~~4 (which is not 0100, should be 1011 (B hex), or 11 decimal) = %X" (~~~4) //<<< bit shift left printfn "4 <<< 1 (which is 0100 <<< by 1 place left , should be 1000 (8 hex), or 8 decimal) = %X" (4 <<< 1) //>>> bit shift right printfn "4 >>> 1 (which is 0100 >>> by 1 place right , should be 0010 (2 hex), or 2 decimal) = %X" (4 >>> 1)

Sobrecarga del operador
Como mencion茅, habr谩 momentos en los que necesite implementar su propia l贸gica de operador. En otros lenguajes .NET, esto se puede lograr al proporcionar sus propias sobrecargas de operador. No es sorprendente que deba hacer lo mismo en F #. Todav铆a no quer铆a entrar en clases y OO, pero parece ser coherente con la discusi贸n actual, as铆 que veamos c贸mo puede implementar sus propios operadores en F #.
Lo rob茅 nuevamente de MSDN. El siguiente c贸digo ilustra una clase de vector que tiene solo dos operadores: uno para el unario menos y otro para multiplicar por un escalar. En este ejemplo, se necesitan dos sobrecargas para la multiplicaci贸n escalar, ya que el operador debe trabajar independientemente del orden en que aparecen el vector y el escalar.
type Vector(x: float, y : float) = member this.x = x member this.y = y static member (~-) (v : Vector) = Vector(-1.0 * vx, -1.0 * vy) static member (*) (v : Vector, a) = Vector(a * vx, a * vy) static member (*) (a, v: Vector) = Vector(a * vx, a * vy) override this.ToString() = this.x.ToString() + " " + this.y.ToString()