Autore Topic: Moduli: Simboli, riferimento e significato di statico  (Letto 917 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #15 il: 04 Settembre 2016, 15:15:54 »
Sapete cosa vi dico? Che non ci capisco più niente, credevo che... e invece...

     :rotfl:



" il mondo si è fermato io ora scendo qui
   prosegui tu, ...
"

(Gino Paoli -  Ti lascio una canzone)




« Ultima modifica: 04 Settembre 2016, 16:05:45 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.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #16 il: 04 Settembre 2016, 15:47:53 »
Va bene ridere che fa buon sangue, ma poi come sintetizziamo il tutto?
Intendi scriverne a Minisini come avevi pensato?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #17 il: 04 Settembre 2016, 23:10:22 »
Potrei stare per dire parecchie scemenze:
Il modulo a detta dello stesso Minisini è una classe statica senza eventi e in effetti se noi proviamo a inserirgli un evento questo si limita a non funzionare o da anche errore.
Una classe statica è una classe che si istanzia da sola.
Anche i Form sono classi statiche con la possibilità di ricevere parametri opzionali, il che vuol dire che in pratica possono essere istanziati.
Potrebbe essere che, per semplificare, Minisini si sia limitato ad aggiungere alle classi statiche (moduli compresi) l'auto istanziazione e, a togliere gli eventi ai moduli e stop.
Questo spiegherebbe perché sia i moduli che le classi statiche possono essere istanziati.
In verità quella dei moduli non può essere che una falsa istanziazione in quanto, come ho già detto, non avendo l'evento _new (il famoso costruttore) penso si limiti solo ad accettare nomi alternativi che fanno capo sempre a lui, però questa è solo un'illazione non sperimentata, magari _new è solo nascosto e invece crea nuove istanze.  :-\

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

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #18 il: 05 Settembre 2016, 11:49:35 »
È tutto qui, in queste prime frasi al punto 1 e più precisamente questa frase:

Codice: [Seleziona]
A static class cannot be instantiated: it would create an object with no dynamic variable, which is useless.
Minisini dice che istanziare una Classe statica od un Modulo sarebbe inutile in quanto creeremmo un oggetto senza variabile dinamica.
Caro Vuott potresti essere così cortese di ripartire con le spiegazioni filosofiche e farci capire cosa qui si intende per variabile dinamica?

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #19 il: 05 Settembre 2016, 16:06:32 »
.....Mistero del Cosmo, mistero dell'Universo !   

« 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.727
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #20 il: 05 Settembre 2016, 16:46:46 »
 sanmidi
Proteggici tu!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #21 il: 15 Febbraio 2017, 16:43:30 »
I moduli altri non sono che delle classi con i simboli statici.
Per simboli si intende Variabili, Proprietà, Metodi, Costanti, Eventi.
I simboli in un modulo non possono essere dinamici.
Allego il test che mi ha gentilmente inviato Tobias Boerge per spiegarmelo in questa discussione.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #22 il: 15 Febbraio 2017, 21:04:43 »
La questione fondamentale risiede nella differenza in tale contesto fra "Statico" e "Dinamico".
Data l'importanza dell'argomento Boege avrebbe dovuto spendere qualche parola in più per specificare e chiarire il significato di quelle due accezioni in Gambas.

Ad ogni modo mi pare che il nucleo del suo ragionamento sia il seguente:
" Now, a module is a normal class in which every symbol is implicitly madestatic by the compiler.
  You can still create objects from a module but thatisn't useful because you don't have dynamic symbols
  in a module. You will just end up with multiple objects that all reference the same data.
"
combinato con queste righe del suo esempio:
Codice: [Seleziona]
Dim x As New Mod
  ......
  Mod.A = 12
  x.Func()
  Mod.Func()

Si ha dunque che è possibile creare regolarmente Istanze individuali, singoli Oggetti di un Modulo mediante la parola-chiave "New"; ma i Simboli delle Istanze di un Modulo non sono suscettibili di diretta lettura né di assegnazione diretta di valori, restando questa caratteristica una prerogativa del Modulo, del quale quegli Oggetti sono Istanze.
In ciò si sostanzia l'affermazione di Boege per cui la creazione di Istanze individuali di un Modulo "that isn't useful", ossia non possiede alcuna utilità pratica.
Provate infatti ad aggiungere e provare queste righe:
Codice: [Seleziona]
......
   x.A = 1990
  Print x.A
  Mod.Func()
  ......


« Ultima modifica: 15 Febbraio 2017, 21:09:18 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.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #23 il: 15 Febbraio 2017, 21:14:21 »
Tutto giusto quello che dici, ma io personalmente, avendo sempre usato normalmente i moduli per routine di appoggio non avevo mai notato sostanziali differenze con le classi.
Invece grazie a Tobias ora è chiaro che le differenze ci sono e come, basta cambiare il modulo con una classe e provare lo stesso codice per rendersi conto di quello che invece io non riuscivo a capire.

Per essere più chiari copiate in Class1 il codice del modulo e cambiate così:
Codice: [Seleziona]
Public Sub Main()
  Dim cl As New Class1
  Dim x As New Class1

  ' Show that Mod and x share the same (static) variable A:
  cl.A = 10
  x.Func()
  cl.A = 12
  x.Func()
  cl.Func()

  ' Dump all symbols (they show up as static)
  DumpSymbols(x)
End
« Ultima modifica: 15 Febbraio 2017, 21:20:15 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #24 il: 15 Febbraio 2017, 22:05:44 »
Ritiro quanto ho detto poc'anzi, la mia comprensione è di tipo pendolare nel senso che viene ma poi va.  :-[

Ma se i metodi nei moduli sono statici, potete spiegarmi perché il secondo Print Module1.myAdd() non restituisce 24?

Va beh ora me ne vado a dormire vediamo se la notte porta consiglio...
« Ultima modifica: 15 Febbraio 2017, 22:07:40 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #25 il: 15 Febbraio 2017, 23:08:47 »
perché il secondo Print Module1.myAdd() non restituisce 24?

...perché, a mio parere, la Staticità del Modulo si afferma - come ho lasciato implicitamente intendere nel mio precedente intervento - più in relazione alle sue ipotetiche Istanze individuali (che - come ormai sappiamo - risultano essere inutili), che alla presunta capacità di conservare i valori precedentemente assegnati.
Anzi, con riferimento a tale capacità si può anche aggiungere, richiamando una norma più generale che ben conosciamo, che la Staticità di un Simbolo di un Modulo sussiste solo qualora la sua Visibilità sia Pubblica.


« Ultima modifica: 15 Febbraio 2017, 23:13:23 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.243
  • Tonno verde
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #26 il: 16 Febbraio 2017, 12:31:42 »
La notte più che consiglio a me, ha portato in dono un'ampia ed esaustiva spiegazione di Tobias.
In pratica conferma quanto già diceva Vuott poc'anzi e cioè; nel mio esempio il metodo MyAdd() calcola solo la somma dei suoi argomenti e non accede ad alcuna variabile (statica).

Come suggeritomi da Vuott appena ho un po di tempo vedo come dividere coerentemente questa discussione in modo che possa essere più utile a future ricerche, sperando che nel frattempo il buon Vuott ne faccia una guida per la wiki.  :)

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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Re:Gridview riottosa
« Risposta #27 il: 16 Febbraio 2017, 15:08:35 »
.... dei suoi argomenti e non accede ad alcuna variabile (statica).
...e gli argomenti (o meglio in questo caso: i "parametri") di una funzione non hanno una "visibilità" PubblicaGlobale.
« 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. »