Autore Topic: Usare un modulo?  (Letto 2510 volte)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Usare un modulo?
« il: 12 Agosto 2012, 18:36:00 »
Ciao,
sto cercando di capire che strada prendere per risolvere "bene" il mio problema.
Sto ricevendo da una porta seriale /dev/ttyUSB0 una stringa di 16 byte.
Devo scomporla in singoli in singoli byte e fare su ognuno un "ragionamento".
Alcuni sono byte su cui devo fare solo un controllo altri mi danno delle info che devo poi elaborare.
Quindi devo passare, ad una Funzione o subroutine o modulo o...è questa la questione! ;D
Dicevo devo passare una stringa e ricevere dei dati singoli.
Come si procede in questi casi? Che strada prendere?
(GAMBAS3)

Illuminati, rischiarate la mia strada...

Viva Gambas
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #1 il: 12 Agosto 2012, 19:03:24 »
Dicevo devo passare una stringa e ricevere dei dati singoli.
Come si procede in questi casi? Che strada prendere?
Allora... provo a cominciare io.
Da quello che mi pare di capire il tuo problema è come passare dei dati ad una funzione specifica che devi scrivere tu nel programma.
Ti segnalo questa pagina sulla nostra WIKI:
http://www.gambas-it.org/wiki/index.php/Scrivere_una_Funzione
« 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.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Usare un modulo?
« Risposta #2 il: 12 Agosto 2012, 21:39:17 »
Grazie per la dritta! Ho guardato l'esempio e può costituire una possibile soluzione.
La questione è che questo "coso" che devo costruire ( mi riferisco alla parte di programma che deve analizzare la stringa) potrebbe essere impiegato in differenti programmi e anche evolversi nel tempo migliorandolo ecc.
Ergo, pensavo di realizzarlo come un blocco a sè.
Ho provato a creare un modulo.... ma poi non sono riuscito ad usarlo (sono alle prime armi)

 :'(
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #3 il: 13 Agosto 2012, 00:11:57 »
Ergo, pensavo di realizzarlo come un blocco a sè.
Ho provato a creare un modulo.... ma poi non sono riuscito ad usarlo (sono alle prime armi)
Altri, più esperti di me, potranno darti delucidazioni precise, migliori e più approfondite; io mi limiterò, perdonami, a darti qualche informazione semplice e basilare.

Da quello che mi pare di aver capito la impostazione del modulo a sé stante l'hai già fatta. Provo  :-X ad aggiungere solo qualche semplice notizia.
Poniamo il caso che il tuo modulo si chiami "kikko.module" e che al suo interno vi sia una sola funzione... che magari (tanto per fare un esempio) effettui una semplice unione di due stringhe, una delle quali sarà passata dalla routine chiamante, per ottenerne alla fine una sola.
Dunque, nella classe principale FMain.class avremo:
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim nome As String
 
' Chiamiamo la funzione "unisciStringhe" contenuta nel modulo "kikko.module",
' e le passiamo contemporaneamente la stringa "kik", affinché la elabori.
' Ci attendiamo il ritorno - dal Modulo - di un'altra stringa che sarà al suo "ritorno" inserita
' nella variabile di tipo Stringa che abbiamo chiamato "nome".
' Poiché la funzione "unisciStringhe" si trova nel modulo "kikko.module" dobbiamo specificarlo:
   nome = kikko.unisciStringhe("kik")

' vedremo in console la stringa finale:
  Print nome

End


nel modulo kikko.module, invece, avremo la funzione vera e propria:
Codice: gambas [Seleziona]

'Riceve una stringa che va ad inserire nella variabile "a",
' e restituirà una stringa (ecco perché As String)
' alla funzione chiamante nella routine della classe principale "FMain.class":
Public Function unisciStringhe(a As String) As String
  
    Dim b As String
  
' svolge l'operazione precipua della funzione
' per la quale è stata chiamata, ossia unire
' la stringa ricevuta con "ko !" :
    b = a & "ko !"
    
' restituisce alla funzione chiamante la stringa finale
    Return b
  
End


In console avremo coerentemente la scritta:
kikko !

La definizione "Function unisciStringhe(a As String) As String" può essere - per certi versi - così banalmente spiegata:
questa è una Funzione di nome "unisciStringhe", che ha la capacità di ricevere una stringa -  che sarà inserita nella variabile "a" - , e che a sua volta restituirà una Stringa alla funzione principale chiamante.

Potremmo ovviamente avere anche situazioni più complesse:
Codice: gambas [Seleziona]

Public Function complessa(a As String, by As Byte) As Integer


