eheh.. quante risposte a un messaggio che avrebbe dovuto non esserci :-)
Vorrei solo fare un po' di chiarezza, visto che sono nuovo a questo ambiente. Allora, Gianluigi affermi che risulta logico che si comporti in questo modo, ovvero è ovvio il divieto di mix di operatori AND IF / OR IF con altri (anche booleani in senso stretto) OR IF / AND IF rispettivamente. Certo, alla luce di questa logica di funzionamento, per forza deve essere così: AND IF valuta, al di là di come possa essere stutturata l'espressione complessiva, da sinistra, e se è FALSE esce; OR IF valuta da sinistra (o da destra?) e se è TRUE (a sinistra o a destra?) esce. Ma dove sta scritto questo comportamento? Io avevo trovato un paio di discussioni (che adesso non riesco più a reperire), che illustravano solo quanto avevo riportato, ma rispetto alla documentazione ufficiale niente, per cui, dove si può leggere l'informazione relativa? E qui vorrei riallacciarmi a quanto espresso da vuott, e cioè che non si tratta di un operatore ma di una composizione di un operatore e di una parola chiave. A parte il fatto, credo
, che anche se al posto di AND IF ci fosse in Gambas un unico operatore, magari denominato ANDALSO, si potrebbe ottenere qualcosa di identico a AND IF (credo, in base a quanto detto, che in entrambi i casi l'interpretazione dovrebbe essere qualcosa di elementare: se si incontra questa stringa valutare a sinistra e se è F (o V) uscire); sicuramente ci sarà un altro significato sottostante (questo fatto è comunque garantito dalla diversità dei comportamenti possibili ottentibili in Gambas e in .NET), e sarà quello indicato da Gianluigi, cioè una diversa logica di implementazione ANDALSO vs AND IF, ORELSE vs OR IF, anche se in un sottoinsieme di casi (quelli ammissibili in Gambas) si realizzano risultati equivalenti.
Non è ammissibile, p.es.:
If a And If b Or[Or If] c Then
EndIf
(1)
Il fatto che si precluda dal punto di vista sintattico un equivalente dell'istruzione .NET
If a Andalso b Or[Orelse] c then
End If
(2)
a mio avviso vuol dire che lo sviluppatore ha voluto evitare situazioni del tipo (1) in cui l'utente di Gambas sperasse di ottenere risultati del tipo (2), impossibili vista la logica richiamata da Gianluigi (in effetti chi vieterebbe di scrivere un'espressione di test del tipo (1) se la sintassi lo consentisse?). Tutto sommato, un operatore emulo di AndAlso e uno di OrElse non sarebbero male, avere la libertà di espressioni miste sarebbe certamente meglio, ma forse la cosa risultava un po' più dispendiosa in termini di realizzazione, e Misinini non aveva molto tempo a disposizione.. ;-)