Italian utilizzo di Smart String Literal" $ a cosa serve?

Xfood

Expert
Licensed User
scusate, non ho capito quando conviene utilizzare il carattere $ per formattare una stringa, e come utilizzarlo esattamente.
quale differenza ce in questo semplice codice?
qualcuno mi spiega come utilizzare correttamente $" ciao mondo"$
Grazie
B4X:
Sub TestAdd(aMax As Int)
    Private Num, Total As Double
    Total = 0
    For i=1 To aMax
        Num = 5.3 + 26.5
        Total = Total + Num
        'Log($"i=${i}  Num=${Num} Total=${Total} Avg=${Total/i} Diff=${31.8-(Total/i)}"$)                                     ' tra questo
        Log("i=" & i & " Num=" & Num & " Total=" & Total & " Avg=" & (Total/i) & " Diff=" & (31.8-(Total/i)))   ' e questo
               
    Next
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
La faccenda "carattere $" cui ti riferisci viene chiamata "Smart String Literal". Te lo scrivo sperando che tu cambi il titolo di questo thread con qualcosa tipo:
"Smart String Literal - a che serve?"
(magari anche mettendo dei buoni tag), così il thread potrebbe diventare facilmente trovabile, anche per altri membri italiani.

Innanzitutto c'è il tutorial di Erel: Smart String Literal.

Non volendo "annoiarsi" con l'inglese... come premette Erel i vantaggi nell'uso di SSL (non mi convince molto usare questo acronimo, ma qui facciamolo) sono 3:

1 - ti consente di scrivere il contenuto di un'unica stringa su più righe.
Come esempio prendo la tua riga di Log - uso però una variabile Stringa, solo per mia "comodità" :
B4X:
    Dim Total As Double
    Dim i, Num As Int

    Total = 123456.789
    Num = 987
    i = 13

    'Log($"i=${i}  Num=${Num} Total=${Total} Avg=${Total/i} Diff=${31.8-(Total/i)}"$)

    Dim strLog As String = $"
i = ${i}
Num = ${Num}
Total = ${Total}
Avg = ${Total / i}
Diff = ${31.8 - (Total / i)}
"$

    LogColor(strLog, Colors.Blue)

Scrivendo quella concatenazione su più righe, il sorgente è molto più leggibile (e modificabile), come vedi, si distinguono meglio le varie parti.
(Il log; nota che per ottenerlo così, al sorgente che hai indicato dovresti aggiungere parecchi & CRLF &):

1580698488616.png



2 - Non hai la necessità di combattere con virgolette varie.
Come da esempio di Erel, italianizzato:
B4X:
Log($"Non c'è bisogno di gestire le "doppie-virgolette"! "$)

' Senza SSL, dovresti scrivere:

Log("Non c'è bisogno di gestire le " & Quote & "doppie-virgolette" & Quote & "!")

' E per fortuna c'è la costante Quote, altrimenti... vai di triple doppie-virgolette!


3 - Traduzione letterale: Interpolazione di stringhe.
All'interno di SSL puoi inserire dei "segnaposto" (placeholders), utili per inserire variabili ed altre utili cosette.
E' anche facile scrivere delle SSL con dei segnaposto, anche se può non sembrare così.
Per iniziare una SSL, dito mignolo mano destra sullo Shift di destra, contemporaneamente mano sinistra, prima tasto 4 e poi 2, ovvero Dollaro e doppie-virgolette;
per inserire un segnaposto è sufficiente inserire un $ (Shift destro + tasto 4, quindi facilissimo) e compare un elenco di formattazioni utilizzabili.
Volendo inserire delle variabili del progetto senza particolare formattazione, basterà scegliere la prima voce del menu, <no format> e premere Tab:

1.gif


Gli altri tipi di formattazione sono spiegati nel menu stesso, scorrendo voce per voce (le prime sono per formattazioni numeriche, poi di data e tempo e "codice XML").
Ad esempio, modificando la strLog precedente in questo modo:
B4X:
    Dim strLog As String = $"
i = ${i}
Num = ${Num}
Total = $1.2{Total}
Avg = $1.2{Total / i}
Diff = $1.2{31.8 - (Total / i)}
"$
otterresti la formattazione con decimali e gruppi:

1580698519932.png
 
Last edited:
Top