Italian CORSO DI SVILUPPO APP

LucaMs

Expert
Licensed User
Longtime User
Il 4 non è il più indicato per la scrittura di un buon / ottimo codice a livello di qualità. Decisamente meglio la nuova serie di modelli "pensanti" oX (es. o1-mini / o3-mini).
Uso quello che mi viene offerto (gratuitamente 😁).

Proprio adesso devo decidere se chiedergli di generare un certo algoritmo o lambiccarmi il cervello e fare da me!
Che poi è una cosa che già gli avevo chiesto e non funzionava affatto.
 

luke2012

Well-Known Member
Licensed User
Longtime User
Molto "divertente". Adesso ho voluto vedere se, dopo che negli scorsi giorni gli ho "spiegato" che in B4X ByRef non esiste e tantomeno per un Int, gli ho chiesto:

Ho scritto una semplicissima funzione in linguaggio B4X che calcola l'area di un quadrato, eppure mi dicono che contenga un errore; puoi dirmi quale? Ecco la funzione:
B4X:
Sub AreaQuadrato(ByRef Lato As Int) As Long
    Return Lato * Lato
End Sub

Riposta:

Il problema nella tua funzione sta nel tipo di ritorno dichiarato e nel modo in cui la funzione è definita in B4X. In B4X, quando definisci una subroutine (Sub), essa non può avere un tipo di ritorno esplicito come As Long. Le subroutine in B4X sono utilizzate per eseguire azioni o operazioni senza ritornare un valore specifico.

Se vuoi calcolare l'area di un quadrato e restituire il risultato, devi definire la tua funzione come una Function anziché una Sub. Ecco come potresti riscrivere la tua funzione per correggerla:

B4X:
Function CalcolaAreaQuadrato(Lato As Int) As Long
    Dim Area As Long
    Area = Lato * Lato
    Return Area
End Function

In questa versione corretta:
  • Ho cambiato Sub in Function per indicare che la funzione restituisce un valore.
  • Ho dichiarato una variabile Area di tipo Long per memorizzare il risultato del calcolo.
  • Ho assegnato il risultato del calcolo Lato * Lato alla variabile Area.
  • Ho utilizzato Return Area per restituire il valore dell'area calcolata.
Ora, quando chiami questa funzione CalcolaAreaQuadrato, puoi assegnare il risultato a una variabile o utilizzarlo direttamente nel tuo codice, a seconda delle tue esigenze.



Fa ridere o piangere?

Ora vediamo cosa risponderà quando gli dirò che è un pirla, che in B4X una Sub può, anzi è sempre, una funzione e di nuovo che ByRef...

Io:
Sbagli. In B4X tutte le Sub sono sempre funzioni. L'errore era soltanto che in B4X ByRef non esiste e comunque non si potrebbe fare per un tipo di dato Int.

Riposta:
Hai ragione! In B4X tutte le Sub possono restituire un valore e non esiste la distinzione tra Sub e Function come in altri linguaggi.

L'errore principale nel tuo codice è l'uso di ByRef, che in B4X non esiste. Inoltre, anche se esistesse, non potrebbe essere applicato a un tipo primitivo come Int, perché i tipi di valore vengono sempre passati per valore e non per riferimento.

Ecco la versione corretta della tua funzione:
B4X:
Sub AreaQuadrato(Lato As Int) As Long
    Return Lato * Lato
End Sub
Questa versione funziona perfettamente in B4X senza errori. Grazie per il chiarimento! 😊

OpenAI ha impostato il suo prodotto in modo che sia sempre gentile dia sempre ragione ai sui utenti, soprattutto quelli che pagano l'abbonamento ahahaha

Battute a parte, quale modello hai usato ? Il 4o o l'o1 / o3-mini ?
 
Top