in tal caso, diremmo - ...lo dico sempre in termini banali, non tecnici - che la funzione ha sostanzialmente la capacità di ricevere sia un valore di tipo Stringa, sia un valore di tipo Byte.... e però restituisce alla funzione chiamante un valore di tipo Integer.

Poniamo il caso che tu voglia richiamare nel modulo un oggetto o una variabile presente in un'altra classe, ad esempio in quella principale. In tal caso dovrai rendere pubblici i simboli dei moduli ed in particolare i controlli dei Form, in questo modo:
1) nell'IDE di Gambas (dove programmi) in alto a sinistra clicca su "Progetto";
2) scegli "Proprietà";
3) nella finestra di dialogo che appare, clicca sulla scheda "Opzioni";
4) cambia in SI i due campi afferenti alla "Compilazione".
Ovviamente le variabili che vuoi utilizzare devono essere globali e dichiarate come Public.

A questo punto, sempre restando nell'esempio di sopra mettiamo che dal modulo tu voglia cambiare il colore del Button1 presente sul Form (e che quindi sarebbe gestito normalmente in FMain.class). Avremo:
Codice: gambas [Seleziona]

Public Function unisciStringhe(a As String) As String
  
    Dim b As String
  
    b = a & "ko !"

' Dopo aver effettuato l'operazione cambio da qui,
' ossia dal Modulo, il colore del Button1 sul Form principale.
' Poiché appartiene alla classe principale, lo specifico:
   FMain.Button1.Background = Color.Red
      

    Return b
  
End


Il colore di Button1 muta in rosso.  ;D



Se impari a fare le chiamate delle Funzioni, sarà un gioco da ragazzi poi per te effettuare in futuro anche le chiamate a funzioni esterne mediante Extern.

 :ciao:
« Ultima modifica: 13 Agosto 2012, 00:55:34 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Usare un modulo?
« Risposta #4 il: 13 Agosto 2012, 21:48:43 »
Debbo dire che la scelta non l'ho ancora fatta. :)
In verità stavo provando ad usare una Subroutine all'interno del programma (per provare).
Ho tentato di usarne una (Subroutine) nel nuovo modulo e sono incappato subito con l'impossibilità di passare le variabili dal modulo al Fmain.class anche se dichiarate globali.
Ti ringrazio perché hai buttato sul tavolo parecchi spunti (per me ovviamente) sui quali devo pensarci su un po'.

"Ravano" e poi eventualmente riappaio.... ;D
GRAZIE!
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Usare un modulo?
« Risposta #5 il: 13 Agosto 2012, 22:48:58 »
citazione Kicco
Citazione
La questione è che questo "coso" che devo costruire ( mi riferisco alla parte di programma che deve analizzare la stringa) potrebbe essere impiegato in differenti programmi e anche evolversi nel tempo migliorandolo ecc.
Ti faccio una domanda: Vuoi sperimentare subito qualcosa di più evoluto , come dici tu, rispetto ad una Function o vuoi intanto sperimentare la Function, così come ti ha suggerito vuott?
Sento di informarti perchè tu possa scegliere la via che attualmente ti sembra più congeniale, sia rispetto alla tua conoscenza, sia rispetto al tuo obiettivo.  Esiste un altro percorso, ma richieda una maggiore esperienza, non tanto di programmazione, quanto di logica di programmazione. Potresti infatti realizzare una "Classe" in questo primo programma che potrebbe, poi, essere copiata più facilmente in programmi successivi; infatti la classe rappresenta un modulo distinto, come la Function, ma risiede in un'area del progetto, esterna alla Form dentro la quale puoi scrivere la tua brava Function di trattamento dati. Perciò ogni volta che ne avrai bisogno in un nuovo programma potrai inserirvi una copia senza andare a cercare la Form dentro la quale hai scritto la tale Function. So di essermi espresso in termini molto vaghi, ma non vorrei creare confusione. L'approccio tracciato da vuott è ottimo e potrà essere miogliorato anche nel prossimo programma che scriverai, però se tu volessi partire sin da subito con l'utilizzo della "Classe", dovresti modificare un pò il tuo approccio attuale. Spero di essere riuscito a trasmettere il pensiero, ma se non vi fossi invece riuscito, non ti preoccupare, segui le indicazioni dettagliate (qualche maestro che so io direbbe "anche troppo") di vuott. Ciao.
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #6 il: 14 Agosto 2012, 00:18:26 »
Vuoi sperimentare subito qualcosa di più evoluto , come dici tu, rispetto ad una Function o vuoi intanto sperimentare la Function, così come ti ha suggerito vuott?
Potresti infatti realizzare una "Classe" in questo primo programma....
Ho scritto intorno ad una Funzione, poiché mi era sembrato che Kikko propendesse per quella soluzione. Ad ogni modo il suggerimento di Picavbg è interessante ed offre in via generale molte possibilità.
Io modestamente suggerirei, però, un approccio graduale; quasi ad esercizio: potresti in una prima fase imparare a scrivere ed utilizzare una Funzione. Successivamente, quando avrai preso padronanza dell'uso delle Funzioni, potresti passare ad un livello diverso. ....però, come ha già detto Picavbg, questa deve essere ovviamente una tua decisione.
« Ultima modifica: 14 Agosto 2012, 00:34:13 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Usare un modulo?
« Risposta #7 il: 14 Agosto 2012, 15:36:41 »
Grazie per le risposte,
per ora ho messo tutto nella classe principale in una sub così intanto verifico il funzionamento.
Picavbg, il tuo discorso fila eccome, ho capito cosa vuoi dire e credo che probabilmente se il mio progetto avrà le gambe per funzionare probabilmente la Classe sarà la scelta finale.
La soluzione di Vuott è probabilmente quella intermedia.

Per ora sto cercando di capire cosa mi serve e quali sono i "tasselli", poi dovrò capire come organizzarli in modo sistematico per avere strumenti facili da usare e "muovere" (leggi Classi o Moduli).

Fate conto che 2 settimane fa non sapevo cosa fosse la programmazione per oggetti.... ;D
Il mio programmino apre porte seriale seleziona file ci scrive dentro analizza stringhe che riceve e trasmette via radio :P, sono molto soddisfatto di Gambas di voi e di me, ma ho bisogno di un po' di tempo per digerire il tutto.

Grazie e.... vi faccio sapere :)
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #8 il: 14 Agosto 2012, 16:41:17 »
per ora ho messo tutto nella classe principale in una sub così intanto verifico il funzionamento.
Ovviamente puoi piazzare la routine-Funzione anche nella classe principale.


Il mio programmino apre porte seriale seleziona file ci scrive dentro analizza stringhe che riceve e trasmette via radio....

Molto interessante.


Grazie e.... vi faccio sapere :)

....chissà se vorrai presentare ed inserire il tuo progetto nella sezione "Progetti degli Utenti"....  :-[
« Ultima modifica: 14 Agosto 2012, 16:45:58 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Usare un modulo?
« Risposta #9 il: 14 Agosto 2012, 22:08:54 »
Fate conto che 2 settimane fa non sapevo cosa fosse la programmazione per oggetti.... ;D
Complimenti!

Continua a fare Gambas per le tue ossa informatiche. Per eventuali domande puoi chiedere, tanto io arrivo al massimo secondo.
L'idea di vuott di inserire il programma fra quelli de "Progetti degli Utenti" è ottima, ma non avere fretta, semprecchè, come dice sempre vuott, tu ne abbia voglia. Però, ..., dai, ... farsi conoscere è bello; si crea una corrispondenza biunivoca con la comunità.
Ciao.
:ciao:

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re: Usare un modulo?
« Risposta #10 il: 15 Agosto 2012, 16:57:56 »
Grazie,
vediamo se riesco a raggiungere l'obbiettivo che mi sono posto, e quando il programma sarà "maturo" volentieri lo metterò a disposizione della comunità (dovrò capire come si fa....ma a tempo debito) purtroppo è un programma molto dedicato e contiene anche un protocollo di comunicazione che non posso condividere, ma il resto sì.  Caso mai lo "ripulirò" un pochino :D :D

Kicco
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #11 il: 15 Agosto 2012, 17:26:14 »
...contiene anche un protocollo di comunicazione che non posso condividere, ma il resto sì.  Caso mai lo "ripulirò" un pochino :D :D

 :violent:
« 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Usare un modulo?
« Risposta #12 il: 15 Agosto 2012, 18:10:04 »
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Usare un modulo?
« Risposta #13 il: 15 Agosto 2012, 18:11:31 »
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?

......contiene un protocollo che non posso condividere !   :rotfl:
« Ultima modifica: 16 Agosto 2012, 00:04:00 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 Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Usare un modulo?
« Risposta #14 il: 15 Agosto 2012, 22:36:24 »
@ vuott:
Molto efficace l'effetto "martellate in modo perpetuo". Ma come hai fatto, se è lecito saperlo?

......contiene un protocollo di comunicazione che non posso condividere !   :rotfl:
Ah...Ah...Ah
:ciao: