Italian [RISOLTO] B4A - Domanda stupida: come si va a capo nel testo di una label?

3uowiS

Active Member
Licensed User
Chiedo scusa per la banalità della domanda, mi vergogno a chiederlo 😅 ma è più di mezz'ora che cerco nel forum senza trovare una risposta.
Ho trovato che per spezzare il testo su più righe nel codice si mette & _ ma non ho trovato niente riguardo andare a capo e quindi magari lasciare anche una riga di spazio.
Solitamente uso testi corti nelle Label quindi fin'ora non ne ho avuto bisogno... 🙈
 

Aldo's

Active Member
Licensed User
Se ho capito bene la domanda stai chiedendo come fare un "a capo".
Concatena CRLF
 

Sagenut

Well-Known Member
Licensed User
E' consigliabile utilizzare lo StringBuilder
B4X:
Dim sb As StringBuilder
sb.Initialize
sb.Append("Prima Riga").Append(CRLF).Append("Seconda Riga")
Label1.Text = sb.ToString
sb.Append(CRLF)
sb.Append("TERZA RIGA")
Label1.Text = sb.ToString
perchè una stringa normale è IMMUTABILE e ad ogni concatenazione utilizzando l'operatore & si genera una Nuova Ulteriore Stringa come risultato finale.
In caso di molte funzioni simili si và piano a piano ad occupare memoria.
Anche se credo che sia difficile mandare in crisi uno smartphone con delle stringhe è meglio evitare se possibile.
Lo StringBuilder genera invece una stringa MUTABILE che quindi rimane la stessa e viene sempre modificata.
Nell'esempio vedi che puoi concatenare più stringhe con una sola riga di comando e poi continuare ad aggiungere pezzi alla stringa anche successivamente.
 
Last edited:

MicroDrie

Active Member
Licensed User
Cosa ne pensi di questo "one liner"?
B4X:
Label1.Text = $"Prima Riga ${CRLF}Seconda Riga"$
o in due righe?
B4X:
Label1.Text = _
$"Prima Riga
Seconda Riga"$
 

amorosik

Well-Known Member
Licensed User
E' consigliabile utilizzare lo StringBuilder
B4X:
Dim sb As StringBuilder
sb.Initialize
sb.Append("Prima Riga").Append(CRLF).Append("Seconda Riga")
Label1.Text = sb.ToString
sb.Append(CRLF)
sb.Append("TERZA RIGA")
Label1.Text = sb.ToString
perchè una stringa normale è IMMUTABILE e ad ogni concatenazione utilizzando l'operatore & si genera una Nuova Ulteriore Stringa come risultato finale.
In caso di molte funzioni simili si và piano a piano ad occupare memoria.
Anche se credo che sia difficile mandare in crisi uno smartphone con delle stringhe è meglio evitare se possibile.
Lo StringBuilder genera invece una stringa MUTABILE che quindi rimane la stessa e viene sempre modificata.
Nell'esempio vedi che puoi concatenare più stringhe con una sola riga di comando e poi continuare ad aggiungere pezzi alla stringa anche successivamente.

Il consiglio e' molto interessante
Mi chiedevo, ma volendo vedere il pelo (nel programma intendo), come fare per misurare in modo analitico l'occupazione di ram del programma?
Se io volessi verificare col 'metodo sperimentale' quanta ram il mio programma sta usando, al byte intendo, como se fa?
 

Sagenut

Well-Known Member
Licensed User
Interessante anche la tua domanda.
Credo che meriti una discussione tutta sua se non esiste già.
 

Star-Dust

Expert
Licensed User
Sul Forum lo trovi è un argomento già trattato più volte. C'è una libreria specifica che accede alle statistiche del s.o.
 

MicroDrie

Active Member
Licensed User
Ovviamente vuoi appesantire il meno possibile le scarse risorse. Ma se metti un calcolo come formula in una stringa, il programma diventa anche più gestibile e comprensibile. Quando ho scritto un programma in linguaggio macchina 40 anni fa, ho scritto programmi molto piccoli. Lo stesso programma ora è molte volte più grande a causa del sovraccarico che il compilatore di programmi aggiunge oggi.

Ovviamente puoi risparmiare un po' di memoria rimuovendo quanti più spazi, commenti e righe vuote possibile. Ma quelle poche posizioni di memoria salvate superano un codice di programma molto difficile da leggere?

Nei rari casi in cui disponi di interi blocchi di testo, puoi sempre considerare di estrarre il testo compresso tramite la stessa sottoroutine pubblica.

