Expr-LogicalOperators.xml 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  3. "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
  4. <sect1 id="Logical_Operators">
  5. <title>Operadores Lógicos</title>
  6. <para><emphasis>Os seguintes </emphasis>operadores lógicos<indexterm>
  7. <primary>logical operators</primary>
  8. </indexterm> são suportados, listados aqui em sua precedência de
  9. avaliação:</para>
  10. <informaltable colsep="1" frame="all" rowsep="1">
  11. <tgroup align="left" cols="2">
  12. <colspec colwidth="94.80pt"/>
  13. <colspec/>
  14. <tbody>
  15. <row>
  16. <entry>NOT</entry>
  17. <entry>Operação Boolean NOT<indexterm>
  18. <primary>Boolean NOT</primary>
  19. </indexterm></entry>
  20. </row>
  21. <row>
  22. <entry>~</entry>
  23. <entry>Operação Boolean NOT<indexterm>
  24. <primary>Boolean NOT</primary>
  25. </indexterm></entry>
  26. </row>
  27. <row>
  28. <entry>AND</entry>
  29. <entry>Operação Boolean AND<indexterm>
  30. <primary>Boolean AND</primary>
  31. </indexterm></entry>
  32. </row>
  33. <row>
  34. <entry>OR</entry>
  35. <entry>Operação Boolean OR<indexterm>
  36. <primary>Boolean OR</primary>
  37. </indexterm></entry>
  38. </row>
  39. </tbody>
  40. </tgroup>
  41. </informaltable>
  42. <para/>
  43. <sect2 id="Logical_Expression_Grouping">
  44. <title>Agrupando Expressões Lógicas</title>
  45. <para>Quando uma expressão lógica complexa possui múltiplas condições OR,
  46. é preciso agrupar as condições OR e ordená-las da menos complexa para a
  47. mais complexa a fim de obter um processamento mais eficiente.</para>
  48. <para>Se a probabilidade de ocorrência for conhecida, é preciso ordená-la
  49. da mais provável para a menos provável, pois como qualquer parte de uma
  50. condição OR composta é avaliada como TRUE, o resto da expressão pode ser
  51. ignorado. No entanto, isso não é garantido. Isso também é verdade para a
  52. ordem das condições da função MAP.</para>
  53. <para>Sempre que as operações lógicas AND e OR são misturadas em uma mesma
  54. expressão, é preciso usar parênteses para agrupar dentro da expressão,
  55. garantindo uma avaliação correta e para esclarecer a intenção da
  56. expressão. Por exemplo, considere o seguinte:</para>
  57. <programlisting>isCurrentRevolv := trades.trd_type = 'R' AND
  58. trades.trd_rate = '0' OR
  59. trades.trd_rate = '1';</programlisting>
  60. <para>não gera o resultado pretendido. O uso de parênteses garante a
  61. avaliação correta, como mostrado abaixo:</para>
  62. <programlisting>isCurrentRevolv := trades.trd_type = 'R' AND
  63. (trades.trd_rate = '0' OR trades.trd_rate = '1');</programlisting>
  64. </sect2>
  65. <sect2 id="An_XOR_Operator">
  66. <title>Operador XOR<indexterm>
  67. <primary>XOR Operator</primary>
  68. </indexterm></title>
  69. <para>A função a seguir pode ser usada para realizar uma operação XOR em 2
  70. valores booleanos:</para>
  71. <programlisting>BOOLEAN XOR(BOOLEAN cond1, BOOLEAN cond2) :=
  72. (cond1 OR cond2) AND NOT (cond1 AND cond2);</programlisting>
  73. </sect2>
  74. </sect1>