Autore Topic: Corretta sintassi  (Letto 1590 volte)

Offline dregi

  • Gambero
  • **
  • Post: 85
  • Non possum tuis usque tandem abutere patientiae?
    • Mostra profilo
Corretta sintassi
« il: 29 Settembre 2019, 09:20:45 »
Ho visto che alcuni amici per creare un array scrivono Dim uArr As New String[] altri Dim uArr as String[] a cui fanno seguire uArr= New String[] Personalmente uso Dim uArr as String[]  e vedo tutto funzionare regolarmente. Da qui http://gambaswiki.org/wiki/lang/arraydecl  sembrerebbe che quando si tratta di definire la grandezza dell'array, sia opportuno Dim uArr as New String [3,3] mentre se dichiaro un array con dimensione aperta si più corretta Dim uArr as String[] . Secondo voi?                                                                                                       
« Ultima modifica: 29 Settembre 2019, 09:25:21 da dregi »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Corretta sintassi
« Risposta #1 il: 29 Settembre 2019, 14:11:59 »
Qui tralascio le Enbedded array.
Se vuoi usare la notazione suggerita da Gambas allora scrivi aArr.
Le array sono degli oggetti e come tali vanno istanziati al momento del loro uso che comprende anche il loro dimensionamento, quindi se prima o dopo dipende dalla situazione.
Nel caso di Private aString as String[] ha più senso istanziarla dopo ma con Dim se la istanzi subito non cambia niente e scrivi meno :)
Ma, se per esempio il vettore di interi viene scritto:
Codice: [Seleziona]
Dim aInt as integer[] = [1, 2, 3]
Dim aInt2 as Integer[]

aInt2 = aInt
Questi due vettori vengono istanziati automaticamente e non abbisognano della parola chiave New.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Corretta sintassi
« Risposta #2 il: 29 Settembre 2019, 14:31:58 »
Personalmente uso Dim uArr as String[]  e vedo tutto funzionare regolarmente.                                                                                           
...a me non sembra:
Codice: [Seleziona]
Public Sub Main()

  Dim uArr As String[]
 
  uArr[0] = "abcde"

End

Codice: [Seleziona]
Public Sub Main()

  Dim uArr As String[]
 
  uArr.Push("abcde")

End
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Corretta sintassi
« Risposta #3 il: 29 Settembre 2019, 14:44:55 »
Citazione
Ho visto che alcuni amici per creare un array scrivono Dim uArr As New String[] altri Dim uArr as String[] a cui fanno seguire uArr= New String[]

Vista la premessa io avevo inteso la sua domanda in modo diverso dal tuo.
Infatti parlo di istanziare prima e cioè al momento della dichiarazione o dopo e cioè al momento dell'uso.

Ma invece secondo te lui non istanzia proprio mai?  :poke:  ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Corretta sintassi
« Risposta #4 il: 29 Settembre 2019, 17:12:52 »
... dal tuo.

... secondo te ...

Non ho capito a chi ti rivolgi. 
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Corretta sintassi
« Risposta #5 il: 29 Settembre 2019, 17:15:30 »

Non ho capito a chi ti rivolgi.

Mi stavo rivolgendo a te...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Corretta sintassi
« Risposta #6 il: 29 Settembre 2019, 17:31:07 »
Ma invece secondo te lui non istanzia proprio mai?
Ti rispondo con una mia domanda da scemo... :donkey:

perché, se provo i semplici esempi, da me postati, non "vedo tutto funzionare regolarmente" ?

« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Corretta sintassi
« Risposta #7 il: 29 Settembre 2019, 17:51:05 »
Non capisco... entrambe non funzionano la prima contiene un errore di sintassi oltre ad non essere istanziata e la seconda non è istanziata.

Cosa è che volevi dire e che non ho capito?  :-\

E comunque sia andrebbero scritte così (come ho inteso facesse dregi):
Codice: [Seleziona]
Public Sub Main()

  Dim uArr As String[]

  uArr = New String[]
  uArr.Push("abcde")
  Print uArr[0]

End

Public Sub Main()

  Dim uArr As String[]
 
  uArr = New String[2]
  uArr[0] = "abcde"
  Print uArr[0]

End

 :ciao:
« Ultima modifica: 29 Settembre 2019, 18:04:44 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Corretta sintassi
« Risposta #8 il: 29 Settembre 2019, 18:09:21 »
...non è a me che va rivolta la domanda.

« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.239
  • Tonno verde
    • Mostra profilo
Re:Corretta sintassi
« Risposta #9 il: 29 Settembre 2019, 19:47:23 »
Giusto spetta a dregi precisare che cosa intendesse dire con:
Citazione
Personalmente uso Dim uArr as String[]  e vedo tutto funzionare regolarmente.

Io preferirei non lasciare il discorso a metà vorrei concludere il mio pensiero sulle array di Gambas.
Come abbiamo visto nella mia risposta a vuott dichiaro un array dinamico per poi istanziarlo immediatamente dopo a dimensione fissa.
Questo ha poco senso, se sappiamo già la dimensione meglio è metterla nella dichiarazione della variabile:
Codice: [Seleziona]
Dim aArr As New String[10]
a meno che il numero esatto non lo sappiate più avanti nel codice.
In questo caso non so se sia più corretto in termini di memoria, invece che dinamica dichiarare l'array con dimensione 1 e poi ridimensionarla.
Chiedo aiuto a vuott che ne sa più di me.

E già che ne ho parlato mostro un codice che ridimensiona un array dichiarato già dimensionato:

Codice: [Seleziona]
Public Sub Main()

  Dim aArr As New String[1]

  aArr[0] = "A 1"
  For i As Integer = 2 To 10
    aArr.Resize(i)
    aArr[i - 1] = "A " & i
  Next
  For Each s As String In aArr
    Print s
  Next

End
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.725
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Corretta sintassi
« Risposta #10 il: 30 Settembre 2019, 00:10:03 »
Codice: [Seleziona]
    aArr.Resize(i)
    aArr[i - 1] = "A " & i
 

...è sufficiante un semplice:
Codice: [Seleziona]
aArr.Push("A " & i)

dato che il Metodo ".Push( )", per aggiungere, deve in primo luogo ridimensionare.
« 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. »