Pragmaticamente, penso che i vantaggi da ottenere nella pratica non superino gli svantaggi nello sviluppo e nella manutenzione del codice del programma.
 

amorosik

Well-Known Member
Licensed User
Ovviamente vuoi appesantire il meno possibile le scarse risorse. Ma se metti un calcolo come formula in una stringa, il programma diventa anche più gestibile e comprensibile. Quando ho scritto un programma in linguaggio macchina 40 anni fa, ho scritto programmi molto piccoli. Lo stesso programma ora è molte volte più grande a causa del sovraccarico che il compilatore di programmi aggiunge oggi.

Ovviamente puoi risparmiare un po' di memoria rimuovendo quanti più spazi, commenti e righe vuote possibile. Ma quelle poche posizioni di memoria salvate superano un codice di programma molto difficile da leggere?

Nei rari casi in cui disponi di interi blocchi di testo, puoi sempre considerare di estrarre il testo compresso tramite la stessa sottoroutine pubblica.

Pragmaticamente, penso che i vantaggi da ottenere nella pratica non superino gli svantaggi nello sviluppo e nella manutenzione del codice del programma.

Si certo, l'importante e' capire come funzionano le cose
Poi ognuno fa come meglio crede
Chi pensa l'ottimale sia il sorgente autodocumentante
Chi pensa sia meglio risparmiare 4 byte
Chi propende per le prestazioni velocistiche custa quel che custa (..viva sempre l'Austa..)
Quello e' lo 'stile' di ogni programmatore, ed e' inaspettatamente riconoscibile in modo ben preciso
Non entrerei nel merito del 'cosa sia meglio', quello ognuno lo valuta per se
Mi fermerei al 'come le che funziona sta cosa', in quanto univoco e dipendente solo dal linguaggio/ambiente scelto
 

Star-Dust

Expert
Licensed User
Si certo, l'importante e' capire come funzionano le cose
Poi ognuno fa come meglio crede
Chi pensa l'ottimale sia il sorgente autodocumentante
Chi pensa sia meglio risparmiare 4 byte
Chi propende per le prestazioni velocistiche custa quel che custa (..viva sempre l'Austa..)
Quello e' lo 'stile' di ogni programmatore, ed e' inaspettatamente riconoscibile in modo ben preciso
Non entrerei nel merito del 'cosa sia meglio', quello ognuno lo valuta per se
Mi fermerei al 'come le che funziona sta cosa', in quanto univoco e dipendente solo dal linguaggio/ambiente scelto
Per me l'importante è che lo comprano e ci paghi le bollette
 
Last edited:

Star-Dust

Expert
Licensed User
Ovviamente vuoi appesantire il meno possibile le scarse risorse. Ma se metti un calcolo come formula in una stringa, il programma diventa anche più gestibile e comprensibile. Quando ho scritto un programma in linguaggio macchina 40 anni fa, ho scritto programmi molto piccoli. Lo stesso programma ora è molte volte più grande a causa del sovraccarico che il compilatore di programmi aggiunge oggi.

Ovviamente puoi risparmiare un po' di memoria rimuovendo quanti più spazi, commenti e righe vuote possibile. Ma quelle poche posizioni di memoria salvate superano un codice di programma molto difficile da leggere?

Nei rari casi in cui disponi di interi blocchi di testo, puoi sempre considerare di estrarre il testo compresso tramite la stessa sottoroutine pubblica.

Pragmaticamente, penso che i vantaggi da ottenere nella pratica non superino gli svantaggi nello sviluppo e nella manutenzione del codice del programma.
Prima era l'hardware che rincorreva il software per esserne all'altezza
Adesso è il software che rincorre l'hardware per sfruttarlo al pieno

Ovvero prima cercavi più RAM per fare girare applicativi grossi. Adesso c'è molta RAM e risorse che non hai applicazioni che realmente le usino
 

Sagenut

Well-Known Member
Licensed User
A meno che uno non stia sviluppando una app di dimensioni bibliche ed estremamente complessa penso che basti programmare in maniera pulita e sensata per quel che uno può e conosce.
Non sarà qualche variabile stringa concatenata a mandare in crisi un cellulare o un tablet.
 

MicroDrie

Active Member
Licensed User
L'arte della programmazione oggi risiede più in un software scritto in modo intelligente, efficiente, riutilizzabile, sicuro e soprattutto user-friendly. Qui sta la potenza di B4XPages, che rende possibile ripulire i pezzi di software inutilizzati per liberare risorse.
 
Top