Autore Topic: [RISOLTO] AND condizionale che valuta secondo operando solo se necessario  (Letto 1663 volte)

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #15 il: 05 Aprile 2015, 07:22:41 »

P.S. Ah forse ho capito, ti stai mica confondendo con le dichiarazioni a livello di modulo? In effetti li le devi impilare.

Hai ragione! avevo allargato il discorso anche al resto: internamente è infatti lecito abbreviare
Sub <homofaberfortunaesuae> End

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #16 il: 05 Aprile 2015, 10:30:53 »
And If non può essere mischiato a Or If per il semplice motivo che And If valuta da sinistra verso destra , mentre Or If fa esattamente l'opposto (destra → sinistra).
E' tutto qui il discorso: Gambas come incontra And If se è a False esce ed è morta li.
Ripeto per me è logico che sia così, mi sembra molto comprensibile o almeno al mio cervellino sembra molto comprensibile. :)
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #17 il: 05 Aprile 2015, 13:59:46 »
@filipsnew
Oscar Wilde sostiene che dare consigli è sciocco e darli buoni è fatale... :) tant'è mi corre comunque l'obbligo di sconsigliarti un approccio a Gambas3 prevalentemente sulla base delle tue conoscenze di .Net.
Gambas è si un Basic visuale ma non è Visual Basic e soprattutto gira su Linux il che non è da sottovalutare.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #18 il: 05 Aprile 2015, 17:46:09 »
Io dicevo che non mi veniva in mente nessuna maniera di emularlo usando gli operatori booleani.
Ovviamente si può emularlo in maniera differente.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #19 il: 05 Aprile 2015, 19:50:42 »
Io dicevo che non mi veniva in mente nessuna maniera di emularlo usando gli operatori booleani.
Ovviamente si può emularlo in maniera differente.

Ehi socio ti sei perso una parte del discorso :D
Vediamo di ricapitolare:
filipsnew non avendo visto subito And If aveva chiesto se in Gambas cera l'emulo di AndAlso e noi dando per scontata l'infallibilità di vuott che aveva detto non esserci questo in Gambas o per meglio dire che non gli risultava, abbiamo detto le nostre … anche se devo dire che la mia non era troppo … ;D
Poi anche se non mi crederai appena spento il computer mi sono ricordato che anche Gambas... ma ormai ero fuori tempo massimo.
Quindi è bene ribadire che AndAlso in VB.Net fa la stessa identica cosa che fa And If in Gambas e cioè se il booleano è a False non prosegue a valutare gli altri And essendo inutile (cortocircuitazione), come del resto fa ma al contrario Or If che non prosegue se il booleano è a True.
Filipsnew aveva persino tentato di cancellare il post appena trovato ciò che cercava senza riuscirci, cosa successa anche a me in altra circostanza e anche se off topic non sarebbe male se qualcuno ci dicesse come fare. ;D
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.281
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #20 il: 05 Aprile 2015, 21:00:04 »
.... noi dando per scontata l'infallibilità di vuott che aveva detto non esserci questo in Gambas o per meglio dire che non gli risultava...

1) Mai fidarsi ciecamente di quello che scrivo.

2) Rileggendo tutta questa discussione posso affermare con tranquillità che in Gambas - attualmente - non esiste un operatore come l'AndAlso del VB.NET .
Io avevo scritto che:
...non mi risulta  :-\ l'esistenza in Gambas di un operatore simile al AndAlso del VB.
Infatti, mentre in quel linguaggio esso è un operatore unico ed individuale, la tua proposta And If - al di là dei suoi effetti - è composta da un operatore booleano e da una parola chiave; pertanto non è un unico operatore.
...mi ricorda un po' la questione sulle stringhe a lunghezza fissa presenti in VB ed emulabili in Gambas:   
http://www.gambas-it.org/smf/index.php?topic=3919.0
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #21 il: 05 Aprile 2015, 21:16:42 »
Si ora che lo fai notare devo proprio ammettere che sebbene la parola AndAlso sia composta da più parole manca dello spazio e pertanto occorre convenire che semanticamente (?) il ragionamento di vuott non fa una piega.
Pertanto possiamo tranquillamente affermare senza ombra di dubbio che No in Gambas non esiste un operatore unico, individuale e indivisibile come appunto è AndAlso per VB.
Ne consegue che vuott era e rimane infallibile.

Circa il fatto che Gambas abbia o meno le stringhe a lunghezza fissa, parafrasando il famoso lettore dell'Unità che rispose al figlio che effettivamente i coccodrilli volicchiano, si può affermare sia stato provato che alcune stringhe di Gambas fissicchiano.
 :)
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.281
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #22 il: 05 Aprile 2015, 21:25:28 »
Ne consegue che vuott era e rimane infallibile.
No, l'infallibilità non mi appartiene, poiché l'infallibilità è propria di San Midi.
Io ho solo detto che non mi pareva esitesse un esplicito operatore corrispondente al AndAlso del VB. Questo non toglie, ovviamente, che si possano ottenere in Gambas identici risultati usando altre risorse.  


.... alcune stringhe di Gambas fissicchiano.
Esattamente: sono state trovate alcune soluzioni.

Del resto, come sappiamo, molte operazioni che non sono svolte in Gambas attraverso un'esplicita ed unica risorsa, sono effettuabili usando altre risorse e strategie.


Inoltre, se c'è interesse di qualcuno, questo potrebbe addirittura proporre a Minisini di implementare quell'operatore AndAlso !
« Ultima modifica: 05 Aprile 2015, 21:39:56 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #23 il: 05 Aprile 2015, 22:50:22 »

No, l'infallibilità non mi appartiene, poiché l'infallibilità è propria di San Midi.
...

E' chiaro che infallibile è un'iperbole ma che ci fidiamo di ciò che scrivi su Gambas è altrettanto evidente :)

Anche se in ritardo Buona Pasqua e Buona Pasquetta naturalmente estesa a tutta la lista
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline filipsnew

  • Gamberetto
  • *
  • Post: 28
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #24 il: 08 Aprile 2015, 08:07:30 »
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.:
Codice: [Seleziona]
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

Codice: [Seleziona]
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.. ;-)
« Ultima modifica: 08 Aprile 2015, 08:24:30 da filipsnew »
Sub <homofaberfortunaesuae> End

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.157
  • Tonno verde
    • Mostra profilo
Re: AND condizionale che valuta secondo operando solo se necessario
« Risposta #25 il: 08 Aprile 2015, 18:20:27 »
Hai ragione mi ricordavo male:
“Short-circuit path:
When you use several test expressions splitted by OR IF keywords, then they are evaluated from left to right until the first TRUE one is found, and then the test is TRUE. If all expressions are FALSE, then the test is FALSE.”

e quindi ho fatto un ragionamento errato chiedo venia

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro