Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - visual basic, nuovi eventi
Forum - C# / VB.NET - visual basic, nuovi eventi

Avatar
giova95 (Normal User)
Rookie


Messaggi: 29
Iscritto: 23/12/2011

Segnala al moderatore
Postato alle 16:24
Lunedì, 02/01/2012
ciao a tutti e buon anno :)
Ho un dubbio che mi gira in testa già da tempo...
cerco di esporre il mio dubbio con un esempio (quindi il mio dubbio non è sul programma che vi espongo ma sul concetto in generale)

Ipotizziamo che io debba realizzare un programma che risponda (tramite msgbox x esempio) a delle domande poste dall'utente.
Per semplificare ipotizziamo che l'utente possa inserire solo frasi standard...
Facendo nel modo "classico" (quello che è venuto in mente a me) bisognerebbe verificare tramite struttura If o Case quale domanda è stata fatta e andrebbe anche bene nel caso in cui il programma sia "limitato"
Però se volessimo fare in modo che le domande possibili siano molte, ipotizziamo un numero spropositato... 100.000 domande diverse (alle quali corrispondono risposte diverse), suppongo che il processo sarebbe molto lento no?

Quindi ho pensato, un ipotetico programma del genere sarebbe molto più veloce ed efficiente se si potesse creare un evento per ogni "domanda"
Del tipo: (scrivo un ipotetico codice, so anche io che è sbagliato)
Codice sorgente - presumibilmente VB.NET

  1. Public evento1 As Event
  2. Public evento2 As Event
  3. '...
  4. Public evento 100000 As Event
  5.  
  6. evento1.generated when textbox1.text = "ciao come stai?"
  7. evento2.generated when textbox1.text = "come hai passato il natale?"
  8. '...
  9. evento513.generated when textbox1.text = "quanto fa 2 +2 meno le zampe di una gallina?"
  10. '...
  11. evento100000.generated when textbox1.text = "come posso prevedere il futuro?"
  12.  
  13. Private Sub evento1(ByVal ..., ByVal ....) Handles event1
  14.    msgbox("bene grazie")
  15. End Sub
  16. Private Sub evento2(ByVal ..., ByVal ....) Handles event2
  17.    msgbox("il mio natale è stato bellissimo")
  18. End Sub
  19.  
  20. 'non vado avanti tanto avete capito il meccanismo :)



Senza stare a guardare le boiate che ho scritto a livello logico e di ragionamento è giusto?
si può fare in una qualche maniera?

grazie :)

Ultima modifica effettuata da giova95 il 02/01/2012 alle 17:37
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 16:34
Lunedì, 02/01/2012
Credo che il procedimento sia sbagliato a posteriori.
Mi spiego: devi organizzare il tuo codice in modo da separare la parte dei "dati" da quella del codice logico che li elabora. Il fatto di separare le informazioni permette di scrivere del codice efficace che può essere utilizzato e richiamato iterando i dati.
Nel pratico: ha senso mettere domande, fossero anche 100000 in un database, a cui associare anche la risposta. Questa è la parte dei dati. Il resto del codice, cioè la verifica della correttezza della risposta e dell'interfaccia grafica per "interagire" con l'utente invece va scritta 1 sola volta e riutilizzata sempre. Per questo ha senso spezzare il codice in funzioni e routine. Meglio ancora: impara a ragionare per oggetti e questi dubbi non ti verranno mai. Un'altra cosa: non ha senso pensare ad operazioni che possano mettere in difficoltà il tuo pc: un buon programma, strutturato bene, deve avere veramente una mole enorme di dati da trattare, prima di rallentare molto o esaurire la ram a disposizione.
Ciao.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 17:14
Lunedì, 02/01/2012
Come dice Renny la cosa migliore sarebbe un Database, altrimenti crei un Hashtable che ha come chiavi le domande e come valori le risposte, così per mostrare la risposta basta che fai
Codice sorgente - presumibilmente Plain Text

  1. MessageBox.Show(Questions(Question))


Dove Questions è l'Hashtable e Question la domanda dell'utente

PM Quote
Avatar
giova95 (Normal User)
Rookie


Messaggi: 29
Iscritto: 23/12/2011

Segnala al moderatore
Postato alle 17:30
Lunedì, 02/01/2012
renny, hai ragione, scusa... il codice l'ho scritto in fretta
Comunque fai conto che il codice effettivo era questo
Codice sorgente - presumibilmente VB.NET

  1. Private Sub evento1(ByVal ..., ByVal ....) Handles event1
  2.    msgbox("bene grazie")
  3. End Sub
  4. Private Sub evento2(ByVal ..., ByVal ....) Handles event2
  5.    msgbox("il mio natale è stato bellissimo")
  6. End Sub



ed è inevitabile una cosa del genere in quanto sono eventi diversi e devono essere gestiti in sub diversi.

La parte precedente era la creazione degli eventi... non so nemmeno se sia possibile una cosa del genere.
Io voglio creare un evento nuovo... un evento tipo il click di un bottone ma che non è "previsto" di default da vb e quindi è necessario che lo crei io

x qwerty: il programma "domande - risposte" è un esempio... il mio dubbio è sul gestire degli eventuali nuovi eventi

Per capirci meglio... quando si verifica l'azione di cliccare su un bottone (x esempio) il programma non deve verificare quale tra tutto l'elenco degli eventi è stato generato ma si crea subito un collegamento con il codice corrispondente, giusto? (se fino  a qui ho sbagliato, avvisatemi O.o)
Nel caso di un ipotetico programma del genere dovrei verificare che domanda è stata digitata confrontandola con tutte le domande nel database e  funzionerebbe anche nel modo giusto ma io vorrei sapere se fosse possibile generare un evento in modo che non sia necessario fare inutili confronti che fanno perdere tempo :(
spero di essere riuscito a spiegarmi... scusate se il mio ragionamento è poco comprensibile ma non trovo un altro modo di spiegarmi...

Ultima modifica effettuata da giova95 il 02/01/2012 alle 17:40
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 17:40
Lunedì, 02/01/2012
Se il tuo scopo è imparare come creare nuovi eventi e associarli magari ad un oggetto nuovo, creato da te, ti consiglio di leggerti questa guida.
http://www.pierotofy.it/pages/guide/Guida_al_Visual_Basic_ ...
Se proprio vuol esercitarti su quello, potresti creare un oggetto "quiz", che contiene la domanda e la risposta. Poi crei una sub "interroga" che può "generare" 2 eventi: l'evento risposta giusta e l'evento risposta sbagliata.
Creare 100000 eventi quante sono le domande è concettualmente sbagliato: quello che devi fare è astrarre: costruisci un codice riusabile che vada bene a prescindere dalla domanda che stai analizzando. In fondo, tu imposti la domanda come string, la risposta come string, fai un check e restituisci true o false a seconda se la risposta sia giusta. Questo "processo" logico vale per tutte le possibili domande che decidi di inserire...

Ultima modifica effettuata da Renny il 02/01/2012 alle 17:42
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:02
Lunedì, 02/01/2012
Secondo me tutto il discorso è insensato ...

Gli eventi non si applicano alla ricerca di una particolare frase (o a dei dati in genere) per cui un database (con i suoi indici) è la soluzione normale.

Quindi, o non hai utilizzato l'esempio giusto o non riesci a dire quello che vorresti fare.

Ultima modifica effettuata da nessuno il 02/01/2012 alle 20:26


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
giova95 (Normal User)
Rookie


Messaggi: 29
Iscritto: 23/12/2011

Segnala al moderatore
Postato alle 19:32
Lunedì, 02/01/2012
Grande renny :)
Le guide le avevo lette ma quella probabilmente devo averla saltata .-. :-| mea culpa :)
Leggo e se ci sono eventuali dubbi chiedo ;)
grazie ancora renny ;)

PM Quote
Avatar
VMikle (Ex-Member)
Rookie


Messaggi: 52
Iscritto: 14/09/2011

Segnala al moderatore
Postato alle 12:11
Martedì, 03/01/2012
Io penso che siano stati posti principalmente due problemi:
1) come definire degli eventi personalizzati e scatenarli
2) come evitare un controllo diretto di valori

Il primo sarà risolto dopo la lettura di qualche guida ma, per evitare situazioni analoghe in futuro, è necessario che tu sappia che l'intero framework è basato su alcuni elementi di livello basso utilizzati per creare una logica riciclata per creare nuove caratteristiche.
In parole povere si ha un punto di partenza "grezzo" e poi uno sviluppo dato combinazioni di strutture precedentemente create, quindi spesso risulta utile chiedersi come sia possibile che avvenga un determinato fenomeno dietro le quinte (ad esempio se textbox.textchanged fosse il fenomeno e basterebbe osservare il controllo textbox come classe e domandarsi sulla sua meccanica).

Il secondo invece è qualcosa di più complesso, infatti in tutti casi sin ora postati (vedasi database, if e compagnia bella) viene sempre effettuato un controllo diretto in un modo o nell'altro, addirittura anche nel tuo esempio è logico immaginare la clausola "when" come una verifica.
Cose del genere credo vadano risolte sfruttando tecniche di ricerca per pattern e\o metodi di apprendimento da intelligenza artificiale, ma non sapendone un granché preferisco rimanere in forse :yup:

Ultima modifica effettuata da VMikle il 03/01/2012 alle 12:14
PM Quote