JavascriptProva

venerdì 28 giugno 2013

StringBuilder, impiego per modificare le stringhe.

Ecco quello che ho capito di StringBuilder.

    Sub Main()
        Dim variabile As New StringBuilder
        variabile.Append("Ciao")
        Dim variabile2 As New StringBuilder
        variabile2 = variabile
        Console.WriteLine(variabile2 Is variabile)
        Console.WriteLine(variabile2.ToString)
        variabile.Replace(variabile.ToString, "Deficiente")
        Console.WriteLine(variabile2 Is variabile)
        Console.WriteLine(variabile2.ToString)
        Console.ReadKey()

    End Sub
Dichiaro una variabile Variabile (che fantasia!) come StringBuilder, e vi attribuisco il valore "Ciao".

Dichiaro una variabile Variabile2 come StringBuilder e la assimilo a Variabile.

Ora testo se Variabile2 punta lo stesso oggetto di Variabile, e ottengo True.

E metto a video il valore di Variabile2 per vedere qual è: ottengo Ciao.

Quindi sostituisco su Variabile il valore "Ciao" con "Deficiente".

Testo sempre se Variabile2 punta lo stesso oggetto di Variabile e ottengo True.

Testo il valore di Variabile2 e ottengo il valore mutato di Variabile, ossia Deficiente.

Ecco:
True
Ciao
True
Deficiente



Bene. Questo è un modo di modificare le stringhe senza creare tremila oggetti nello heap da gettare nella monnezza una volta abbandonati.

Tipi Value e tipi Reference, ancora...

Bene, dunque esistono dei tipi Value e dei tipi Reference. I primi vengono memorizzati come valori scritti nello stack, i secondi vengono memorizzati nell'heap e il loro indirizzo viene memorizzato nello stack.

Per il tipo Value, nel momento in cui io dichiaro una variabile senza assegnazione, il suo valore appare zero. Per il tipo reference, nel momento in cui io dichiaro una variabile senza assegnazione, ottengo una segnalazione di errore, perchè non esiste niente nello heap il cui indirizzo io possa memorizzare nello stack.

In pratica, la variabile con cui io indico un tipo Value è una variabile, mentre quella con cui io indico un tipo Reference è un puntatore. La differenza viene fatta dal sistema, non da me esplicitamente come nel C++.

venerdì 21 giugno 2013

Variabile come tipo value in VB.NET (prova)

Ed ecco la dimostrazione che le variabili sono un tipo value e non reference.
Creo due variabili, me le mostro.
Assimilo una variabile all'altra, e me le mostro di nuovo.
Quindi cambio una variabile e ottengo due risultati diversi.
        Dim A As String
        A = "primo"

        Dim B As String
        B = "secondo"

        MsgBox("A " & A & ";B " & B)

        B = A

        MsgBox("A " & A & ";B " & B)

        A = "ciccio"

        MsgBox("A " & A & ";B " & B)
Alla fine, dopo aver modificato A, B rimane inalterata, quindi B è stato reso uguale ad A per valore, non per riferimento.

Array come tipo reference in VB.NET (prova)

Elaboriamo un test per le matrici.
Dichiaro due piccole matrici:
        Dim A() As String
        A = {"uno", "due", "tre"}

        Dim B() As String
        B = {"alfa", "beta", "gamma"}


        MsgBox("A(0) " & A(0) & "; B(0) " & B(0))


        B = A

        MsgBox("A(0) " & A(0) & "; B(0) " & B(0))

        A(0) = "ciccio"

        MsgBox("A(0) " & A(0) & "; B(0) " & B(0)) 
Ho creato due array diversi, A e B.
Mi mostro i valori con indice 0 di ambedue gli arrays, che sono diversi.
Eguaglio B ad A.
Mi mostro di nuovo i valori con indice 0 di ambedue gli arrays, che ora sono uguali.

Ecco la prova:
Cambio il valore con indice 0 di uno degli arrays.
Mi mostro il valore con indice 0 di ambedue gli arrays e scopro che è cambiato anche quello dell'array B, il che significa che sono stati resi lo stesso array, ossia che l'array è un tipo reference.
In sintesi: prima dichiaro i due array, quindi li eguaglio, quindi modifico un elemento di un array e vedo se risulta modificato anche l'elemento dell'altro array.
Lo faccio ora con le variabili.