Italian Chiamata CallSub2

Fulvio75

Well-Known Member
Licensed User
Dato che così funziona per il mio scopo ovvero chiamare delle sub 'diciamo' costruite con delle variabili, c'è un altro modo per chiamare queste sub senza usare le classi che servono a ben altro?
Con i moduli normali callsub2 non funziona, va solo con Activity e classi.
La classe che ho creato contiene tutte le sub che devo chiamare componendone il nome in callsub2.
 

LucaMs

Expert
Licensed User
Longtime User
Le classi servono quando devi avere più oggetti simili tra loro ma con proprietà diverse.

Ad esempio, potresti avere una List o Map di oggetti... boh, calciatore. Avresti una classe clsCalciatore; poi:

B4X:
Dim mapCalciatori
Dim mapCalciatori.Inizialize

Dim Calciatore1 As clsCalciatore
Calciatore1.Initialize
Calciatore1.Nome = "Ugo"
Calciatore1.Cognome = "Ughini"
Calciatore1.Ruolo = "Centrocampista"
mapCalciatori.Put("Ughini", Calciatore1)

Dim Calciatore2 As clsCalciatore
Calciatore2.Initialize
Calciatore2.Nome = "Frengo"
Calciatore2.Cognome = "Freghini"
Calciatore2.Ruolo = "Attaccante"
mapCalciatori.Put("Frengo", Calciatore2)

Per utilizzare delle sub (soprattutto funzioni, ovvero che restituiscano valori) di uso generale, di solito si usano i moduli di codice (ad esempio potrei averne uno per tutto ciò che riguarda SQLite), oppure una UNICA istanza di una classe, una variabile pubblica a disposizione di tutto il resto del progetto.

Dipende molto da ciò che vuoi ottenere, comunque.

Con i moduli normali callsub2 non funziona, va solo con Activity e classi.
Le Sub dei moduli puoi chiamarle semplicemente con NomeModulo.NomeSub. Stessa cosa con le variabili-oggetto, eh: NomeVariabileOggetto.NomeSub.

Non so per quale motivo tu abbia dovuto usare CallSub2.
 

Fulvio75

Well-Known Member
Licensed User
Non so per quale motivo tu abbia dovuto usare CallSub2.
Appunto per comporre il nome della sub altrimenti come faccio?
Mica si può fare modulo.codice & versione
Codice & versione è il nome della sub da chiamare
Praticamente ho fatto come chiamare un evento callsub(mevent,"_click")
 

Sagenut

Expert
Licensed User
Longtime User
Voglio scrivere qualcosa anche io.
Giusto per rompere le scatole. 🤣
Per convertire al volo temporaneamente qualcosa puoi fare il cast.
Esempio
B4X:
Dim a, b as String
a = "5"
b = "5"
Log(a.As(Int) + b.As(Int))
 

Fulvio75

Well-Known Member
Licensed User
Voglio scrivere qualcosa anche io.
Giusto per rompere le scatole. 🤣
Per convertire al volo temporaneamente qualcosa puoi fare il cast.
Esempio
B4X:
Dim a, b as String
a = "5"
b = "5"
Log(a.As(Int) + b.As(Int))
🤣🤣🤣🤣🤣🤣🤣🤣
Non c'entra nulla
 

Sagenut

Expert
Licensed User
Longtime User
🤣🤣🤣🤣🤣🤣🤣🤣
Non c'entra nulla
Mi sembrava di aver letto che in un punto ti serviva di usare un Int come fosse una stringa.
Anche se poi la soluzione era un'altra.
Era un post di Cultura Generale. 🤣 🤣
Nel prossimo la Fotosintesi Clorofilliana.
 

Alessandro71

Well-Known Member
Licensed User
Longtime User
Appunto per comporre il nome della sub altrimenti come faccio?
Mica si può fare modulo.codice & versione
Codice & versione è il nome della sub da chiamare
Praticamente ho fatto come chiamare un evento callsub(mevent,"_click")
perchè creare una sub per ogni combinazione di modulo.codice & versione invece di una sola sub generica e passare codice, versione come parametri?
 

LucaMs

Expert
Licensed User
Longtime User
Praticamente ho fatto come chiamare un evento callsub(mevent,"_click")
Che sarebbe sbagliato. A parte che non mi piace affatto chiamare direttamente eventi delle view (si dovrebbe, semmai, chiamare la stessa sub chiamata dall'evento xxx_click), il primo parametro di callsub è l'oggetto, il secondo il nome del metodo (sub).

perchè creare una sub per ogni combinazione di modulo.codice & versione invece di una sola sub generica e passare codice, versione come parametri?
Mi sa che se non ci dice almeno vagamente cosa dovrà fare quella sub, ci arriveremo il 2 gennaio 2024 😄
 

Fulvio75

Well-Known Member
Licensed User
perchè creare una sub per ogni combinazione di modulo.codice & versione invece di una sola sub generica e passare codice, versione come parametri?
Perchè ogni sub che ha all'interno diverse righe di codice molte righe che calcolano un dato hanno il nome Codice_Versione:

allora...
PLC passa il Codice e una Versione all'app

La sub ha nome:
Get_Codice_Versione(Parametro as int...Float...) as int....float

per cui mi è molto più semplice così in automatico si indirizza il tutto alla giusta sub, che ognuna di esse deve fare e ha funzioni diverse, alcune prendono i dati SQLite altre calcolano il dato in autonomia.
E' anche più ordinato (Lucas)
 

LucaMs

Expert
Licensed User
Longtime User
Perchè ogni sub che ha all'interno diverse righe di codice molte righe che calcolano un dato hanno il nome Codice_Versione:

allora...
PLC passa il Codice e una Versione all'app

La sub ha nome:
Get_Codice_Versione(Parametro as int...Float...) as int....float

per cui mi è molto più semplice così in automatico si indirizza il tutto alla giusta sub, che ognuna di esse deve fare e ha funzioni diverse, alcune prendono i dati SQLite altre calcolano il dato in autonomia.
E' anche più ordinato (Lucas)
A meno che quelle routine abbiano eventi e/o resumables sub, puoi metterle tutte in un modulo di codice, anziché in una classe.
 

Fulvio75

Well-Known Member
Licensed User
A meno che quelle routine abbiano eventi e/o resumables sub, puoi metterle tutte in un modulo di codice, anziché in una classe.
si ma non va CallSub c'è scritto nella descrizione comando

1701418226921.png
 

Fulvio75

Well-Known Member
Licensed User
callsub lo utilizzo in un modulo di codice e può chiamare solo un activity oppure modulo di classe
 

LucaMs

Expert
Licensed User
Longtime User
Giusto, devi "costruire" il nome della routine da chiamare. Vorrà dire che creerai una classe, istanziata una sola volta (unica variabile-oggetto pubblica, nella B4XMainPage, se il progetto è di questo tipo).

In alcuni linguaggi è proprio possibile dichiarare un tipo "speciale" di classe, della quale si può creare proprio soltanto un'unica istanza. Si chiamano Singleton.
 

Fulvio75

Well-Known Member
Licensed User
non dicevi sul serio, vero?
ci sono pagine di un thread per far funzionare una cosa convoluta e non interamente chiara…
a me piace l'ordine del codice perchè così trovo tutto al posto giusto, faccio giri e chiamate assurde di codice per metterlo in posizioni dove posso ritrovarlo facilmente
 
Top