28 maggio 2010

Impazzire con "and"

Prima o poi al neo programmatore Ruby capitera' di scontrarsi con le "stranezze" dell'operatore and.
Ad esempio eseguite su irb:
a = true and false

Quanto vale a ?

NON vale false come ci si aspetta, ma true !
Questo perche' and ha una priorita' molto bassa. La precedente espressione viene quindi interpretata come:
(a = true) and false

Puoi evitare questo usando && invece di and :
a = true && false

in questo caso a vale true.

La differenza tra and e && e' la priorita' con cui vengono interpretati: && ha una priorita' alta, and molto bassa.

Spesso quindi, anche se leggermente meno leggibile, e' meglio usare &&.

3 commenti:

  1. E' corretto. il simbolo di "=" è di assegnazione e non di controllo che è "==".

    Ciao Michele.

    RispondiElimina
  2. Ciao Michele,
    certo che e' corretto e che "=" e' diverso da "==" .

    Il post vuole solo far notare la differenza tra "and" e "&&"

    Ciao Ale

    RispondiElimina
  3. credo ci sia un errore in quello che dici. tu consideri:
    (a = true) and false

    in realtà è:
    a = (true and false)

    ovvero
    if(true and false)
    a = true

    RispondiElimina