Autore Topic: Funzione senza parametri riceve un valore senza uso di variabile globale e altro  (Letto 871 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Mi sono domandato se sia possibile passare un valore ad una Funzione, priva di parametri e posta in un unico Modulo principale (progetto a riga di comando), senza potersi servire di:
* variabili globali;
* altri Moduli o Classi create dall'utente;
* qualsiasi file esterno;
* funzioni esterne;
* comandi o programmi con Shell o Exec.

Insomma, tutto in locale.
E' dura con queste premesse, eh ?!

A me, per tentare di risolvere il dilemma, è venuto in mente di provare ad utilizzare in Gambas un Puntatore alla Funzione, ed ho scritto questo:
Codice: gambas [Seleziona]
Public Sub Main()

  Dim p As Pointer
  Dim st As Stream
  Dim i As Integer
  
' Creiamo un Puntatore alla Funzione:
   p = Calculus
  
' Scriviamo nel Puntatore un valore mediante i "Memory Stream":
   st = Memory p For Write
   Write #st, 9 As Integer
   st.Close
  
' Invochiamo la Funzione:
  i = Calculus()
  
  Print "Valore ritornato: "; i

End



Private Function Calculus() As Integer
  
  Dim pC As Pointer

' Puntiamo nuovamente alla Funzione:
   pC = Calculus
  
' Dereferenziamo il Puntatore (le variabili "p" e "pC" contengono il medesimo indirizzo di memoria: quello della Funzione)
' e facciamo una qualsiasi operazione:
   Return Int@(pC) * 100
  
End



Avete altre soluzioni e suggerimenti ?
« Ultima modifica: 20 Settembre 2014, 13:54: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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Sembra una forzatura voler fa fare a gambas cose specifiche del C.
Tuttavia una simile routine potrebbe essere usata per stabilire quali variabili dichiarate siano state effettivamente usate.
 Ciò permetterebbe un programmare più pulito.
giorgio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Sembra una forzatura voler fa fare a gambas cose specifiche del C.
Ho semplicemente testato le possibilità di Gambas utilizzando esclusivamente funzioni appartenenti alle risorse di Gambas sulla base di principi di informatica generali (come ad esmepio appunto i Puntatori).  :-\
Io credo che non esistano funzionalità specifiche di un linguaggio. Può sembrare così con Gambas, poiché questo è un linguaggio ancora giovane, e molte funzionalità non sono inserite (ed in alcuni casi probabilmente non si può o vuole). E comunque anche in Gambas accade che vengono aggiunte nuove risorse, nuove funzionalità. Da dove provengono ?
E' appena il caso di aggiungere che lo stesso Gambas possiede la funzione Extern che consente di richiamare e gestire funzioni di librerie esterne scritte in C che non appatengono a Gambas, ma sono "cose specifiche" dell'API di quella data libreria esterna. ....del resto da dove credete provengano i vari componenti gb.etcetera di Gambas ? A tal proposito, permettetemi di citare il mio maestro, D.B.: " Un linguaggio non serve a niente se non può chiamare altre librerie. "
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Sperimentare aiuta a crescere e mi spiace che hai mal interpretato il mio dire.
Se c'è una cosa che lo distingue dal C è l'immediatezza, la semplicità d'uso e come dici la facilità con cui è possibile interfacciarsi con altri linguaggi ed usare librerie altrui.
Non credo che sia interessante complicare queste eccezionali capacità introducendo i puntatori; Vero è però che quanto proponi può essere interessante per individuare le variabili dichiarate e poi non utilizzate.
con stima
giorgio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
.... può essere interessante per individuare le variabili dichiarate e poi non utilizzate.
Per fare questo è più facile e già sufficiente cliccare su: "Progetto" --> "Compila Tutto" nell'IDE.
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Ho provato quanto dici ossia "Progetto" --> "Alt +F7" , non mi pare che funzioni.
giorgio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Alquanto strano.

L'avviso compare in basso nel settore "Warnings" della Console dell'IDE (vedi immagine allegata).
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Uso gambas 3.
Come vedi dalla schermata allegata non mi compare warnigs; mi compare un warnig sulle qt che non riesco ad eliminare (a dire il vero non ho approfondito il problema).
Questa discussione mi fa pensare che che vi sono molti dettagli ( non veri e propi errori) che potrebbero migliorare la vita del programmatore e di cui varrebbe la pena discutere.


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Come vedi dalla schermata allegata non mi compare warnigs;
Non so cosa dire. E' strano, però, che non ti compare, cliccando sulle voci "Progetto" --> "Compila Tutto", quell'avviso.   :-\
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
no non compae, forse bisogna cambiare qualcosa nelle preferenze o nei componenti usati, ma non riesco ad individuare cosa.
giorgio

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Non so. Se mi trasmetti in privato, però, tutte le informazioni relative alla tua versione di Gambas ed al sistema, potrei - se non lo puoi fare tu - porre la domanda sulla Mailing List ufficiale.
« 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 giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Mi piace molto questa collaborazione dammi un paio di giorni per esplicitari il problema, anzi ne approfitto per farti notare alcune anomalie o dettagli che sarebbero a mio avviso da migliorare.
giorgio


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Non qui, però. Apri delle discussioni specifiche.
« 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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Progetto-->Proprietà-->Opzioni-->Activate Warnings = Si
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein