Autore Topic: IsNumber, IsBoolean, Is.....  (Letto 4087 volte)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
IsNumber, IsBoolean, Is.....
« il: 27 Dicembre 2010, 11:26:04 »
Ieri sera ho scaricato l'ultima versione di Gambas3 (la 3398) e, con mio rammarico, mi son dovuto scontrare con un cambiamento radicale delle funzioni in oggetto.
Queste funzioni servivano a riconoscermi il tipo di valore che andavo a recuperare dai campi delle tabelle

Prima:

  Function IsNumber(Value As Variant) As Boolean

Dopo:

  Function IsNumber(Value As String) As Boolean


Non riesco a capire il perche' di questo cambiamento... Naturalmente cio' stravolge tutto il mio progetto di GridBox :(
Ha, e la funzione IsString e' stata pure tolta!  :evil:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #1 il: 27 Dicembre 2010, 12:17:40 »
mii era da mo che non aggiornavo...  ;D
Ho guardato il ChangeLog e risulta appunto questo:

r3329 | gambas | 2010-11-28 00:00:08 +0100 (dom, 28 nov 2010) | 18 lines

[INTERPRETER]
* NEW: The scaring change. IsByte(), IsShort(), IsSingle(), IsString(),
  IsPointer(), IsObject() and IsVariant() have been removed. IsNull() has
  been kept unchanged.
* NEW: IsInteger() now returns if a string can be converted to an Integer
  number.
* NEW: IsLong() now returns if a string can be converted to an Integer or a
  Long number.
* NEW: IsFloat() now returns if a string can be converted to a Float, but
  not an Integer or a Long.
* NEW: IsNumber() now returns if a string can be converted to an Integer, a
  Long or a Float.
* NEW: IsDate() now returns if a string can be converted to a Date.
* NEW: Str(True) and Str(False) now use the translation of the "True" and
  "False" string, if they exist in the current project.
* NEW: Val() now uses the translation of the "True" and "False" string, if
  they exist in the current project.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: IsNumber, IsBoolean, Is.....
« Risposta #2 il: 27 Dicembre 2010, 22:32:16 »
Bah! Scelta alquanto discutibile.  ???
Visita il mio sito personale: http://www.leonardomiliani.com

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #3 il: 31 Dicembre 2010, 17:52:20 »
Ho deciso di aggiornare anch'io ad una release più recente e purtroppo mi sono imbattuto nello stesso tipo di errore.

IsBoolean viene usato nella classe di PDFWriter alla riga 1264...

Codice: gambas [Seleziona]
 'Normalize parameters
  If (IsBoolean(dest)) Then dest = IIf(dest, "D", "F")
  dest = Upper(dest)
  If (dest = "") Then
    If (name = "") Then
      name = "doc.pdf"
      dest = "I"
    Else
      dest = "F"
    End If
  End If


Come possiamo risolvere il problema? Secondo voi devo riportare l'errore dovuto all'aggiornamento anche nel post di PDFWriter?
Credo che la soluzione sia di scrivere una Function che sostituisca True or False, in sostituzione di IsBoolean...
Anzi... la chiamiamo proprio IsBoolean, così non debbiamo cambiare neppure il testo...  :D

Mi ha dato il medesimo errore anche con IsString e IsObject.

Ho provato a risolvere scrivendo una funzione privata nella Classe di PDFWriter:

Codice: gambas [Seleziona]
Private Function IsBoolean($condizione as Variant) as Boolean
  If TypeOf($condizione) = gb.Boolean Then
    Return True
  Else
    Return False
  Endif
End


Ma mi restituisce comunque l'errore Type Mismatch: Wanted String, Got Boolean Instead.

PS. "IsBoolean" si trova anche alle righe 914, 1023, 1057, 1092, (1264) 4132, 4253, 4289, 4326...
« Ultima modifica: 31 Dicembre 2010, 18:11:38 da perseo »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: IsNumber, IsBoolean, Is.....
« Risposta #4 il: 31 Dicembre 2010, 18:10:42 »
Credo sia indubbiamente ed altamente più costruttivo scrivere una missiva direttamente alla spettabile attenzione di Benoit richiedendo la corretta implementazione delle funzioni suddette anziché scrivere codice che potrebbe risultare alquanto ridondante e futile poiché già intrinseco al linguaggio stesso...








Ma come caspita parlo?  :hard: :hard:

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #5 il: 04 Gennaio 2011, 12:29:31 »
Ho risolto le mancanze di PDFWriter, però per le funzioni non ho potuto utilizzare i nomi ISBOOLEAN, ISSTRING, ecc. perché nonostante non vengano più usati come funzioni, Gambas3 li associa ancora ancora alle vecchie funzioni (quindi restituisce errore), come se fossero rimasti "nomi protetti".

Quindi al posto di ISBOOLEAN, ISSTRING, ecc. ho dovuto usare dei nomi personalizzati tipo "myBOOLEAN", "mySTRING", ecc.

Codice: gambas [Seleziona]
Private Function myBoolean($condizione as Variant) as Boolean  
  If TypeOf($condizione) = gb.Boolean Then  
    Return True  
  Else  
    Return False  
  Endif  
End
 

In questo modo PDFWriter torna a funzionare... Nello speficio ho sostituito ISBOOLEAN, ISSTRING, ISOBJECT ed ISINTEGER.
Non mi pare ce ne siano altri... Ma se voi dovesse evidenziarne altri postateli così da evitare altri futuri errori.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #6 il: 04 Gennaio 2011, 13:13:53 »
Aggiornamento...

Citazione
r3390 | gambas | 2010-12-21 18:29:39 +0100 (mar, 21 dic 2010) | 4 lines

[INTERPRETER]
* NEW: IsInteger(), IsLong(), IsFloat(), IsDate() and IsNumber() argument
  now must be a string. There is no automatic conversion anymore.

Questo è un frammento del "log" dell'ultima revisione (3416) che ho scaricato... Le funzioni, aggiornate, richiedono come argomento una stringa.

PS. come già esposto dagli altri, non ne capisco il senso né tanto più il motivo di tale cambiamento radicale.  :-\
« Ultima modifica: 04 Gennaio 2011, 13:17:21 da perseo »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: IsNumber, IsBoolean, Is.....
« Risposta #7 il: 06 Gennaio 2011, 01:09:52 »
Aggiornamento...

Citazione
r3390 | gambas | 2010-12-21 18:29:39 +0100 (mar, 21 dic 2010) | 4 lines

[INTERPRETER]
* NEW: IsInteger(), IsLong(), IsFloat(), IsDate() and IsNumber() argument
  now must be a string. There is no automatic conversion anymore.

Questo è un frammento del "log" dell'ultima revisione (3416) che ho scaricato... Le funzioni, aggiornate, richiedono come argomento una stringa.

PS. come già esposto dagli altri, non ne capisco il senso né tanto più il motivo di tale cambiamento radicale.  :-\

Secondo me un modo per risolvere il problema tenendo contenti tutti c'è...basta inserire all'interno del codice sorgente di gambas, in riferimento alle funzioni in esame, un controllo sui dati passati. Se sono numeri allora bisogna convertirli mentre se sono stringhe li lascia così...in questo modo si ha la retro-compatibilità con codice già scritto.....

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: IsNumber, IsBoolean, Is.....
« Risposta #8 il: 06 Gennaio 2011, 22:40:10 »
Ho risolto le mancanze di PDFWriter, però per le funzioni non ho potuto utilizzare i nomi ISBOOLEAN, ISSTRING, ecc. perché nonostante non vengano più usati come funzioni, Gambas3 li associa ancora ancora alle vecchie funzioni (quindi restituisce errore), come se fossero rimasti "nomi protetti".

Quindi al posto di ISBOOLEAN, ISSTRING, ecc. ho dovuto usare dei nomi personalizzati tipo "myBOOLEAN", "mySTRING", ecc.

Codice: gambas [Seleziona]
Private Function myBoolean($condizione as Variant) as Boolean  
  If TypeOf($condizione) = gb.Boolean Then  
    Return True  
  Else  
    Return False  
  Endif  
End
 

In questo modo PDFWriter torna a funzionare... Nello speficio ho sostituito ISBOOLEAN, ISSTRING, ISOBJECT ed ISINTEGER.
Non mi pare ce ne siano altri... Ma se voi dovesse evidenziarne altri postateli così da evitare altri futuri errori.


1. puoi postare le funzioni create?
2. dove vanno inserite?

grazie

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #9 il: 07 Gennaio 2011, 20:25:05 »
Io le ho inserite direttamente nel codice della classe PDFWriter... e mi funziona perfettamente.
Codice: gambas [Seleziona]

'------------- Funzioni Sostitutive di IS.... -------------

Private Function myBooleano($condizione As Variant) As Boolean
  If TypeOf($condizione) = gb.Boolean Then
    Return True
  Else
    Return False
  Endif
End

Private Function myInteger($condizione As Variant) As Boolean
  If TypeOf($condizione) = gb.Integer Then
    Return True
  Else
    Return False
  Endif
End

Private Function myStringa($condizione As Variant) As Boolean
  If TypeOf($condizione) = gb.String Then
    Return True
  Else
    Return False
  Endif
End

Private Function myObject($condizione As Variant) As Boolean
  If TypeOf($condizione) = gb.Object Then
    Return True
  Else
    Return False
  Endif
End


Poi, nella classe di PDFWriter (magari prima fatti una copia di backup) devi sostituire (aiutati con FIND/REPLACE, sotto in menu STRUMENTI) tutti i vari:
'IsBoolean' con 'myBooleano',
'IsInteger' con 'myInteger',
'IsString' con 'myStringa',
'IsObject' con 'myObject'.

 ;)

Andrea, se vuoi ti posso postare la mia PDFWriter... ma ho fatto delle modifiche in altre parti del codice e non so se poi ti provocherebbe problemi inaspettati da altre parti.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: IsNumber, IsBoolean, Is.....
« Risposta #10 il: 08 Gennaio 2011, 02:00:19 »
Grazie , ho sistemato anche io. In fondo alla classe ho inserito le funzioni e sostituito le chiamate alle funzioni.
Altra modifica fatta per una libreria, vuole la dichiarazione delle variabili Static.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: IsNumber, IsBoolean, Is.....
« Risposta #11 il: 23 Febbraio 2011, 21:51:15 »
Vedo con piacere che mi state stravolgendo PDFWriter... mannaggia...  :P

Primo o poi toccherà fare il porting della libreria, ma fino a che il tutto non si stabilizza, non ci penso nemmeno (già sono fuori di mio...).

Comunque queste differenze le ho notate subito anche io, ma tenendo conto che molto comunque non si comportavano bene neppure nella 2, ho preferito supplire con funzioni specializzate e più precise.

La gestione e l'individuazione del tipo di variabile in gambas è piuttosto alla buona, almeno a mio avviso, specialmente con le classi e gli oggetti. Se ci fate caso manca anche IsObject(). In realtà la funzione è stata sostituita dalla sintassi "IS" (oggetto IS tipooggetto), ma di certo mi piaceva di più la gestione attraverso funzione.
Come avevo scritto a suo tempo, non sono stato molto amante del basic, e delle sintassi incise nelle librerie del linguaggio... E questo vale anche per Gambas. Secondo me è più leggibile un codice scritto con le funzioni e le procedure, invece da paroline sparse qua e la...